Bir Mikrodenetleyiciye Nasıl Kod Yüklenir?
ATmega8 RESET Butonu Bağlanmış Hali(Aynı şema ATmega168 ve ATmega328 için de geçerlidir)
Bu dersimizde Atmel serisi mikrodenetleyicilere bilgisayarda yazılan kod nasıl yüklenir onu inceleyeceğiz. Bunun için buradaki tüm parçaları edinmiş olmanız gerekmektedir. 60$ dan 300$ a kadar farklı AVO metre çeşitleri vardır ben yaklaşık 60$ civarında olanlarından öneriyorum.
Bir önceki yazıda verdiğim 5v devresini kurup, çalıştırdığınızı ve bu breadboarda bir Atmega168 yerleştirip, Vcc ve GND bağlantılarını yaptığınızı varsayıyorum.
Atmega8(ATmega168 veya Atmega328 ile benzer şekilde çalışırlar) Breadboard ÜzerindeAtmega8 mikrodenetleyiciyi resimde görüldüğü gibi breadboarda yerleştirmek için bacaklarını hafifçe bükmeniz gerekmektedir. Bu işlemi, mikrodenetleyicinin tek tarafını masa gibi sert bir cisim üzerine hafifçe bastırarak gerçekleştirebilirsiniz. Ve diğer tarafı için de aynı şekilde. Böylece pinleriniz breadboarda girecek şekilde düzgünleşmiş olur.
Not : Voltaj regülatöründen oluşturduğunuz 5v kaynağı breadboardun kırmızı ve mavi sütunlarına bağlayınız. Böylece pratikte 5v ve GND ye her yerden erişebilirsiniz. Karışıklık olmaması için kırmızı sütuna +5v, mavi sütuna ise GND yi bağlamalısınız.
Aşağıdaki resimde de görüldüğü gibi ATMEL firması çiplerine 1.pini belirten bir ok işareti koymaktadır. Bazı üreticilerin çiplerinde böyle bir ok işareti bulunmamaktadır. Fakat bunu da tespit etmenin kolay bir yolu var. Aşağıdaki resimde mavi okun gösterdiği çentik entegrenin baş kısmını göstermektedir. Bu çentiğin soldaki ilk pini 1.pin sağdaki ilk pini ise son pin olan 28.pindir. Aşağıdaki resimde pin numaraları ve oklar görülmektedir.
28 Pinlik DIP Kılıf Entegrelerin Pin DizilimiResimlerde Atmega8 görülüyor ama sizin breadboardunuzda Atmega168 olmalı. Atmega168'in 7.pini Vcc, 20. pini Avcc(breadboard üzerinde 5v a bağlayın), 22.pini ise GND dir. Eğer anahtarı açıp devrenizi çalıştırırsanız. Atmega168 çalışacaktır fakat hiçbir iş yapmayacaktır.
Atmega238'in RESET pini(1.pin), mikrodenetleyicinin çalışması için sürekli olarak Vcc konumunda tutulmalıdır. Bu işlemi doğrudan bir 10K lık pull-up direnci ile yapabilirsiniz. Eğer çipi istediğiniz zaman resetlemek isterseniz bunun için bir butona ihtiyacınız var. Mikrodenetleyicileri resetlemek tıpkı bilgisayarları resetlemek gibidir. Mikrodenetleyiciler de resetlendiği zaman içerisindeki yazılımı tekrar baştan başlatırlar. Ve çoğu zaman mikrodenetleyicileri resetlemek gerekir. Bu sebeple breadboard üzerindeki devrenize aşağıdaki gibi bir buton bağlantısı ekleyebilirsiniz.
Bunun için önce buton bağlantısının nasıl yapıldığına değinelim. Butonlar farklı çeşitlerde olabilir. 2 pinli, 4 pinli hatta 5 pinli... Aslında temel olarak hepsinin yaptığı iş aynıdır. Butonlar sadece bulunduğu konumdaki yolları kısa devre veya açık devre yaparlar. Yani ya basılı tutulduğu an bağlantıya izin verirler, basılmadığı anda ise aradaki bağlantı olmadığı için devre tamamlanamaz. Aşağıda 4 pinli bir butonun şematik çizimi görülmektedir.
4 pinli gibi görünen bu butonun aslında yukarıda da görüldüğü gibi 2 adet pini vardır. Yani 1 ve 2. pin kendi arasında kısa devre, 3 ve 4. pin de kedi arasında kısa devre edildiği için pratikte 2 pinli bir buton kullanmış olmaktayız.
Yukarıdaki resimde görülen butonlarda 5 adet ayak bulunmaktadır. Fakat siz ortada görülen 5. ayağı dikkate almayınız. Çünkü o ayağın herhangi bir ayakla bağlantısı yoktur. Eğer hangi ayakların kendi aralarında kısa devre olduğunu bulmak isterseniz (ki bu bağlantıların doğruluğu için muhakkak yapılması gereken bir işlemdir) AVO metreniz ile kısa devre kontrolü yaparak bu işlemi doğrulayabilirsiniz. AVO metreniz bip sesi çıkardığı anda ölçtüğünüz iki ayak kısa devredir.
Aşağıda, bu butonun Atmega8'e bağlantı şeması veriliştir.
Yukarıdaki şemada da görüldüğü gibi RESET pininin sürekli olarak 5v konumunda tutulması, mikrodenetleyicinin çalışmasını sağlıyor. Eğer S2 butonuna basarsanız bu pin GND konumunda olacağından mikrodenetleyici RESET durumunda olacaktır ve çalışmayacaktır. Butonu bıraktığınız anda içerisinde yüklü olan yazılım, en başından başlayacaktır.
Aşağıda Atmega168'in pin diyagramı yer almaktadır. Atmega8 ile aradaki farklılıkları görebilirsiniz. Pin dizilimi aynı ama bazı pinlerde farklı özellikler bulunuyor.
Atmega168 Pin DizilimiMikrodenetleyici üreten her firma ürettiği mikrodenetleyicileri programlamak için farklı sistemler geliştirmişlerdir. ATMEL, ISP(In System Programming) adında bir protokolü, mikrodenetleyicileri için geliştirmiştir. Bu işlem 6 pin üzerinden harici bir donanım kullanılarak yapılmaktadır. Bu donanımın(programlayıcı) kullanımı çok kolay ve yapılışı da çok ucuzdur.
Kırmızı şerit 1.pini GöstermektedirAtmega168'i programlamak için aşağıdaki adımlar izlenmelidir.
- AVR-GCC derleyicisi ile C kodları yazılmalı ve mikrodenetleyiciye yüklenecek HEX dosyası oluşturulmalı.
- AVR-GCC derleyicisi Windows altında çalışan WinAVR programına entegre edilebilir.
- Oluşan HEX kodu ISP pinleri aracılığıyla Atmega168'e yüklenmeli.
- Hem seri hem de paralel port programlayıcılar AVR serisi işlemcilere program yüklemek için kullanılabilir
- Mikrodenetleyici, içerisine yüklenen HEX kodunu bir kez resetlendikten sonra çalıştırmaya başlayacaktır.
C Derleyicisi Nedir ?
C derleyicisi, C dilinde yazılan programları mikrodenetleyicinin anlayabileceği kod olan HEX formatına dönüştüren bir araçtır. C dilini BASIC ten daha esnek ve assemblyden daha anlaşılır olduğu için tercih ediyoruz.
HEX Dosyası Nedir ?
HEX dosyası, tamamen hexadesimal sayıları içeren bir dosyadır. Bu dosya, mikrodenetleyicinin anlayacağı hexadesimal sayıları temsil etmektedir. Bu dosya programlayıcı üzerinden Atmega168 içerisine yüklenecek olan dosyadır.
Bilgisayarda C kodlarınızı yazabilmek için WinAVR programını yüklemeniz gerekmektedir. Ben bu yazıda size basit bir LED yak-söndür uygulaması vereceğim. Eğer bu kodu mikrodenetleyicinize yükleyip çalıştığını görürseniz her şey eksiksiz ve doğru çalışıyor demektir.
blink_1MHZ.hex dosyasını Atmega168'e yüklemek için aşağıda verilen bağlantıyı breadboardunuza kurmanız gerekmektedir.
Aşağıda, yukarıda verilen şemanın breadboard üzerine uyalanmış halini görmektesiniz. Breadboard üzerindeki gibi kısa kablolar kesmek uzun süreli bir çözüm değildir fakat çabuk ve pratik olması açısından bu yöntem tercih edildi. Siz kendinize pin headerlı daha kullanışlı bir programlama adaptörü tasarlayabilirsiniz.
AVR-PG2 Paralel Port Programlayıcı. Vcc ve GND arasındaki dekuplaj kapasitörleri 5v ve GND arasındaki oluşan paraziti bastırıp mikrodenetleyiciye gitmesini önlemektedir.Şimdi tekrar uygulamamıza dönecek olursak; Bir LED yak-söndür uygulaması yapacağız ve bunun için herhangi bir GPIO pinini kullanmamız gerekiyor.
LED diyotun hemen arkasında yer alan 330ohm direnç bir önceki yazıda da bahsedildiği gibi bir akım sınırlama direncidir. Bu direnç, LED'in zarar görmemesini sağlamaktadır. Burada blink_1MHZ.hex programı tüm GPIO pinlerini yakıp söndürdüğünden direnç ve LED ikilisini herhangi bir portun herhangi bir pinine bağlayabilirsiniz.
Programı derlemek için WinAVR yazılımının bilgisayarınızda yüklü olması gerekmektedir. Bu yazılım içerisinden "Programmer's Notepad" editörü kullanılarak kod yazılabilir.
Kod editörü : Kullandığımız dilin kodlarını yazabildiğimiz, dile özgü renklendirme yapabilen ve kodların daha okunaklı görünmesini sağlayan bir araçtır. Mesela bu editör içerisinde "while(1)" gibi bir kod yazdığımızda editör bunun hemen bir C kodu olduğunu anlayıp ona göre renklendirme yapacaktır.
AVR-GCC derleyicisi, çok güçlü fakat başlangıç için biraz karışık ve kullanımı zor bir derleyicidir.
Blink_1MHZ.zip dosyası içersinde Makefile ve blink_1MHZ.c dosyaları bulunmaktadır. C kodunu Programmer's Notepad ile açıp derledikten sonra oluşan HEX dosyası Atmega168'e yüklemeniz gereken dosyadır.
C kodunu derlemek için Programmer's Notepad'i açıp blink_1MHZ.c dosyasını editör içerisine dahil ettikten sonra Tools -> Make All a tıklayıp .c uzantılı dosyayı derlemelisiniz. Bu işlem komut isteminde şu kodu yazmakla aynıdır.
C:\Code\Blink>make all
Windows Komut İstemini kullanmaktansa WinAVR Programmer's Notepad'i kullanmak daha kolaydır. Çalışmalarınızı Programmer's Notepad üzerinden yürütmeniz size büyük ölçüde hız kazandıracaktır.
Eğer .c uzantılı dosyayı derledi ve .hex uzantılı doysayı oluşturduysanız sıra bu dosyayı AVR'nin içerisine yüklemeye geldi demektir. Bu işlem, breadboard üzerindeki devrenizin çalışması için son adımdır. Bunun için AVR-PG1 veya PG2 denilen ucuz bir programlayıcı kullanacağız. Bu programlayıcılar çalışabilmek için gereken gücü devre üzerinden alırlar. Bunun için breadboard üzerindeki devrenizin anahtarını açıp sarı LEDin yandığından emin olmalısınız.
Eğer AVR-PG1(Seri Port Programlayıcı) kullanıyorsanız Makefile dosyasını aşağıdaki gibi değiştirmeniz gerekmektedir.
#AVRDUDE_PROGRAMMER = stk200
AVRDUDE_PROGRAMMER = ponyser
#com1 = serial port. Use lpt1 to connect to parallel port.
#AVRDUDE_PORT = lpt1
AVRDUDE_PORT = COM1
Eğer AVR-PG2(Paralel Port Programlayıcı) kullanıyorsanız Makefile dosyasını aşağıdaki gibi değiştirmeniz gerekmektedir.
#AVRDUDE_PROGRAMMER = stk200
AVRDUDE_PROGRAMMER = ponyser
#com1 = serial port. Use lpt1 to connect to parallel port.
AVRDUDE_PORT = lpt1
#AVRDUDE_PORT = COM1
Not : Burada '#' işareti o satırın işlenmeyeceği anlamına gelmektedir.
Eğer aşağıdaki gibi bir hata alırsanız
can't open device "giveio"
Bu sayfayı okuyun. Giveio.sys dosyasını C:\WinAVR\bin dizininden C:\Windows dizinine kopyalamanız ve sonra da install_giveio.bat dosyasını Komut İsteminden çalıştırmanız gerekmektedir.
Karşınıza Çıkabilecek Problemler
- ISP Programlama konnektörünün tüm pinlerinin doğru olduğundan emin olun.
- Breadboard üzerinde regüle ettiğiniz 5v un sağlamlığından ve her yere ulaştığından emin olun.
- Atmega168'in Vcc ve GND pinlerini bağladığınızdan emin olun.
- Doğru COM veya LPT potunu kullandığınızdan emin olun.
Bu ders için gereken malzemelerin tamamını buradan edinebilirsiniz.
Not:Buradaki karışıklık için özür diliyorum. Çünkü programlayacağımız mikrodenetleyici Atmega168. Fakat resimlerde Atmega8 yer alıyor.
0 yorum:
Yorum Gönder