Arduino ile Atmega Programlama

Atmega MCU’ları programlamak için seri programlayıcılar kullanılabileceği gibi arduinolar da kullanılabilir. Bu projede arduino mega ile Atmega88 entegresini programlayacağız. Çizimde görüldüğü üzere atmega88’in SCK,

AT88MISO, MOSI, RESET, GND, VCC ve AVCC pinlerini kullanarak seri programlama yapılabilmektedir. Seri programlama yapılabilmesi için atmeganın RSTDSBL sigortası 0 olarak, SPIEN sigortası da 1 olarak ayarlanmış olmalıdır. Fabrika çıkışı değerler seri programlama için uygundur fakat bu sigorta bitleri daha sonradan değiştirilmişse entegreyi programlamak için paralel programlayıcı kullanılmalıdır. Bunun için hazırladığımız proje burada.

 

Programlamaya başlamak için öncelikle bir kod yazmamız ve bu kodu derleyerek HEX dosyasına dönüştürmemiz gerekiyor. Bu projede derleyici olarak Atmel Studio 7 kullanıldı.

Şimdi arduinoyu bir seri programlayıcı olarak programlamamız gerekiyor. Arduino IDE’sini kullanarak bu işi gerçekleştireceğiz. Arduino IDE’sine girdikten sonra dosya>örnekler>ArduinoISP yolunu izleyip kodu açıyoruz ve arduinomuza yüklüyoruz. Bu noktadan sonra aşağıdaki devreyi kurmamız gerekiyor;

Atmega88

Devreyi kurup arduino’yu bilgisayara bağladıktan sonra 9. pine bağlı olan led kalp atımı şeklinde yanıp sönmeye başlamalı. Bu kısımda arduino IDE’sinden arduinonun kaçıncı porta bağlı olduğunu öğrenmeniz gerekiyor.

Daha sonra buradan WinAVR programını indirip tercihen C:\winavr konumuna atıyoruz. MCU’ya yüklemek istediğiniz hex dosyasını da aynı dizine atmanız daha sonra komut istemcisinden yapılacak işlemleri kolaylaştırır.

Şimdi komut istemcisini (cmd) yönetici haklarıyla çalıştırıyoruz ve “cd C:\winavr” komutu ile WinAVR’nin bulunduğu dizine geliyoruz. “avrdude -p m88 -c avrisp -b 19200 -P com8 ” yazıp enter’a basarak programlayıcının çalışıp çalışmadığını kontrol ediyoruz. komuttaki “com8” yerine arduinonun bilgisayarınıza bağlı olduğu portu yazmanız gerekiyor. 19200 yerine de arduinonun bitrate’ini yazmanız gerekiyor. 9600 veya 19200’ü deneyebilirsiniz ya da aygıt yöneticisinden bu değeri kontrol edebilirsiniz.

Avrdude programı programlayıcımızı tanıdıktan sonra HEX dosyamızı arduino’ya yüklemek için şu komutu kullanıyoruz;

“avrdude -p m88 -c avrisp -b 19200 -P com8 -U flash:w:proje.hex”

Bu komut için -p m88 MCU modelini belirtir. Başka bir MCU’yu programlıyorsanız kod numarasını “avrdude -p ?” yazarak bulabilirsiniz. “proje.hex” dosyası ise MCU’ya atmak istediğimiz hex dosyası. Buraya kendi dosyanızın ismini yazmalısınız.

Son olarak fuse bitlerini yazmak için;

“avrdude -p m88 -c avrisp -b 19200 -P com8 -U lfuse:w:0x62:m”

“avrdude -p m88 -c avrisp -b 19200 -P com8 -U hfuse:w:0xDF:m”

“avrdude -p m88 -c avrisp -b 19200 -P com8 -U efuse:w:0x01:m”

komutlarını kullanıyoruz. Bu kısımda seri programlama ve reset fuse bit’leri yanlış ayarlanırsa MCU programlanamaz hale gelebilir. Fuse bit’leri yanlış yazılan MCU’ları kurtarmak için HVPP programlayıcı kullanmanız gerekebilir.

