PIC16F84A ile Mikrodenetleyici Mimarisine ve Datasheet Okumaya Giriş -3-

Bu başlıkta PIC16F84A mikrodenetleyicisinin blok diyagramını incelemeye devam ediyoruz. Sizinle beraber ben de datasheeti ilk defa açtım ve açıkcası çok sürpriz beklemiyorum. Çünkü öncesinde AVR mikrodenetleyicileri incelemiş ve bir 8-bit mikrodenetleyicinin donanımını öğrenmiştik. Bu donanımlar birbirine benzediği için aynı bir kere araç kullanmayı öğrendikten sonra diğer araçları da az bir zahmetle kullanabildiğiniz gibi mikrodenetleyici mimarisini bir kere tam anlamıyla öğrendikten sonra diğerlerini öğrenmeniz zor gelmeyecektir.

İşlemci çekirdeğini inceledikten sonra bakmamız gereken birimler hafıza birimleridir. Bu hafıza birimleri ve işlemci arasında küçük aracı elemanlar yer almaktadır. Bunlar komut yazmacı, program sayacı, komut çözümleyicisi gibi ünitelerdir. Şimdi FLASH program hafızası ve çevresindeki elemanları incelemekle devam edelim.

Burada FLASH program hafızasının 1K x 14 olarak ifade edildiğini görüyoruz. Bu 14 bitlik 1K hücrenin yer aldığı anlamına geliyor. Daha ayrıntılı bilgi için ROM bellekleri anlattığımız makalemize bakabilirsiniz. Hafızalar ifade edilirken kilo bit oranına ifade edilir. Bu hafıza 14 kilo bit olmakla beraber 14 bitlik hücreler olarak bölümlendirilmiştir.

Program Counter yani program sayacı mikrodenetleyicinin açılışından itibaren her komut işletiminde genellikle birer birer artırılır. Eğer AVR’de olduğu gibi 2 word kaplayan bir komut bulunursa bu durumda sıranın bozulmaması için program sayacı istisna olarak iki artırılır. Normalde program sayacının her komut işleyişinde birer birer arttığını bilmemiz gereklidir. Bu program sayacı aslında FLASH program hafızasının adresini saklayan bir yazmaçtır. Program makine dilinde yukarıdan aşağıya sırayla yazıldığı için 0’dan başlar ve mikrodenetleyiciye göre belli bir sınıra kadar artarak devam eder. Mikrodenetleyici mimarisine göre bu program hafızasının bir sınırı bulunmaktadır fakat mikrodenetleyiciler genellikle mimarinin imkan verdiği eşiğin çok altında üretilir.

Instruction Register yani komut yazmacı FLASH program hafızasından okunan komutun yazıldığı yazmaçtır. Bu yazmaç program sayacının FLASH hafızada adreslediği veriyi işletilmek üzere geçici olarak bulundurur. Burada komut yazmacının 5 bitinin doğrudan adresleme olarak adres çoklayıcısına ve oradan da RAM belleğe gittiğini görmekteyiz. Geriye kalan 8 bitlik komut parçası ise veri yolundan işletilmek üzere gönderilmektedir.

Stack adı verilen yığın ise program sayacına bağlı olup program sayacına yazılacak adresleri yığın halinde bellekte depolar. Örneğin programımız 0x0011 adresinde ve bu halde 0x005F konumundaki kod parçasına atlamak istedi. Atlama komutunu kullandığımızda 0x0011 değeri yığına yazılır ve 0x005F adresinden itibaren komutlar işletilmeye devam eder. Sonrasında geri dönme komutu ile yığındaki 0x0011 değeri program sayacına yazılır ve işlemci buradan itibaren çalışmaya devam eder. C dilinde kullandığımız fonksiyonların işleyişi de bu şekilde gerçekleşmektedir. Sonraki ele alacağımız kısım ise RAM hafızanın olduğu yerdir.

