Atmel AVR Mimarisi -2- AVR Mikrodenetleyicilerinin İç Yapısı

AVR derslerimizde bu mikrodenetleyicilerin iç yapısından sürekli bahsetmiş olsak da genel olarak gözden geçirdiğimiz bir yer olmadı. O yüzden bu yazıda AVR mimarisini öğrenmek için öncelikle mikrodenetleyicinin iç yapısını anlatmakla işe başlayacağız. Tabi ki mikrodenetleyiciyi açıp içini incelememiz mümkün değildir. O yüzden üreticinin sağlamış olduğu kitapçıklarda yazan bilgilerden bunu öğrenmek zorundayız.  Profesör de olsa mühendis de olsa aynı kaynaktan öğrenmek zorundadır.

Yazılarımda öğrendiğim kaynakları sık sık vurgulamamın nedeni bu alanda yazanların genelde nereden öğrendiklerini adeta bir sır gibi saklamalarından dolayıdır. Okuduğunuz çoğu makale ve kitapta ne kaynakça ne de bir referans vardır. Yazılan yazıların da yazarın bildiği değil bilmemizi istediğinden ibaret olduğunu söylemeye gerek bile yoktur.

Şimdi mikrodenetleyicinin teknik veri kitapçığından edindiğimiz blok şemasını buraya koyalım ve bu şema üzerinden mikrodenetleyicinin içinde neler olduğuna bir bakalım.

Resmi küçültmeye ihtiyaç duymuyorum çünkü bu resme uzun uzun bakmanız gerekecektir. Görüldüğü gibi bir organizmanın beyni gibi AVR mikroişlemcisini sistemin en tepesinde ve merkezinde görüyoruz. “Databus” adı verilen veri yolları ile bu mikroişlemci diğer çevre birimlerine bağlanmış oluyor. Burada bir ortak veri yolunun yanı sıra giriş ve çıkış için ayrı bir veri yolu olduğunu da görmekteyiz. İşlemci Harvard mimarisinde olduğu için program hafızası ile RAM hafıza birbirinden ayrıdır. Burada program hafızası FLASH olarak belirtilmekte ve RAM hafıza ise SRAM olarak belirtilmektedir. SRAM hafızaya ancak mikroişlemci erişim sağlayabilir. Program hafızasına programlama yoluyla bizim doğrudan bir erişimimiz mümkündür. EEPROM ise mikroişlemci sistemi için zorunlu olmayan bir hafıza birimi olup yine programlama yoluyla veya mikroişlemci vasıtasıyla erişilebilir. Sistemin çalışması için gerekli iki hafıza birimi Program hafızası ve dinamik hafıza olan SRAM’dir.

Mikroişlemcinin iç yapısına sonraki yazımızda geçeceğimiz için şimdilik mikrodenetleyiciye bağlı birimleri liste şeklinde anlatarak konuya devam edelim.

debugWire

Derslerimizde bahsetmediğimiz hata ayıklama (debug) özelliğinden burada kısaca bahsedelim. Gömülü sistemlerde yazdığımız programda hata çıkması insanı oldukça üzebilir. Çünkü hata affetmeyen bir dilde ve sistemde programlama yapmamızın yanında bu hatayı da saptamamız o kadar kolay değildir. Bunu çözmek için hata ayıklama özelliği denilen bir özellik geliştirme stüdyosuna eklenmiştir. Böylelikle mikrodenetleyiciye yazılım ile bağlanıp kodlar tek tek çalıştırılarak ve sistem denetlenerek yazılan programda hatanın yeri tespit edilmeye çalışılır. Bunun için özel hata ayıklama aygıtları mevcut olup derslerde bahsettiğimiz klon programlayıcılar kadar ucuz değildir. Örneğin en son sürüm olan Atmel ICE programlayıcısını 100 dolar + vergi + kargo ile alabiliyoruz. Bu fiyat amerikalı biri için çerez parası olsa da bizim ülkemizde neredeyse bir asgari ücrete denk geliyor.  Mikrodenetleyicileri öğrenenler genelde öğrenci kesim olduğu için bundan bu yüzden bahsetme gereği duymadık.

Clock Generation ( Saat Sinyali Üretimi ) 

AVR mikroişlemci çalışmak için düzenli bir saat sinyaline ihtiyaç duyduğu gibi mikrodenetleyici içerisindeki çevre birimlerinden birçoğu da bir saat sinyaline ihtiyaç duyar. Saat sinyali dışarıdan bağlanan kristal osilatör veya rezonatör ile sağlanabildiği için içinde mevcut olan dahili osilatörden de sağlanabilir. Ayrıca 128kHz frekansta çalışan bir osilatör bekçi zamanlayıcısını çalıştırmakla görevlidir. Bu saat sinyali birimi güç ve saat sinyali denetim birimine bağlıdır.

Power Supervision POR/BOD & RESET

Bu birimin bağlı olduğu yerlere baktığımızda güç denetim birimi olduğunu açıkça anlarız. Mikrodenetleyiciye gelen 5 Volt (VCC) gerilimi ile şase bağlantısı bu birime bağlanır. Ayrıca yeniden başlatma ayağı da bağlanmaktadır çünkü bu birim aynı zamanda yeniden başlatma denetimini de yapmaktadır. Bekçi zamanlayıcısının bu birime bağlı olduğuna dikkat edelim. Bu birim mikrodenetleyici üzerinde yeniden başlatma ve güç kontrolünü sağlamaktadır.

NVM (Non-volatile Memory) Programming 