“Arduino ile Atmega Programlama” Hakkında 4 Yorum

  1. Merhaba
    burada paylaştığınız bilgileri çok faydalı buldum, emeğiniz için teşekkürler. Ancak yeni bir Arduino kullanıcısı olarak burada verilen yönergeleri yetersiz buldum. Daha açık ve her adımda gerekli olan her detayı verebilirseniz çok daha faydalı olacağına inanıyorum.
    ilk paragrafta verilen sigorta bitlerinin değiştirilmiş olması paralel programlamayı gerektirir bilgisi gerçekten çok değerli, bunun yanında son parağrafta fuse bitleri yanlış yazılan MCUları kurtarmak için HVPP programlayıcı kullanmanız gerekebilir açıklaması ile yukarda bahsettiğiniz paralel programlayı mı kastediyorsunuz. Paralel programlama için hazırladığınız ve kırmızı ile “burada ” ile işaretleme yaptığınız yerde link yok, onu da incelemek isterim.
    dos shell (cmd) den verdiğiniz avrdude komutlarının ekran görüntülerini (sıralı olarak) paylaşırsanız daha faydalı olacaktır.
    Resimde bağlantısını verdiğiniz şemaya göre verilen komutlar mega üzerinden atmega88 MCU ya gönderiliyor yanlış anlamıyorsam. Benim problemim; Çinden yeni aldığım mega 328p MCU tabanlı LCR metre ilk kullandığımda ekranda standart olmayan karakterler gösterip sonraki kullanımlarda boş ekran göstermesi nedeniyle internetten bulduğum hex formatında firmware dosyasını bu MCU ya atabilmek, elimde sağlam halde UNO, mega ve nano kartlar var, bunlardan herhangi biriyle bu işi yapabilmek.. Ama Arduino ide aracılığıyla hex dosyası başka bir MCUya yüklenemiyor, daha doğrusu IDE ile açılamıyor.

    1. Mehaba Mehmet Bey yorumunuz için teşekkürler. Evet, paralel programlama ve HVPP ile aynı şeyler kastediliyor. HVPP yani High Voltage Parallel Programming, programlanacak avr mikrodenetleyicinin Reset pinine uygulanan +12V darbelerle denetleyicinin programlama moduna geçirilmesi oluyor. İlgili projeyi düzenledikten sonra yayınlayacağım.

      Ekran görüntülerini koyamadım çünkü yazıyı yazarken devre elimin altında değildi. Elinizdeki atmega328p ile söz konusu atmega88 denetleyicilerinin pinleri birebir aynı olduğundan, elinizdeki atmega328p’yi programlamak için sırasıyla;

      1-Elinizdeki Arduino’ya Arduino IDE’sindeki örnek projelerden olan Arduino ISP’yi yükleyin.
      2-Şekildeki devreyi kurun.
      3-WinAVR’yi C:\WinAVR konumuna çıkarın ve elinizdeki hex dosyasını da aynı konuma kopyalayın.
      4-CMD’yi açıp C:\WinAVR konumuna geldikten sonra “avrdude -p m328p -c avrisp -b 19200 -P com8 -U flash:w:proje.hex” komutu ile elinizdeki hex dosyasını mikrodenetleyiciye atabilirsiniz.

      Burada com8 olarak verilen port, sizin bilgisayarınızda değişiklik gösterebilir. ayrıca proje.hex olarak verilen dosya ismi de sizde farklı olabilir.

      Fuse bitlerini buradakiler gibi ayarlamamanızı öneririm. Elinizdeki LCR metre’nin osilatör devresine göre fuse bit değerleri değişebilir. Tekrarlamakta fayda var; Arduino IDE’siyle hex dosyası açmıyoruz, Arduino IDE’siyle Arduino’muza programlayıcı özelliği kazandırdıktan sonra WinAVR ile hex dosyasını yüklüyoruz.

  2. Merhaba, peki programladigimiz atmel denetleyicinin arduino ile icindeki hex dosyasini okuyup tekrar pcye kaydedebiliyormuyuz ?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.