Kapak Resmi : https://store-cdn.arduino.cc/usa/catalog/product/cache/1/image/520×330/604a3538c15e081937dbfbd20aa60aad/a/0/a000066_featured_4.jpg
C ile AVR Programlama -7- İlk Program
Bundan önceki 6 derste AVR’yi tanıtıp sizi AVR’ye hazırladık. Şimdi ilk programı işletme vakti. Fakat söylememiz gereken çok fazla teorik bilgi olduğu için sadece bir program yapıp sonra teorik bilgileri anlatmakla devam edeceğiz. Teorik bilgilerin bolluğu bu seviyede pek sorun olmayacaktır. Eğer mikrodenetleyici dünyasına yeni girdiyseniz ve pratik eksikliğiniz varsa daha basitleştirilmiş ve yani başlayan dostu olan Arduino’yu deneyebilirsiniz. Yazdığım Arduino Eğitim Kitabı sıfırdan başlayanları AVR ile ilgili konuları anlayacak seviyeye getirecek düzeydedir. Sağlam bir temel oluşturmadan ileri seviye konuların anlamadan ve ezbere yapılma olasılığı çok fazladır. Ezberciliğin önüne geçmek için mümkün olduğu kadar ince ayrıntısıyla ve herkesin anlayacağı düzeyde açıklayarak fakat bir birikimi olan okuyucuları da sıkmayacak seviyede anlatmaya gayret edeceğim.
C ile AVR programlama mantığını anlamadan oldukça anlaşılmaz ve zor, mantığını anlayarak oldukça anlaşılır ve kolay gelecektir. C dilinde programlamamızın yanında elimizde belli sınırları ve özellikleri olan bir işlemci vardır. Portlar, Kesmeler, Zamanlayıcılar, İletişim, Sigortalar, ADC, PWM gibi konuları öğrendikten sonra geriye fazla bir şey kalmamaktadır. Bu işlemler de genel olarak belli yazmaçların bit değerlerini okuma, bu yazmaçlara bit değeri yazma ve bu bit değerlerini işlemcide işleme veya kaydetme olarak yapılmaktadır. Çevre birimleriyle ve dış dünya ile iletişimi çözdükten sonra geri kalan işimiz yazılımsal boyutta olacaktır.
Arduino UNO’yu Atmel Studio’da Kullanmak
Arduino UNO kartı Atmel Studio ile doğrudan kullanılamaz. Bunun için Atmel Studio’nun bir özelliği olan Tool (Alet) olarak tanımlanması gerekir. Fakat ondan da önce AVRDUDE programını yüklememiz gerekir. Bundan öncesinde AVRDUDE programından bahsetmiştik. Okumayanlar buradan okuyabilir. C sürücüsünde AVRDUDE adında bir klasör açıp indirdiğimiz arşiv dosyasını oraya çıkardıktan sonra Atmel Studio’yu açıyoruz. Tools kısmından External Tools sekmesini seçiyoruz.
Burada açılan pencerede ADD düğmesine tıklayıp yeni bir alet oluşturuyoruz. Bilgiler resimdeki gibi girilmelidir.
Title | Arduino UNO (veya istediğiniz bir başlık) |
Command | C:\avrdude\avrdude.exe |
Arguments | -C “C:\avrdude\avrdude.conf” -p atmega328p -c arduino -P COM3 -b 115200 -U flash:w:”$(ProjectDir)Debug\$(ItemFileName).hex”:i |
Use Output Window kutusunu işaretli değilse işaretliyoruz.
COM9 yerine Aygıt Yöneticisinden baktığımız COM değerini yazıyoruz.
Atmel Studio 7’de ItemFileName yerine TargetName yazınız.
Doğrudan Copy-Paste yapmayın. ” işaretleri düzgün çıkmıyor o yüzden hata verir. Elle yazmayı deneyin.
Özellikle Arguments kısmındaki komutun doğru olarak yazıldığından emin olun. AVRDUDE programına gönderilecek bilgiler burada yer alır ve Arduino UNO’ya göre düzenlenmiştir. Eğer farklı bir kart ya da entegre kullanmayı istiyorsanız argümanların değerlerini değiştirerek programı işletebilirsiniz. Burada Atmel Studio AVRDUDE programı üzerinden Arduino kartına debug klasöründeki .hex dosyasını atacaktır.
Bu işlem ile beraber Atmel Studioda derleyeceğimiz program doğrudan Arduino UNO kartına atılacaktır. Ama bunun kısayolunu oluşturup ekrandaki bir düğmeye basarak işi kolaylaştıralım. Öncelikle şekildeki gibi bir düğme oluşturmak için sağ taraftaki oka tıklayıp Add or Remove Buttons sekmesinden Customize düğmesine tıklıyoruz.
Açılan pencerede Add Command… düğmesine tıklıyoruz ve Tools sekmesinden External Command 1’i seçiyoruz.
Böylelikle şimdilik Atmel Studio’da yapacağımız ek bir şey kalmamış oluyor. Şimdi yeni proje açalım ve ilk programı yazıp çalıştıralım.
Öncelikle File/New/ New Project diyoruz.
Karşımıza iki dil ve o dillerdeki proje tipleri çıkıyor. Assembly ve C/C++ dilleri ayrı olduğu gibi C ve C++ projeleri de ayrı olarak açılmaktadır. GCC C Executable Project seçeneğini seçiyoruz ve projemize isim verdikten sonra projeyi açıyoruz.
Proje ekranından sonra karşımıza aygıt seçme ekranı geliyor. Atmega328P kullanacağımız için arama kısmına Atmega328P yazıyoruz. Ayrıca aygıtı geçtikten sonra teknik veri sayfası (datasheet) ve desteklenen araç listesi çıkıyor. Buranın ekran görüntüsünü verme gereği duymadım çünkü yukarıdaki ekran görüntüleri yeteri kadar fazla oldu. Şimdi karşımıza programı yazacağımız .c uzantılı dosya geliyor ve programı yüklemek için yukarıdaki Arduino UNO düğmesine tıklıyoruz.
Şimdilik Atmel Studio’yu kullanmak hakkında vereceğim bilgiler bu kadarı ile sınırlı olacak. Şimdi basit bir yanıp sönen led programı ile Arduino UNO’nun üzerindeki L etiketli ledi yakıp söndürelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/* * GccApplication1.c * * Created: 16.8.2018 00:49:23 * Author: Gökhan Dökmetaş */ #include <avr/io.h> #define F_CPU 16000000UL #include "util/delay.h" int main(void) { DDRB = 0xFF; while(1) { PORTB ^= 0xFF; _delay_ms(1000); } } |
Programın açıklamasını burada yapmayacağız. Sadece deneme amaçlı bir program olarak burada bırakalım. İlerleyen derslerde PORT yazmaçlarını ve port manipulasyonunu ayrıntılarıyla açıklayacağız.
Kaynaklar:
Using Arduino Boards in Atmel Studio, Sepehr Naimi, http://www.microdigitaled.com/AVR/Hardware/Arduino/UsingArduinoBoardsInAtmelStudio.pdf, Erişim Tarihi : 16.08.2018
Argument kısmında hata verenler için , bende çalışan argument syntaxi :
-C “C:\avrdude\avrdude.conf” -p atmega328p -c arduino -P COM3 -b 115200 -U flash:w:”$(TargetDir)$(TargetName).hex”:i
Bir önemli not : buradan kopyala yapıştır yaparsanız yolu belirten iki tırnak ( ” ) işaretlerini düzeltin “
Bir saattir Arduino Uno ya bağlanamadım.Sonra sizin yorumunuzu gördüm.Tırnakları düzeltince oldu.Çok teşekkürler.İki tırnak arasında ne fark var anlayamadım yalnız.
Yukarıda belirttiğim üzere Aygıt yöneticisindeki COM adını yazıyoruz. Bunda COM3 bende ise COM9 olarak yazılı. Bu rakam değişebiliyor.
Sevgili Gökhan bey çok faydaklı bir iş yapıyorsunuz, ellerinize sağlık.
Bir düzeltme isteği/önerisi nacizane.
“C ile AVR programlama mantığını anlamadan oldukça anlaşılmaz ve zor, mantığını anlayarak oldukça anlaşılır ve kolay gelecektir.” cümlesi kolay anlaşılabilir değil. Cümle devrik değil, yanlış değil ama şöyle olsa daha anlaşılabilir olur mu?
“C ile AVR programlama; mantığını anlamadan oldukça zor, mantığını anlayarak oldukça kolay gelecektir.”
Saygılarımla.
Gökhan Bey,
F7 ile build yapmadan hex dosyasını oluşturmuyor. Arduino UNO butonuna tıkladığımda ise hex dosyası bulunamadı hatası veriyor. Her kodu değiştirdiğimde önce F7 ile build edip sonra Arduino UNO butonu ile programı atabiliyorum. Acaba doğrudan Arduino UNO butonuna tıklandığında önce build edip sonra yüklemesini yaptırmanın bir yolu yokmudur?
Atmel Studio 7’de ItemFileName yerine TargetName yazınız.
-C C:\avrdude\avrdude.conf -p atmega328p -c arduino -P COM3 -b 115200 -U flash:w:$(ProjectDir)Debug\$(ItemFileName).hex:i
Asıl kod yukarıdaki gibi olmalı arkadaşlar. Eğer benim gibi 2 gündür neden bu led yanıp sönmüyor diye düşünen ve araştıran varsa buyrun yukarıdaki kod doğru kod. Dikkatsizlik edip 4 adet tırnak işaretinin kodda olması gerektiğini düşünmeyin sakın =)ü
sadece COM port numarasını değiştirin aygıt yöneticisinden bakıp, avrdude yi nereye kurduysanız orayı gösterin ve Atmel Std. 7 ise ItemFileName yerine TargetName yazın. Bütün tırnakları kaldırın.
NOT: clon arduinoda da aynı şekilde çalışıyor.
Kolay gelsin, iyi çalışmalar.
Her şeyi denedim olmadı ama sonra “avrdude” kurumunu bu videodaki gibi yapınca sorunsuz şekilde oldu.
https://www.youtube.com/watch?v=B7KQ3W4RxcA
-C C:\avrdude\avrdude.conf -p atmega328p -c arduino -P COM3 -b 115200 -U flash:w:$(ProjectDir)Debug\$(TargetName).hex:i
bende de böyle yazdıktan sonra çalışmaya başladı.halbuki 6.2 kullandım bende.teşekkürler bütün dersler için
sürekli olarak
“avrdude.exe: erasing chip
avrdude.exe: reading input file “C:\Users\IEUser\Documents\Atmel Studio\7.0\GccApplication1\GccApplication1\Debug\GccApplication1.hex”
avrdude.exe: can’t open input file C:\Users\IEUser\Documents\Atmel Studio\7.0\GccApplication1\GccApplication1\Debug\GccApplication1.hex: No such file or directory
avrdude.exe: read from file ‘C:\Users\IEUser\Documents\Atmel Studio\7.0\GccApplication1\GccApplication1\Debug\GccApplication1.hex’ failed”
hatası alıyordum, kodu yazıp “build” ettikten sonra “Arduino UNO” kısmına tıklayınca çalıştı.
merhaba, klon arduino uno kullananlar bu dersleri takip edebilir mi?
Edebilir, bir sorun olmaz.