Bu konuda sizlere nasıl ATmega328 mikrodenetleyicisine Arduino Bootloader yüklendiğinden bahsedeceğim. Her ne kadar ileri düzey gibi görünse de bir kez alışınca aslında ne kadar kolay olduğunu göreceksiniz. Böylece Arduino Uno, Nano gibi ATmega328 mikrodenetleyicili Arduino modelleri yerine Breadboard üzerinde projelerinizi daha özgür bir şekilde yapabilir ve eğer yapmak isterseniz baskı devrelerinizi Arduino kartınız olmadan da yapabileceksiniz. Tabi konumuz baskı devre değil breadboard üzerinde ATmega328 mikrodenetleyicisini Arduino gibi kullanmak.
Başlayalım...
ATMEGA328 NEDİR?
ATMEGA328, Atmel firmasının 8-bit mikrodenetleyici ailesinin ATmega kategorisinde bulunan AVR tabanlı bir mikrodenetleyici modelidir. Arduino UNO, NANO, ve PRO MINI geliştirme kartlarında bulunmaktadır. Yani aslında bizler Arduino platformu ile farkında olmasak da bizler ATMEGA328 mikrodenetleyicisini programlamaktayız. NANO, MINI ve PRO MINI modellerinde SMD yani yüzey montaj paketlerinde kullanılırken, UNO üzerinde DIP kılıf paketlerinden olanı kullanılmıştır. Aşağıda ATMEGA328 DIP kılıfındaki resmi görülmektedir.
BOOTLOADER NEDİR?
Kelimenin tam manası önyükleyici demektir. Bu şu anlama gelir; normal de mikrodeneteleyicilerin özel programlama cihazları olur örneğin PIC için PicKit, AVR(ATmega, ATtiny) için USBasp AVRdude gibi. Normal programlama metotları içerisinde ise bu mikrodenetleyiciler belirli programlama bacakları ile programlama cihazları ile programlanırlar. Ancak Bootloader bize bu donanımlara olan ihtiyacımızı bir nevi ortadan kaldırmaktadırlar.
Arduino'lar ile bilgisayar arasında USB bağlı olmasına rağmen işin arka planında USB protokolü devrede değildir. Bunun yerine USB üzerinden sanal COM portu ile eski RS-232 seri iletişim standardı üzerine iletişim sağlanmakta. Tabi tüm bunlar USB alt yapısı altında gerçekleşmekte ve burada sizlere bunlardan bahsetmeyeceğim.
Bootloader yüklenen bir Atmega328 artık standart programlama yöntemlerinden ziyade RX-TX bacakları ile yani USART(RS-232) üzerinden programlanabilmektedir. Tıpkı Aslında Arduino'larınızın programlandığı gibi. Yani Eğer elinizde UNO veya NANO varsa bunların üzerinde Atmega328 mikrodenetleyicisi bulunur ve bunun içerisinde bu bootloader yüklü vaziyette gelmektedir.
Peki biz bunu kendimiz nasıl yapacağız yani kendi breadboard üzerinde arduinomuzu? Şimdi bunu görelim.
ATMEGA328'E BOOTLOADER YÜKLENMESİ
Öncelikle bunu yapabilmeniz için elinizde olması gereken malzemeler var;
- Arduino UNO, NANO veya MEGA (klon ya da orjinal olması fark etmiyor)
- USB-Serial Çevirici
- Breadboard
- ATMEGA328, 28 bacaklı DIP kılıf
- 16 MHz Kristal
- 2 Adet 22pF kondansatör
- 1 Adet 10k direnç
- Jumper
- Biraz sabır...
Öncelikle sizlerin ARDUINO UNO ve NANO pinleri ile ATMEGA328 bacakaları arasındaki ilişkileri gösteren aşağıdaki görseli incelemenizi isterim.
BİRİNCİ AŞAMA: ARDUINO'YU HAZIRLAMA
Yapmamız gereken şey çok basit. Elimizdeki Arduino'ya "ArduinoISP" adlı sketch'i yüklememiz lazım.
Bu sketch'i "Dosya > Örnekler > 11.Arduino ISP > ArduinoISP" yolunu izleyerek açıyoruz ve Arduino'muza Upload ediyoruz, yani yüklüyoruz.
Daha sonra "Araçlar > Programlayıcı > Arduino as ISP" yolunu izleyerek "Arduino as ISP" seçeneğine tıklıyoruz ve Arduino'muzu programlayıcı olarak kullanacağımızı belirtiyoruz. Ardından Arduino'yu sonraki aşamadaki bağlantıları yapmak için bilgisayar ile arasındaki bağlantıyı kesiyoruz, USB kabloyu çıkarsak yeterli.
İKİNCİ AŞAMA: BREADBOARD'UN HAZIRLANMASI ve ARDUINO ILE BAĞLANTISI
Arduino'ya bir önceki yani birinci aşamada bahsedilenleri yaptıysanız sıra ATMEGA328'in Arduinonuz ile olan bağlantılarını yapmaya.Arduino'nun 13,12,11 ve 10 numaralı dijital pinleri aynı zamanda SPI seri haberleşme pinleridir. ATmega serisi mikrodenetleyiciler SPI seri haberleşme yöntemiyle programlanırlar. Yani Bootloader'ı ATmega328'e yüklemenin tek yolu budur. Bunu yapabilmek için Arduino'ya ArduinoISP sketch'ini yükledik.
ISP "In Serial Programming" kısaltmasıdır ve "dahili seri programlama" olarak geçer. Yani SPI nedir ISP nedir diye sorarsanız, ISP SPI seri haberleşme yöntemiyle programlama yapaya yarayan programlama yöntemidir.
ATMEGA328'in 18 numaralı bacağı aslında Arduino'nun 13 numaralı dijital pini, 17 numaralı bacağı Arduino'nun 12 numaralı dijital pini, 16 numaralı bacağı Arduino'nun 11 numaralı dijital pini ve 15 numaralı bacağı Arduino'nun 10 numaralı dijital pinidir.
Arduino'da SPI seri haberleşme pinlerinin isimleri aşağıdaki gibidir;
- pin 13 > SCK
- pin 12 > MISO
- pin 11 > MOSI
- pin 10 > CS
- bacak 18 > SCK
- bacak 17 > MISO
- bacak 16 > MOSI
- bacak 15 > CS
Bunun dışında Arduino ve ATMEGA328'in bağlantıları karşılıklı yapılır. Yani MISO>MISO'ya, MOSI>MOSI'ye ve SCK>SCK'ya bağlanır.
Bir de ATMEGA328'in 16MHz değerinde bir kristale ihtiyacı var. ATMEGA328'in 9 ve 10 numaralı bacakları Kristal bağlantı bacaklarıdır. Krsitalin bir bacağı 9 diğer bacağı 10 numaralı bacağa bağlanır. Aynı zamanda 9 numaralı bacaktan toprağa 22pF bir adet kondansatör bağlanır aynısını 10 numaralı bacak içinde bağlanır.
ATMEGA328'in 7,20 ve 21 numaraşı bacakları +5V'a, 8 ve 22 numaralı bacakları toprağa yani GND'ye bağlanır. Tüm bu anlatılanların hepsi aşağıda fritzing şemasında bağlantıları yapılmış halde görülmektedir. Şemada görünen 2 adet kondansatörün değeri 22pF, kristalin değeri 16MHz'dir.
ÜÇÜNCÜ AŞAMA: BOOTLOADER'IN ATMEGA328'E YÜKLENMESİ
Birinci aşamayı ardından da ikinci aşamayı da yaptıysanız sıra geldi üçüncü ve son aşamaya. Yani ATMEGA328'e bootloader'ın yüklenmesi.İkinci aşamadaki şemayı kurduysanız Arduino'yu USB kablosu ile bilgisayara bağlayın. Ardından "Araçlar > Önyükleyiciyi Yazdır" yolunu izleyip "ÖnyükYazdırleyiciyi " seçeneğini tıklayın.
Biraz uzun sürebilir yaklaşık 20-40 saniye içinde yüklenecektir bootloader. O yüzden bir sorun mu var dondu mu kaldı mı diye endişelenmeyin. Yükleme tamamlandığında tamamlandığını bilgisayarda göreceksiniz tıpkı normal bir programı upload ettiğinizde olduğu gibi.
Böylece ATMEGA328'e Arduino Bootloader'ı yüklemiş olduk.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Evet şuan elimizde Arduino Bootloader yüklü olan bir ATMEGA328'imiz oldu ancak buna bu şekilde yazacağımız arduino kodlarımızı yükleyemeyiz. Çünkü en başlarda da dediğim gibi biz bootloader'ı Arduino platformunu kullanabilmek ve RX-TX pinleri ile programlayabilmek için yükledik. Bu da demek oluyor ki bizim bir USB-Serial Çeviriciye ihtiyacımız olacak. Bu sayede kodlarımızı ATMEGA328'e yükleyebilelim.
Şimdi Arduino Bootloader'ımızı yüklediğimiz ATMEGA328'e nasıl program kodlarımızı yükleyeceğimizi görelim.
ARDUINO BOOTLOADER'LI ATMEGA328'E ARDUINO KODU NASIL YÜKLENİR?
Öncelikle birinci aşamada yapılan "Araçlar > Programlayıcı" yolunu izleyip seçtiğimiz "Arduino as ISP" seçeneğini eski haline geri getiriyoruz hatırlamıyorsanız "AVR ISP" seçeneğini seçiniz. Artık Arduino ile ATMEGA328 arasındaki bağlantıları sökmelisiniz. Arduino'nuza yüklenen "ArduinoISP" programı kalıcı olmadığı için eskisi gibi istediğiniz kodları yükleyebilirsiniz.
Daha sonra USB-Serial çeviriciniz ile ATMEGA328 arasındaki bağlantıları aşağıdaki gibi yapmamız gerekiyor;
Mavi kondansatörler 100nF değerinde. Mavi olduğuna bakmayın renginden ziyade 100nF olması yeterlidir.
Buradaki çevirici FTDI çipli bir çevirici. Bununda bir önemi yok, CH340, CP2102 çipli çeviriciler de aynı bacaklara ve aynı isimlere sahipler. Önemli olan tek şey "DTR" bacağına sahip olmalarıdır. Eğer elinizde "DTR" isimli bacağı olmayan bir USB-Serial çevirici varsa muhtemelen işe yaramayacaktır ya da kodları yüklerken sorun yaşayacaksınızdır.
ATMEGA328'in 18 numaralı bacağına bir LED bağladım. Çünkü 18 numaralı bacak Arduinonun 13 numaralı dijital pinine denk gelmektedir. Bu pinlerin ATMEGA328 ile Arduino arasında ilişkileri konunun en başında paylaştığım iki görselde mevcut, biri UNO biri NANO için. MEGA üzerinde ATMEGA2560 bulunduğu için bu konu ile ilişkilendirilmemesi gerekmektedir!
Yukarıdaki bağlantıyı yaptıktan sonra bilgisayarınızdan Arduino'yu açınız. Ve USB-Serial çeviricinizi USB'ye bağlayınız. Board için ister UNO isterseniz NANO seçin fark etmeyecektir. Ardından ilgili COM portunu seçiniz.
Hemen ardından "Dosya > Örnekler > Basics" yolunu izleyip "Blink" yazan seçeneği tıklayınız. Karşınıza LED yakıp söndüren Arduino kodu gelecek ve Upload tıklayarak yüklemeyi başlatınız.
Yükleme tamamlandığında artık breadboard üzerine kurduğumuz ve içine Arduino Bootloader yüklediğimiz ATMEGA328'e ilk Arduino kodumuzu yüklemiş olduk.