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

Yıllar sonra tekrardan PIC mikrodenetleyicileri gözden geçireyim dedim. Bu sefer farklı bir amaç için bu mikrodenetleyicileri ele alacağım. Pek çok öğrenci mikrodenetleyicileri öğrenirken sadece eğitim meteryaliyle sınırlı kalmakta ve datasheet okumaya yanaşmamaktadır. Bu eğitimlerin hepsinin ortak noktası sizi datasheet okuyacak seviyeye getirmek olmalıdır. Sıfırdan başlayan birinin datasheet okuyup anlamasını ve buradan öğrenmesini beklemek mümkün değildir. Bu yüzden ikincil kaynaklar dediğimiz kitap ve eğitim olmakta ve bu eğitimler de datasheet ve kılavuzları kaynak olarak kullanmaktadır. Bir kitap okuduğunuzda ileri okumalar için kaynakça ve biblografya kısmının olduğunu görürsünüz. Daha ileri seviye bilgi için bu kitabın yararlandığı kaynakları alıp okuyarak işe başlayabilirsiniz. Bir PIC kitabı alıp okuduktan sonra da daha ileri seviye bilgi için okumanız gereken kaynaklar datasheet ve üreticinin yayınladığı dokümanlardır. Üstelik datasheetler sadece mikrodenetleyicilere özgü olmayıp transistör, diyot ve hatta dirençler için de ürün hakkında en kapsamlı bilgiyi bulacağımız kaynaklar olarak karşımıza çıkmaktadır. Bu başlıkda PIC18F84A denetleyicisinin  donanımını öğrenerek 8-bit mikrodenetleyicilerin donanımı hakkına temel edineceğiniz gibi nasıl datasheet okunacağını da öğrenmiş olacaksınız. Bu makalenin bu orjinal yönüyle bu alandaki eğitim açığını kapatacağını umuyoruz.

Bu yazıyı okurken herkesin ekranın bir köşesinde PIC16F84A denetleyicisinin teknik veri kitapçığını açmasını tavsiye ederiz. Böylelikle doküman üzerinden yazımızı takip edebilirsiniz. Bunun için üreticinin sayfasına girip menüden parçayı seçebileceğimiz gibi Google’a “PIC16F84A” yazdığımızda ilk arama sonucunda ürün sayfasına ulaşabiliriz. Doğrudan datasheeti açmak yerine ürün sayfasında ürünle alakalı dokümanları incelememiz daha doğru olur. Datasheet en önemli kaynak olsa da tek kaynağımız değildir.

Üreticinin sayfasına geldiğimizde “Documents” adında bir sekme bizi karşılamaktadır. Mikrodenetleyici hakkındaki belgeleri buradan elde edebiliriz. İngilizce bilmemenin datasheet okumak konusunda çok fazla sıkıntı olacağını sanmıyorum. Translate gibi yazılımlarla ilgili yerleri çevirmekle bile iyi kötü bir şey elde edebilirsiniz. Teknik terimleri bildikten sonra anlamak çok zor olmayacaktır. Ana dili İngilizce olup da bu işlerle alakası olmayan birinin eline datasheet verdiğinizde de bir şey anlamayacaktır. Çok ileri seviye İngilizceniz yok diye umutsuzluğa kapılmanızı istemiyoruz.

