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?

Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8 arduino ile atmega328p programlama,atmega328p programlayıcı,arduino ile atmega8 programlama,arduino ile atmel programlama,arduino uno ile atmega328p programlama

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 ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8 arduino ile atmega328p programlama,atmega328p programlayıcı,arduino ile atmega8 programlama,arduino ile atmel programlama,arduino uno ile atmega328p programlama

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 ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8 arduino ile atmega328p programlama,atmega328p programlayıcı,arduino ile atmega8 programlama,arduino ile atmel programlama,arduino uno ile atmega328p programlama

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

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

Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8 arduino ile atmega328p programlama,atmega328p programlayıcı,arduino ile atmega8 programlama,arduino ile atmel programlama,arduino uno ile atmega328p programlama

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 ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8 arduino ile atmega328p programlama,atmega328p programlayıcı,arduino ile atmega8 programlama,arduino ile atmel programlama,arduino uno ile atmega328p programlama

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 ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8 arduino ile atmega328p programlama,atmega328p programlayıcı,arduino ile atmega8 programlama,arduino ile atmel programlama,arduino uno ile atmega328p programlama

Breadboard Görüntüsü

Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8 arduino ile atmega328p programlama,atmega328p programlayıcı,arduino ile atmega8 programlama,arduino ile atmel programlama,arduino uno ile atmega328p programlama

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 ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8 arduino ile atmega328p programlama,atmega328p programlayıcı,arduino ile atmega8 programlama,arduino ile atmel programlama,arduino uno ile atmega328p programlama

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ı

Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8 arduino ile atmega328p programlama,atmega328p programlayıcı,arduino ile atmega8 programlama,arduino ile atmel programlama,arduino uno ile atmega328p programlama

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 ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8 arduino ile atmega328p programlama,atmega328p programlayıcı,arduino ile atmega8 programlama,arduino ile atmel programlama,arduino uno ile atmega328p programlama
Arduino ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8 arduino ile atmega328p programlama,atmega328p programlayıcı,arduino ile atmega8 programlama,arduino ile atmel programlama,arduino uno ile atmega328p programlama

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 ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8 arduino ile atmega328p programlama,atmega328p programlayıcı,arduino ile atmega8 programlama,arduino ile atmel programlama,arduino uno ile atmega328p programlama

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 ile Atmel Mikroişlemcisi Programlama | Atmega328P ve Atmega8 arduino ile atmega328p programlama,atmega328p programlayıcı,arduino ile atmega8 programlama,arduino ile atmel programlama,arduino uno ile atmega328p programlama

İş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.