AVR Programlama 1:Merhaba Dünya
Ertelemenin ne kadar kötü bir hastalık olduğunu sanırım bilmeyen yoktur. Bir eylemi daha iyi gerçekleştirme isteği bizi bazen yapmak istediklerimizi ötelemeye itiyor. Olayları akışına bırakıp yaşamak yararlı olabilir. En azından ötelememiş oluruz. Bu yazıyı bu zincirin ilk halkasını kırmak adına yazıyorum.
Atmel'in mikrodenetleyicileri Arduino vasıtasıyla bir dönem her yere yayılmıştı. Eskisi kadar bu ateşin yanmadığını düşünsem de halihazırda bir çok kişinin elinin altında Atmel'in bir mikrodenetleyicisinin bulunduğunu düşünüyorum. Bu yüzden sizinle beraber ben de meşhur ATmega328'i öğreneceğim.
Düşük seviyeli uygulamalar yazmak bazen işeri çok kolaylaştırabilir. Hazır kütüphaneler bazen kullanışsız olabiliyor. Hazır kütüphanelerin kullanımına karşı olmasam da işleri bazen donanım katmanı üzerinden ele almak gerekebiliyor. Bu yüzden sizinle derinlere inip yazaç düzeyinde program yazacağız.
Geliştirme Araçları
Microchip Atmel Studio 7.0
USBAsp
Avrdude(AVRDUDESS)
Bu yazı dizisinde yukarıda belirttiğim araçlar kullanılacak.Atmel Studio ile programlarımızı yazıp,derleyeceğiz. USBAsp ile programlarımızı mikrodenetleyicimize AVRDUDESS yazılımını kullanarak yükleyeceğiz.
Microchip Atmel Studio 7.0
Microchip'in Atmel'i satın almasının ardından Atmel Studio'nun adı Microchip Atmel Studio olarak değiştirildi. Bu değişimin ardından Microchip Atmel cihazları için API'ler yayımladı. Ayrıca Atmel studio'ya mikrodenetleyiciyi daha kolay yapılandırmamızı sağlayan araçlar ekledi. Bu eklemeleri daha sonra başka bir yazı serisinde ele almak istiyorum.
USBAsp
USBAsp programlarımızı mikrdodenetleyiciye yüklemememizi sağlayan açık kaynaklı bir Atmel programlayıcısı. Farklı programlayıcı modelleri kullanıalbilir. Doğrudan çalışma ortamımızla entegre olamasa da bazı ufak düzenlemeler ile Atmel Studio üzerinden kullanılabilir. Dileyen farklı bir programlayıcı kullanabilir. Özellikle hata ayıklayıcı özelliği olan Atmel'in kendi programlayıcıları işlerinizi kolaylaştırır.
AVRDUDESS
Avrdude yazılımı açık kaynaklı bir programlayıcı yazılımıdır. Ben bu programın grafik ara yüzlü versiyonununu kullanıyorum. Bu bağlantı üzerinden programı indirip derleyebilirsiniz.
Program kurulumu gibi teknik ayrıntılarla yazıyı boğma ihtiyacı hissetmiyorum. Zira bu araçların kurulumlarına dair Türkçe ve İngilizce kaynaklar mevcut.
Microchip Atmel Studio'ya Giriş
Yapmamız gereken ilk işlem editörü karanlık moda geçirmek. :)
GCC C Executable Project diyerek yeni bir proje oluşturalım. Türkçe karakter kullanırsanız derleyicinin aptallaştığını söylememe sanırım gerek yok.
Açılan yeni pencereden kullanmak istediğimiz mikrodenetleyicimizi seçelim ve devam edelim.
Karşımıza koyu,bizi moda sokacak bir ekran ile projemizi yazacağımız pencere açılıyor. Burada size kalkıp size C dersi verme hadsizliğinde bulunmayacağım. Ben de çok bilmiyorum. :)
Karşımıza programa dahil edilmiş olarak şöyle bir satır çıkıyor;
#include <avr/io.h>
Bu başlık dosyası G/Ç tanımlarını içeren bir başlık dosyasıdır. Dosya hakkında bilgi almak için bağlantıya tıklayabilirsiniz.
Temel Giriş Çıkışların Yazaçlar Üzerinden Yönetilmesi
Atmega328'de giriş çıkışları yönetebilmemiz için üç temel yazaç vardır. Bu üç temel yazaç haberleşme, ölçüm vb. fonksiyonlar için değil de pinlerin giriş çıkış yapılandırmaları ve kontrolü için kullanılır. Bu yazaçlar aşağıdaki gibidir;
DDRX
PORTX
PINX
ATmega328'de üç adet port olduğunu biliyoruz bunlar; A,B ve C portları. Burada X gördüğünüz yere A,B veya C yazarak ilgili portun yazacına ulaşabilirsiniz. Örneğin;
DDRA=0xFF;
Şeklindeki bir kullanım A portunun DDR(Data Direction Register) yazacına on altılık tabanda FF değerini yükler. DDRA portunun adresine mikrodenetleyicinin veri kitapçığından ulaşılabilir. Editörünüze DDRA yazın ve makronun tanımını görmek için kelimeyi seçerek Go to Implementation yolunu izleyin. Burada DDRA'nın veri kitapçığındaki adres kullanılarak tanımlandığını göreceksiniz.
DDRX
Açılımı Data Direction Register'dır. İçerisine yazdığınız değer ilgili portun pinlerinin giriş-çıkış durumunu belirtir. Çıkış yapmak istediğiniz bite 1 yazarsanız karşılığı olan pin çıkış, 0 yazarsanız giriş olarak tanımlanır. Ön yüklü değerinde bütün pinler (0x00) giriş olarak tanımlıdır. X ile belirtilen yere kulanmak istenilen port adı yazılır(A,B,C).
Örnek olarak C portunun yapısı yukarıdaki şekildedir. Eğer C portuna bağlı olan PC0 pininini çıkış yapmak istersem;
DDRC = 0x01;
Komutunu kullanabilirim. Bu sayede C portumuzun PC0 isimli pini çıkış olarak seçildi. Giriş durumunu seçmek isterseniz ilgili bite 0 değeri yazmalısınız.
PORTX
PORT yazaçları genelde mikrodenetleyicinin çıkış olarak atanan pinlerini mantık 1 veya 0 yazmak için kullanılır. Eğer pinler DDRX yazaçlarından giriş olarak tanımlanırsa bu yazaca yazılan bitler ilgili pinlerin dahili yukarı çekme dirençlerini etkinleştirir.
PINX
Bu yazaç giriş olarak tanımlanan pinlerin mantıksal durumlarını saklar. Eğer pinler çıkış olarak tanımlanırsa yazaca yazılan bitler ilgili pinlerde tersleme işlemine neden olur.
Temel kullanım bu şekilde olduğu için her yazaç için örnek verme ihtiyacı hissetmedim. Yazaçların kullanımı uygulamalı örneklerler ile daha iyi bir temele oturacak. Bu yüzden endişelenmenizi gerektirecek bir durum yok, motoru yeni ısıtıyoruz. ;)
Her ne kadar sizin için cicili bicili tablolar oluşturmuş olsam da ana kaynağımızın ATmega328 P'nin veri kitapçığı olduğunu unutmamanızı rica ediyorum.
Devre Şeması
Temel olarak bu devre yanlış olmasada tamamen doğru değildir. Daha doğru bir tasarım için AVR040:EMC Design Design Considerations isimli belge incelenebilir.
Küçük Bir Uygulama
İlk yazının fazla uzun olmasından dolayı Merhaba Dunya'yı iki kısım olarak yayınlacağım. Yazının ilk kısmını basit bir örnek ile bitirmek istiyorum. Öncelikle bekleme fonksiyonlarımzı kullanabilmek için gerekli olan;
#include <util/delay.h>
kütüphaneyi projeye dahil ediyoruz. Projede kullandığımız bekleme fonksiyonu;
_delay_ms(1000);
İşlemciye 1 saniye boyunca döngüye sokarak meşgul ediyor. Bu sayede LED'in birer saniye aralıklarla bize göz kırptığını gözlemleyebiliyoruz. Buraya girdiğiniz bekleme süresi double tipinde olduğundan 1000.56 şeklinde saçma sapan bir değer de girebilirsiniz.
Programı Build seçeneğini kullanarak derleyin. Solution Explorer penceresinden Output Files klasörünün altından derlediğiniz programın hex dosyasını görebilirsiniz.
USBAsp'nin Bağlantısı
Uzun uzun bu bağlantıyı çizmeye üşendiğimden buraya bir bağlantı bırakacağım. ;)
AVRDUDESS
Programlarımızı AVRDUDESS yazılımı aracılığıyla mikrodenetleyicimize yüklüyoruz. Öncelikle kullandığımız mikrodenetleyiciyi seçiyoruz ardından derlediğimiz hex dosyasının yolunu seçip mikrodenetleyicimize yüklüyoruz.
Başardınız!İlk adımı beraber attık.Yapmanız gereken tek şey kullandığınız platformun veri kitapçığını yalayıp yutmak. Serinin sonraki yazısında portları kontrol etmenin daha farklı yollarına göz atacağız. Yazıda hoşunuza gitmeyen yerler, yanlışlıklar var ise bildirirseniz memnun olurum. Hadi bakalım klavyenize kuvvet. ;)
Comments