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

İkinci yazımızda kaldığımız yerden devam ediyoruz. Mikrodenetleyicinin ilk sayfasının çok önemli olduğunu söylemiştik. Bu sayfadaki bilgileri iyi anladığımız sürece mikrodenetleyicinin geri kalanını anlamamız zor olmaz. Buradaki terimlere aşina olmamız gerektiğini ve eğitimin de bu terimleri öğretmeye dayalı olması gerektiğini söyleyelim ve incelemeye kaldığımız yerden devam edelim.

Peripheral Features:
• 13 I/O pins with individual direction control
• High current sink/source for direct LED drive
– 25 mA sink max. per pin
– 25 mA source max. per pin
• TMR0: 8-bit timer/counter with 8-bit
programmable prescaler

Burada mikrodenetleyicinin çevre birimleri ile alakalı özellikler sıralanmaktdır. Mikrodenetleyicinin çekirdeği ve hafıza birimleri kadar çevre birimlerinin de önemli olduğunu bilmemiz gerekir. Eğer çevre birimi az ve özellikleri kısıtlı ise mikrodenetleyici ile yapabileceğimiz şeylerin sayısı az olacaktır. Eğer yeterli hafıza ve işlem gücüne sahipsek yazılımsal olarak da bir çözüm getirebilsek de devrenin karmaşıklığı ve maliyeti artacaktır. O yüzden seçeceğimiz mikrodenetleyicinin ucuz olması yanında çevre birimlerinin fazla olması da önemlidir. Ucuz diye seçtiğimiz bir parça bize ek masraf çıkarabilir. Aradaki dengeyi sağlamamız gereklidir.

Burada 13 adet giriş ve çıkış ayağının bağımsız olarak giriş veya çıkış olarak ayarlanabildiğini okumaktayız. Bu giriş ve çıkış ayakları 25mA sink (çekme) ve source (besleme) kapasitesine sahiptir. 25mA olmasından dolayı bir ledi kolaylıkla yakabilir bir buzzeri de kolaylıkla çalıştırabiliriz. Motor sürmeyi beklememek lazımdır. Ayrıca TMR0 adında 8-bit programlanabilir ön derecelendiricili zamanlayıcı ve sayıcı ünitesi bulunmaktadır. Zamanlayıcı ünitesi en temel ve gerekli çevre birimlerinden biri olduğu için zamanlayıcı yardımıyla pek çok uygulama yapabiliriz.

Çevre birimlerinin bu kadarla sınırlı olduğunu görüyoruz. Daha üst serilerde fazlaca çevre birimi yer alsa da bunları tek tek anlatmakla maksadımızın dışına çıkacağımız için diğer çevre birimlerini öğrenmek için önceki yazılarımıza göz atabilirsiniz. 8-bit mikrodenetleyicilerin özellikleri birbirine benzediğinden teorik bilgide marka veya serinin çok önemi olmayacaktır.

Special Microcontroller Features:
• 10,000 erase/write cycles Enhanced FLASH
Program memory typical
• 10,000,000 typical erase/write cycles EEPROM
Data memory typical
• EEPROM Data Retention > 40 years
• In-Circuit Serial Programming™ (ICSP™) – via
two pins
• Power-on Reset (POR), Power-up Timer (PWRT),
Oscillator Start-up Timer (OST)
• Watchdog Timer (WDT) with its own On-Chip RC
Oscillator for reliable operation
• Code protection
• Power saving SLEEP mode
• Selectable oscillator options

Burada işlemci ve çevre birimi özelliklerinin dışında mikrodenetleyiciye ait özellikleri görmekteyiz. Program hafızasının 10 bin kere yazılıp silinebildiği ve EEPROM’un da 10 milyon kere yazılıp silinebildiği belirtilmiştir. Bu hafızaların belli bir ömrü bulunmaktadır ve burada EEPROM’un 40 yıldan fazla olduğu belirtilmiştir. Programlama özelliğinin yanında açılış reseti ve zamanlayıcısı ve osilatör başlatma zamanlayıcısı bulunmaktadır. Watchdog (bekçi) zamanlayıcısının bulunması iyi bir özellik olarak zikredilebilir. Ayrıca kod koruma ve uyku modları bulunmaktadır. Bu özellikler burada bilmemiz gereken ve bazıları da ileride çok üzerinde durmayacağımız özelliklerdir.

Birinci sayfada en son olarak güç tüketimi ve çalışma geriliminden bahsedilmektedir.

Wide operating voltage range:
– Commercial: 2.0V to 5.5V
– Industrial: 2.0V to 5.5V
• Low power consumption:
– < 2 mA typical @ 5V, 4 MHz
– 15 mA typical @ 2V, 32 kHz
– < 0.5 mA typical standby current @ 2V