Dokümanlar kısmında “Datasheet” başlığının yanı sıra “Errata” adında bir başlık yer almaktadır. Burada mikrodenetleyicinin hataları yer alır. Bu konuda daha fazla bilgi edinmek için Errata’yı ele aldığımız makalemize bakabilirsiniz. Bundan başka “Migration Guide” yani geçme kılavuzu adı verilen bir mikrodenetleyici üzerinde çalışıp da başka bir mikrodenetleyiciye geçmek isteyen programcılara yardımcı olacak bilgilerin yer aldığı kılavuz bulunmaktadır. Bu işimizi kolaylaştırma adına iyi bir destektir. Broşür başlığı da bizim için önemli belgeleri içermektedir. Burada ürün broşürlerini indirip ihtiyacınıza göre tablodan istediğiniz mikrodenetleyiciyi kolayca seçebilirsiniz. Mikrodenetleyicilerin özellikleri bir tabloda toplandığı için zamandan tasarruf edersiniz. Application Note ise mikrodenetleyicinin kullanımına dair datasheette yeterince ayrıntılı anlatılmayan veya yazılımla alakalı olan konuları anlatan ve işimizi kolaylaştıran uygulama notlarıdır. Aşağıdaki bağlantıdan teknik veri kitapçığını indirip incelemeye başlayalım. İncelerken aynı zamanda da mikrodenetleyici donanımına dair temel özellikleri burada basitleştirerek anlatacağız. Daha öncesinde AVR derslerimizde donanımı anlatsak da bunu daha basit bir donanım üzerinden daha anlaşılır şekilde anlatma imkanına sahibiz. Yazılımı bir şekilde çözebilsek de donanım bilgisi eksikliğinden dolayı CCS C, Arduino gibi platformlara bağlı kalmaktayız. Donanım bilgisi ise datasheetten öğrenilmektedir.

https://ww1.microchip.com/downloads/en/devicedoc/35007b.pdf

Datasheet dosyasını açtığımızda ilk sayfada karşımıza mikrodenetleyicinin özelliklerinin özeti ve ayak diyagramı çıkmaktadır. Bu mikrodenetleyici hakkında ilk öğreneceğimiz bilgilerdir. Bu ilk sayfayı anladıysak büyük bir ilerleme sağlamış oluruz ve geri kalanı kolayca anlarız. Eğer ilk adımı doğru atmazsak kitapçığın devamında kafamız karışacaktır. Çünkü bu bilgileri öğrenmekle temeli atmış oluruz.

Yukarıda gördüğünüz mikrodenetleyicinin ayak diyagramı devre kurarken ve devre çizerken sürekli bakmamız gereken bir şekildir. Bu diyagram mikrodenetleyiciyi kullanırken en sık başvuracağımız referanslardan biridir. DIP kılıfında oyuk tarafı yukarı bakacak şekilde entegrenin ayaklarının adlarını burada vermektedir. Ayrıca sol taraftaki noktalı tarafın da 1 numaralı ayak olduğunu unutmamak gerekir.

Sayfanın geri kalanında mikrodenetleyicinin özellikleri kısaca belirtilmiştir. Bunları buraya aktarıp ne olduğunu anlayalım.

RISC CPU Özellikleri

Burada datasheette nasıl yer aldığını öncelikle inceleyelim ve sonrasında bunu nasıl anlamamız gerektiğini anlatalım.

High Performance RISC CPU Features:
• Only 35 single word instructions to learn
• All instructions single-cycle except for program
branches which are two-cycle
• Operating speed: DC – 20 MHz clock input
DC – 200 ns instruction cycle
• 1024 words of program memory
• 68 bytes of Data RAM
• 64 bytes of Data EEPROM
• 14-bit wide instruction words
• 8-bit wide data bytes
• 15 Special Function Hardware registers
• Eight-level deep hardware stack
• Direct, indirect and relative addressing modes
• Four interrupt sources:
– External RB0/INT pin
– TMR0 timer overflow
– PORTB<7:4> interrupt-on-change
– Data EEPROM write complete

Öncelikle üretici malını övmeyi sevdiği için bazı özelliklerin önüne yüksek performanslı, güçlü, etkili gibi sıfatlar eklemektedir. Burada da bunu görmekteyiz fakat biz eğitim yönüyle ele aldığımız için firmanın ağzıyla bunu size aktarmayacağız. Eğitim ile ticaretin arasındaki farkı her zaman gözetmek gerekir.

16F84A denetleyicisinin CPU çekirdeği 35 adet komutla çalışmaktadır. Burada “Sadece öğrenmeniz gereken 35 komut var.” diye bahsedilse de sadece 35 komutu öğrenip kullanmanın iyi mi kötü mü olacağını tartışmamız gerekir. Datasheet okurken dikkat etmeniz gereken nokta ürünün ilk sayfasında bilginin biraz da reklam içerikli olduğudur.