Non-volatile kelimesinden bizim anlamamız gereken FLASH, EEPROM gibi kalıcı belleklerdir. Kalıcı bellek programlama birimi bizim programlayıcı vasıtasıyla bilgisayardan yüklediğimiz programın program hafızasına ve EEPROM birimine yüklenmesini sağlar.

Watchdog Timer

Bu zamanlayıcı yeniden başlatma (RESET) birimine bağlı olup mikrodenetleyici donduğu zaman sistemi yeniden başlatır. Bekçi zamanlayıcısı ismini verdiğimiz bu zamanlayıcı bilgisayarlardaki mavi ekran ve ardından yeniden başlatma gibi çalışmaktadır.

ADC

Analog elektrik sinyalini dijital değerlere çevirip bu değerleri kaydetme ya da üzerinde işlem yapmayı sağlatan birimdir. Bu birim mikrodenetleyici ayaklarına çoklayıcı vasıtasıyla bağlanmaktadır. Aynı zamanda bir referans ayağı da mikrodenetleyicinin bir ayağına çıkmaktadır. Bu birimlerin hepsinin veri yolu ile işlemciye bağlı olduğuna dikkat ediniz. Ayrıca bu birim Internal Reference (İç Referans) adı verilen bir referans birimine de bağlıdır. Böylelikle 1.1V olan iç referans değerini seçebiliriz.

EXTINT

Dış kesme birimi olan EXINT ( External Interrupt ) birimi bir taraftan AVR mikroişlemcisine bir taraftan da mikrodenetleyicinin ayaklarına bağlıdır. Mikrodenetleyiciye dışarıdan gelen kesme uyaranlarını alıp bunları işleme görevi bu birime verilmiştir.

TC1 ve TC2 

Bu zamanlayıcı ve sayıcı üniteleri mikroişlemciden bağımsız olarak çalışsa da çoğu birim gibi mikroişlemcinin saat sinyalini kullanır. Giriş ve çıkış olarak mikrodenetleyicinin ayağını kullanan bu birim kesme ve bayrak bitleri vasıtasıyla mikrodenetleyici ile iletişime geçer. Zamanlayıcı ve sayıcılar zamanlama gerektiren uygulamalarda, sayma işlemlerinde, PWM üretiminde, frekans okumada ve frekans üretmede kullanılır.

TWI 

Philips firmasının geliştirdiği iki hat üzerinden seri iletişim protokolü olan I2C protokülünü çalıştıran birimdir. Mikrodenetleyicinin PC4 ve PC5 ayaklarına bağlıdır ve yazmaç ve kesme vasıtasıyla mikroişlemci ile iletişime geçer.

USART

Evrensel senkron ve asenkron seri iletişim protokolü birimidir. Bilgisayarlardaki RS-232 portuna benzerlik gösterse de çalışma gerilimleri farklıdır.

Buraya kadar veri yolu üzerindeki birimleri anlatmayı bitirdik. Şimdi ayrı bir veri yolu olan IN/OUT Databus üzerindeki birimleri anlatmaya başlayalım. Bu veri yolunun ayrı olma sebebi hakkında bilgi bulamasam da benim tahminime göre hızlı uygulamalar için böyle bir veri yolu açılmış olsa gerektir. Çünkü bağlı olduğu birimlere baktığımızda SPI ve I/O Portlarını görüyoruz. AVR mikrodenetleyicilerde bu birimler ise oldukça hızlı çalışmaktadır.

I/O PORTS 

Temel giriş ve çıkışı sağladığımız portların olduğu birimdir. Bu giriş ve çıkış portları mikrodenetleyicinin neredeyse tüm ayaklarını kullanmaktadır. Diğer birimler ise bu ayakları giriş ve çıkış portlarıyla ortak kullanmaktadır. Giriş ve çıkış portları basit olarak 5V ya da 0V gerilim veren ünitelerdir. Böylelikle led yakıp söndürebiliriz, sinyal üretebiliriz ya da seri ya da paralel veri yollayabiliriz.

GPIOR 

Genel maksatlı giriş ve çıkış yazmaçlarıdır. Bu birime daha sonra konusu geldiği zaman değineceğiz.

TC0

8 bitlik zamanlayıcı ve sayıcıdır. Bu birim ile beraber ATmaga328P mikrodenetleyicisinde toplam 3 adet zamanlayıcı ve sayıcı bulunmaktadır.

SPI

SPI iletişim protokolünü çalıştıran birimdir.

AC

Analog karşılaştırma birimi olup dışarıdan gelen iki sinyali karşılaştırarak çıkış verir.

 

AVR mikrodenetleyicisinin iç yapısını anlatmış olsak da AVR mikroişlemcisinin iç yapısını henüz anlatmadık. Fark ettiyseniz C ile AVR Programlama derslerimizde anlatmadığımız pek bir konu yoktur. Bu dersleri diğer derslerden farklı kılan özelliklerden biri de budur. Çoğu ders dizisi, eğitim, kurs, kitap bilgilerin tamamını size vermez.

Bir sonraki yazıda artık AVR mikroişlemcisini inceleyebiliriz. Çünkü mikrodenetleyiciye dair anlatılacak bir şey kalmadı.

 

Kaynaklar:
Kapak Resmi, https://i1.wp.com/makezine.com/wp-content/uploads/2016/09/HeroImage.jpg?resize=1200%2C670&strip=all&ssl=1

ATmega328P – Microchip Technology , http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-42735-8-bit-AVR-Microcontroller-ATmega328-328P_Datasheet.pdf, Erişim Tarihi: 25.08.2018

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.