Bu noktada mikrodenetleyicinin yazmaçlarının RAM bellekte tutulduğunu öncelikle söylemek gerekir. Harvard mimarisinde olduğu için program ile veri belleği birbirinden ayrıdır. W yazmacı, program sayacı ve komut yazmacı gibi yazmaçlar mikroişlemcinin daha iç kısmında yer alırken RAM bellek ayrı bir hafıza olarak görev yapar. Yani veri okuma ve yazma komutları ile RAM belleğe rahatça erişim sağlayabiliriz. Program belleğine çalışma esnasında bir yazma işlemi yapamayız. 68 x 8 diye belirtilen bellekte 8 bitlik 68 hücre olduğunu anlayabiliriz. Buradaki FSR yazmacı dosya seçme yazmacı olarak bellekteki hücreleri seçmek için kullanılır. STATUS adındaki durum yazmacı ise mikrodenetleyiciye ait belli durumların bayrak bitlerini içerisinde bulundurur. Datasheetin devamında bellek ve yazmaçlar hakkında daha geniş bilgiyi göreceğiz. Şimdi ise üçüncü hafıza birimimiz olan EEPROM belleği inceleyelim.

Burada dikkat etmemiz gereken nokta EEPROM’un doğrudan işlemci komutlarıyla muhatap olmadığı ve dış çevre birimi gibi kullanıldığıdır. Sadece 8 bitlik veri yoluna bağlı olan bu birimde adres yolu bulunmamaktadır. Adresi yine veri yolundan adres yazmacına göndererek adreslemekteyiz. EEPROM’un kalıcı kullanıcı belleği olarak mikrodenetleyicinin çalışmasında zorunlu bir bellek olmadığını söyleyebiliriz. EEPROM’a erişim başka belleklere erişimde olduğu gibi adres ve veri olarak olsa da bunlar adres ve veri yazmaçlarına okuma ve yazma komutlarıyla yapılmaktadır. Bu yazmaçlar ise RAM bellekte yer almaktadır.

Bu kısım ise mikrodenetleyicinin çalışması için en kritik kısımdır. Instruction Decode dediğimiz komut çözümleme makine dilini devre diline çeviren birimdir. En alt seviyenin makine dili olduğunu söylesek de makine, makine dilini anlayacak kadar zeki değildir. O yüzden makineye zorla bu komutu işletmek için mantıksal devreler kurulur ve her devre yapısı bir komut ile temsil edilir. Komut çözümleyicisi bu komutlara göre çalıştırılacak devre yapısından sorumludur.

OSC2 ve OSC1 ayaklarının Timing Generation yani saat birimine bağlı olduğunu görüyoruz. Buraya bağladığımız osilatörün sinyali öncelikle bu birime uğrar. Bu birim ise mikrodenetleyicinin çalışması için gerekli saat sinyalini sisteme iletmekle görevlidir.

MCLR, VDD ve VSS ayaklarının ise sağ taraftaki güç ve reset birimine bağlı olduğunu görüyoruz. Diyagramda adlandırılmasa da bu birimin ne olduğu özelliklerinden belli olmaktadır. Burada MCLR dış reset ayağı olup VDD ve VSS ayakları da besleme ayağıdır. Burada açılış, osilatör, watchdog zamanlayıcısı ve reset birimi yer almaktadır. En son olarak ise çevre birimlerine göz atabiliriz. Bu birimlerin az olması işimizi kolaylaştırsa da daha üst seviye bir mikrodenetleyici kullanmak istediğinizde yeni çevre birimlerini öğrenmek zorundayız. ADC, AC, USART, I2C, USB, SPI, Zamanlayıcı gibi belli başlı birimleri gördüğümüz için her denetleyici için sıfırdan öğrenmek gerekli değildir.

Burada TMR0 zamanlayıcısının veri yoluna bağlı olup aynı zamanda da RA4 ayağı ile dış dünyaya açıldığını görmekteyiz. I/O portları arasında farklı olan RB0 ayağı kesme özelliğine sahiptir. Geri kalanı ise temel giriş ve çıkış özelliğine sahiptir.

Böylelikle blok diyagramını inceleyerek mikrodenetleyici hakkında fikir sahibi olduk. Bir blok diyagramının ardında bu kadar bilginin olduğunu unutmayıp mikrodenetleyiciyi öğrenmek için önemini anlamak gereklidir. Bir sonraki başlıkta teknik veri kitapçığını okumaya devam edeceğiz.

Bizi Facebook grubumuzda takip etmeyi unutmayın. Bilgili ve öğrenmeye hevesli bir topluluk oluşturmak istiyoruz.

https://www.facebook.com/groups/1233336523490761/

UYARI!!

 

 

 

 

Gökhan Dökmetaş

"Arduino Eğitim Kitabı" ve "Arduino ve Raspberry PI ile Nesnelerin İnterneti" kitaplarının yazarı. Başkent Teknoloji ve Dedektör Merkezi'nde Ar-ge Sorumlusu. Araştırmacı-Yazar.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.