Dallanma komutları hariç tüm komutların tek çevirimde yürütüldüğünü ve denetleyicinin 20MHz azami çalışma frekansı olduğunu görmekteyiz.

1024 word program hafızasından anlayacağımız ise 1024 adet 1 word yani burada 14-bit genişliğinde komut yazabileceğimizdir. Mikrodenetleyicinin komutları 14-bit olduğu için hafızada word olarak yer kaplamaktadır. Eğer C dilinde program yazıyorsak Assembly’e çevirilirken derleyicinin optimizasyonuna göre yazdığımız kod satırından daha fazla assembly komutu meydana gelecektir. O yüzden 1K hafızayı kolayca tüketmemiz mümkündür.

PIC16F84A mikrodenetleyicisinde sadece 68 bayt statik RAM bulunmaktadır. Bu aşırı derecede düşük RAM hafıza ile denetleyiciyi verilerle pek alakadar olmadığımız ve kontrol uygulamalarını yaptığımız devrelerde kullanabiliriz.

Yine denetleyicide 64 bayt EEPROM bulunmaktadır. Bu EEPROM boyutu çok az olsa da hiç yoktan iyidir. Hatta bir kontrol devresinde kullanıcı ayarlarını veya her saat sıcaklık ölçümü yapan bir cihazın günlük sıcaklık verisini saklayabiliriz.

14-bit genişliğinde komut bulunup bunlar burada word olarak adlandırılır. Normalde word tipindeki hafızanın 16-bit olduğunu unutmayalım. Burada komutlar opcode adı verilen bir kodlama ile 14-bit genişlikteki hafıza biriminde belli bit sırasına göre kodlanmaktadır.

15 özel fonksiyonlu donanım yazmacı bizim programlayabileceğimiz yazmaçlar olup donanımı bu yazmaçlar üzerinden çalıştırır ve denetleriz. Bu yazmaçların az olması ve bazılarının pek kullanılmaması öğrenmemiz gereken pek az yazmaç olduğunun habercisidir. Öğrenmemiz gereken şeyler az olunca anlatmamız gereken şeyler de az olacaktır. PIC16F84’ün eğitimde sıkça kullanılma sebeplerinden biri bu olsa gerektir.

Sekiz seviyeli donanım yığını (stack) derken mikroişlemcinin donanımsal bir yapısı olan yığın yapısının ne olduğunu bilmemiz gerekir. Mikroişlemci program hafızasında belli bir yere gitmek zorunda kaldığı zaman önceki programın hafızadaki yerini yığın (stack) adı verilen yere kaydeder. Bu yığınlar programda atlamalar sürdükçe üst üste birikir. Örneğin mikroişlemci bir kesmeye gittiğinde kesme fonksiyonundan geri dönebilmesi için kaldığı yere ait adres bilgisini bilmesi gereklidir. Bunu yığın adı verilen birimden okuduğu veriyi program sayacına yazmakla yapmaktadır.

Doğrudan, dolaylı ve bağıl adres modlarının yanında dört adet de kesme kaynağımız bulunmaktadır. Bunlar RB0 ayağı ile dış kesme, TMR0 taşması, PORTB durum değişim kesmesi ve EEPROM yazma tamamlanması kesmesidir.

Görüldüğü gibi daha ilk kısımda hafıza ve özellik bakımıyla oldukça kısıtlı bir mikrodenetleyici ile karşı karşıyayız. Burada amaç ustalığı öğrenmek olduğundan denetleyicinin iyi veya kötü olması önemli değildir. Reklam yapar gibi yapılan eğitimlerin size asla ustalığı öğretmeyeceğini söylememiz gerekir.

Bu terimleri size kısaca açıkladık ve terimleri bildikten sonra anlamanın çok da zor olmadığını fark etmiş olacaksınız. Sadece 16F84A değil diğer modeller için de datasheet okurken size faydası olacaktır.

Bir sonraki başlıkta teknik veri sayfası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...

2 Responses

  1. Bülent dedi ki:

    Keşke Pic yerine STM den devam etseydiniz.:(

Bir cevap yazın

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