Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8

Ş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? 

arduino atmega328p programlama, Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8

Gerekli Malzemeler

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 atmega328p programlama, Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8

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.

arduino atmega328p programlama, Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8

En alttaki URL boşluğuna bu URL’yi girin:

https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json

arduino atmega328p programlama, Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8

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 atmega328p programlama, Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8

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ı

arduino atmega328p programlama, Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8

Breadboard Görüntüsü

arduino atmega328p programlama, Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8

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.

arduino atmega328p programlama, Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8

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 bu şekilde yükleyin.

arduino atmega328p programlama, Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8

-Ö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ı

arduino atmega328p programlama, Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8

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ü

arduino atmega328p programlama, Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8
arduino atmega328p programlama, Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8

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ı

arduino atmega328p programlama, Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8

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;

arduino atmega328p programlama, Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8

İşlemini yapınca yüklemiş oluyoruz.