Bunlar bizim her zaman dikkate almamız ve kullanacağımız devreyi bu özelliklere göre tasarlamamız gereken özelliklerdir. Ticari ve sanayi tipindeki entegreler için 2.0V ile 5.5V arası çalışma gerilimi olduğunu görmekteyiz. Düşük gerilimde mikrodenetleyici çalışmaz fakat gerilim 5.5V’dan yukarı çıktığında artık o denetleyici kullanılmaz hale gelecektir. Güç tüketimi ise batarya kullandığımız devrelere uygunluk açısından önemlidir. Aynı zamanda çıkış olarak verilen 25mA gerilimin ayrıca hesaplanması gerektiğini unutmayalım.

Datasheet okurken birinci sayfanın öneminden bahsetmiştik. Bir başka önemli unsur da mikrodenetleyicinin blok şemasıdır. Bu şema sayesinde görsel olarak mikrodenetleyicinin donanımı hakkında ön bilgimiz olur. Buradaki birimleri ve terimleri teorik olarak bilirsek sadece şemaya bakmakla bile pek çok şeyi anlayabiliriz. Eğer şemadan anlamadığımız bir nokta varsa ilerleyen kısımlarda ilgili donanımın başlığında ayrıntılı olarak okuyabiliriz. Eğer yine anlamıyorsak bununla ilgili temel bilgiyi başka kaynaklardan edinmek gerekir. İlk defa öğrenmek en çok kafa yorduğumuz süreçtir. Sonrasında hangi mikrodenetleyici karşımıza çıkarsa çıksın çok yeni bir teknoloji olmadığı sürece zor olmayacaktır.

Gömülü sistemlerin zor bir alan olduğunu söylememiz gerekir. Çünkü bir programlama dili bilmekle işin temelini öğrenmiş sayılmazsınız. Önemli olan donanımın temelini öğrenmektir ve programlayacağınız her donanıma göre de bu farklılaşmaktadır. Yani her farklı donanım için donanımı baştan öğrenmeniz gerekebilir. Donanımı öğrenebilmek içinse yine donanımın temellerini bilmeniz gereklidir. Bilgisayarda ezbere ve yüzeysel bilgi ile bir yere kadar program yazabilseniz de burada ezberciliğe yer yoktur. Görüldüğü gibi bu diyagramı anlamak için bazı temel bilgilerimizin olması gerekli ve her kullanacağımız farklı donanımda bu diyagram farklılaşacaktır. Burada diyagramda yer alan parçalar belgenin devamında açıklansa da bazı temel bilgileri bilmeden anlamamız zor olabilir. Daha öncesinden mikrodenetleyici mimarisi ile ilgili yazılarımız olsa da burada sadece bu diyagram üzerinden bir daha anlatalım.

Öncelikle mikrodenetleyicinin merkezi biriminin CPU yani merkezi işlem biriminin olduğunu bilmemiz gerekir. Bu merkezi işlem birimi hakkında öğrenmemiz gereken bilgi Assembly dilinde program yazarken azami seviyede olmalıdır. Bizim amacımız programlamayı değil mantığını öğretmek olduğu için Assembly seviyesinde program yazanların ihtiyacı olacağı bilgileri dahi anlatacağız.

Merkezi işlem birimi (CPU) diyagramda CPU olarak belirtilmemiştir. Bizim burada merkezi işlem biriminin çekirdeğinin Aritmetik Mantık Ünitesi (ALU) olduğunu bilmemiz gerekir. ALU sayesinde bu mikroişlemci komutları işletilmektedir. Diğer birimler ise ALU’yu çalıştırmak ve yardımcı olma görevlerini üstlenmektedir. O halde ALU’yu merkeze alarak daha dar bir pencereden bakalım.

Burada MUX olarak ifade edilen birim çoklayıcı (multiplexer) demektir. Bu birimin 8 bitlik veri yoluna bağlandığını ve ALU’nın bir girişine doğru veri gönderdiğini görebiliriz. ALU’nun diğer girişi ise W yazmacıdır. Reg olarak ifade edilmesi “Register” teriminin kısaltması olmasından dolayıdır. W yazmacının burada akümülatör görevini yaptığını görebiliriz. Akümülatör bilgisayar bilimlerinde üzerinde geçici verinin saklandığı işlem sonucunun yer aldığı yazmaca verilen addır. Burada da ALU’nun çıkışının veri yolu ya da W yazmacına doğru olduğunu ve W yazmacının ise tekrar ALU’ya döndüğünü görmekteyiz. AVR mikrodenetleyicilerde yer alan genel maksatlı yazmaç dosyası (R0-R31) yerine burada sadece W yazmacı yer almaktadır. Kısacası bu W yazmacı üzerinde pek çok işlem yapacağız demektir. ALU’nun hangi işlemleri yaptığını ise komut kümesi yani “Instruction Set” adı verilen listeden görebiliriz. Bunu sonraya bırakıyoruz.  Bundan sonra ise hafıza birimlerine ve diğer yazmaçlara bakacağız. Konunun karışmaması için merkezi işlem birimi (CPU) dışındaki birimleri en sona bırakacağız.

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.