Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8
devreyakan.com’ olarak ilk yazılarımızdan biri bu konu hakkındaydı, fakat tekrar kontrol ettiğimizde, yeterli olmadığına karar verip, sıfırdan bu yazıyı hazırladık. Bu yazıda; Atmel mikroişlemcilere bootloader’lı ve bootloader’siz program yüklemeyi, standalone Arduino kurmayı göstereceğiz!
Şimdiye kadar programlarınızı, projelerinizi Arduino Kartlar ile geliştirmiş olabilirsiniz. Peki ya Arduino kartı komple ortadan kaldırıp Arduino’nun kalbi olan bir mikroişlemciyi programlamaya başlamaya ne dersiniz?
Gerekli Malzemeler
- Arduino UNO DIP ya da SMD
- ATmega328/ATmega328P Mikroişlemci
- CH340 USB to TTL Dönüştürücü
- 16 MHz Kristal Osilatör
- 22 pF x 2 Kapasitör
- 10k ohm Direnç
- Buton
Atmel (AVR) Mikroişlemciler
AVR, Atmel firmasının üretmiş olduğu 8 bitlik RISC mimarisine sahip mikrodenetleyicidir. Ucuz ve hızlı çalışan bir mikrodenetleyici olup, gelişmiş özellikleri bulunmaktadır. 2 KB ile 128 KB arasında değişen kapasitelerde yazılıp-silinebilen flash(PROGMEM) belleğe sahiptir.
Arduino IDE’ye ATmel Mikroişlemci Desteği Kurmak
Programlamak istediğimiz mikroişlemcileri, Arduino IDE ile kullanabilmek için; MCUDude isimli GitHub kullanıcısının oluşturduğu “MiniCore” kütüphanesini kullanacağız. Bu kütüphane aşağıdaki ATmel mikroişlemcilerini destekliyor.
- ATmega8
- ATmega48
- ATmega88
- ATmega168
- ATmega328
MiniCore’u Arduino IDE’ye kurmak için aşağıdaki adımları izleyin.
Dosya menüsünde Tercihler’e tıklayın.
En alttaki URL boşluğuna bu URL’yi girin:
https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
Araçlar menüsüne gidin ve ardından Kart Yöneticisi’ni girin
Boards Manager penceresinde MiniCore’u arayın ve ardından en son sürümü yükleyin.
Arduino IDE’ye şuan MiniCore kütüphanesini kurmuş olduk.
Arduino UNO’yu ISP Moduna Çevirmek
In-system programming yani devre içi seri programlama, mikroişlemcilere program yazmak, bootloader yüklemek için kullanacağımız programlama protokolüdür. Bu işlemi yapmak için harici bir ISP programlayıcı, ya da USBASP modülleri kullanabilirsiniz. Biz bu yazıda bootloader yüklemek için, Arduino UNO kartımızı ISP programlayıcı olarak kullanacağız. Örnekler kısmında bulunan ISP örneğini birazdan Arduino UNO kartımıza yükleyeceğiz.
Bootloader Nasıl Çalışıyor
Arduino bootloader’i, program belleğini (yani Flash’ı) seri olarak yeniden programlamayı destekler. Bu olmadan, ATmega işlemcilerin kodunu değiştirmek için harici bir USBtiny/USBAsp/USBIsp/AVR Programlayıcısı gibi özel bir donanım programcısına ihtiyacınız olacaktır. Birçok mikro denetleyici gibi, ATmega328p de program belleğinin bir kısmını önyükleme kodu için ayırır. Eğer elinizde başka bir programlayıcı varsa, Arduino yerine kullanabilirsiniz.
Mikroişlemciye Bootloader Kurulumu
Bağlantıları yapmadan önce Arduino kartınıza “Örnekler” bölümünüden ArduinoISP taslağını yüklemeniz gerekiyor. Yüklemenin ardından, Arduino kartımızı, bootloader yüklemek istediğimiz bir mikroişlemciye aşağıdaki gibi bağlayalın. Biz ATmega8A kullandık, fakat desteklenen kartlar için pin çıkışları tamamen aynı, bu yüzden bu şemayı bir kaç farklı mikroişlemci için de kullanabilirsiniz.
Arduino ———-ATmega8A
SCK / Pin 13 ———-SCK / PB5
MISO / Pin 12 ———-MISO / PB4
MOSI / Pin 11 ———-MOSI / PB3
SSN / Pin 10 ———-RESET
Devre Şeması
Breadboard Görüntüsü
ArduinoISP yüklemesi yapıldıktan ve kabloları bağladıktan sonra;
Araçlar > Kart > MiniCore > ATmega8 ‘i seçmeniz gerekiyor. İsterseniz diğer ayarlardan frekans/saat ayarı gibi ön tanımlı seçenekleri değiştirebilirsiniz. Bu seçimleri yaptıktan sonra;
Araçlar > Önyükleyiciyi Yazdır seçeneğine tıklıyoruz.
Eğer bağlantılar doğru ve bootloader yükleme işlemi başarılı olduysa, böyle bir mesajla karşılaşıyoruz;
“Done burning bootloader”.
Bootloader yüklediğimiz mikroişlemci artık, seri programlamaya hazır!
ATmega8 Mikroişlemcisini ICSP ile Programlamak
Bootloader yükleme işlemi tamamlandıktan sonra, bağlantıları bozmadan, devreye sadece reset butonu ekleyerek, doğrudan bir program yazıbilir;
Şimdi herhangi bir arduino sketch’i açın ve yükleyin.
-ÖNERİLEN- ATmega8 Mikroişlemcisini USB to TTL ile Programlamak
Şuan itibariyle Arduino Bootloader’i yüklenmiş bir ATmega8 mikroişlemcimiz var. Bildiğiniz gibi tüm Arduino kartlarında USB-TTL çevirici bulunmakta. Bu çevirici, Arduino IDE ve mikrodenetleyici arasında bir köprü görevi görüyor. Kullandığımız çeviricin entegresi CH340 olarak geçiyor fakat piyasada bazı CH340G modelleri mevcut. Aralında pek fark bulunmamakla beraber iki farklı entegreli modülleri kullanabilirsiniz.
Bilgi
Bizim kullandığımız USB-to-TTL çeviricide bir DTR(reset) pini bulunmamakta bu yüzden, yeni bir program yüklerken resetleme işlemini elle yapmamız gerekiyor. Bu yüzden reset pinine bir pull-up direnci ile buton bağlıyoruz. Eğer sizin USB-to-TTL çevirici modülünüzde bir DTR pini varsa, bu butonu kullanmak zorunda değilsiniz. DTR pini sizin yerinize resetlme işlemini yapmakta. Bir kaç ters mühendislik denemesi ile bu pini sonradan oluşturmaya çalıştık, fakat farklı farklı sorunlarla karşılaştık bu yüzden manuel yolla sıfırlama yapmaya karar verdik.
Devre Şeması
Bağlantılar
CH340 ———- ATmega8
VCC ———- VCC
GND ———- GND
Tx ———- RX / PD0
Rx ———- Tx / PD1
DTR(varsa) ———- 1. Pin (reset) yoksa pull-up ile bir buton.
Breadboard Görüntüsü
Pin çıkışları gördüğünüz gibi 5 farklı seri için tamamen aynı, buna istinaden bu mikroişlemcilerden her hangi birini aynı sistem ve mantıkla kullanabilirsiniz, sadece bootloader ve program yüklerken MiniCore kütüphanesinden doğru mikroişlemciyi seçmeniz gerekiyor.
ATmega8’e Kod Yüklemek
Her hangi bir kod yüklemeden önce, Kart seçeneklerinden, o an yükleme yapacağınız mikroişlemciyi seçmeyi unutmayın.
Arduino IDE’de “Yükle” butonuna basmadan önce, breadboard üzerine eklediğimiz butona basılı tutmanız gerekiyor. “Yükleniyor” yazana kadar basmaya devam etmelisiniz.
Bu olayın sebebi, mikroişlemcilere program yüklemeden önce “RESET” statüsüne gelmesi gerektiğidir. Eğer yükleme işleminde problem yaşıyorsanız, mikroişlemciye yakın bir konuma 100nF bir kapasitörü GND ve VCC arasına yerleştirmeniz büyük ihtimalle sorununuzun önüne geçecektir.
Bootloader Olmadan Kod Yüklemek
Eğer bootloader yüklemediyseniz ve Arduino IDE kullanmak istemiyorsanız, USBAVR/USBASP gibi ek dönüştürücüler ile doğrudan .hex dosyalarını mikroişlemciye yükleyebilirsiniz. Fakat bu yazıda, bootloader olmadan Arduino IDE aracılığı ile yüklemeyi göstereceğiz, bir sonraki yazılarda, fuse ayarları ve doğrudan .hex dosyası yükleme ana konumuz olucak.
Devre Şeması
Aslında bu yöntem bazı mikroişlemcilerde ve kartlarda düzgün çalışmıyor bu yüzden pek önermiyoruz fakat denemek isteyenler için;
Arduino ———-ATmega8A
SCK / Pin 13 ———-SCK / PB5
MISO / Pin 12 ———-MISO / PB4
MOSI / Pin 11 ———-MOSI / PB3
SSN / Pin 10 ———-RESET
devamında her hangi bir kodu açarak;
İşlemini yapınca yüklemiş oluyoruz.
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.