GCC libc-1.0.4 ile AVR mikroi�lemcisini programlamak
ArticleCategory: [Choose a category, do not translate
this]
Hardware
AuthorImage:[Here we need a little image from you]
TranslationInfo:[Author + translation history. mailto: or http://homepage]
original in en Guido Socher
en to tr:Erdal Mutlu
AboutTheAuthor:[A small biography about the author]
Guido Linux'u, kendi donan�m�n� geli�tirmek i�in ger�ekten
�ok iyi bir i�letim sistemi oldu�u i�in be�enmektedir.
Abstract:[Here you write a little summary]
Atmel firmas�n�n AVR 8-Bit RISC Mikroi�lemcisi, �ok yayg�n
bir mikroi�lemcidir. EEPROM, Ram, Analog'dan say�sala
(digital) �evirici, bir�ok say�sal giri� ve ��k�� hat�, zamanlay�c�lar, RS 232
haberle�mesi i�in UART ve daha fazlas� tek bir �ipte bar�nd�rmaktad�r.
En �nemlisi, Linux i�in tam bir uygulama geli�tirme ortam�na sahip
olmas�d�r. Mikroi�lemciyi C ve GCC kullanarak programlayabilirsiniz.
Ayn� konu hakk�nda Mart 2002 say�s�nda
bir yaz� yazm��t�m. O g�nden bu g�ne bir �ok �ey de�i�ti. Kullanm�� oldu�um
AT90S4433 mikroi�lemcisi Atmel taraf�ndan art�k �retilmiyor. Bu yaz�,
Mart 2002 yaz�s� i�in g�ncelleme niteli�indedir. libc-1.0.4 ile ATmega8
mikroi�lemcisini kullanaca��m.
Dolay�s�yla, bu yaz� konuya giri� niteli�i ta��yacak ve
serinin ileriki yaz�lar�nda ATmega8 mikroi�lemcisini kullanan
daha ilgin� aletler olu�turaca��z.
ArticleIllustration:[This is the title picture for your article]
ArticleBody:[The article body]
Giri�
2002 y�l�nda yazd���m yaz�dan sonra
mikroi�lemcilerin programlanmas� bir �ok insan�n ilgisini �ekmi�ti.
Ancak, uygulama geli�tirme ortam�n�n y�klenip ayarlanmas� en zor ad�md�r.
E�er, bir �ey �al��m�yorsa, hatan�n nerede olu�tu�u hakk�nda
hi�bir d���nce y�r�t�lemiyor. Programlay�c� kablosu mu bozuk? Devre mi hatal�?
Y�klemede mi sorun var? BIOS'ta paralel ba�lant� iptal mi edilmi�?
ppdev i�in olan �ekirdek mod�lleri yanl�� m� derlendi? Neden �al��mad���
hakk�nda bir s�r� neden olabilir.
Mikroi�lemci d�nyas�na eylenceli bir giri� yapabilmeniz i�in
shop.tuxgraphics.org
adresinden, belgeleri i�eren ba�lat�labilir bir CD ile
programlay�c� donan�m�n� elde edebilirsiniz. Yapman�z gereken tek �ey,
CD'den bilgisayar�n�z� a�makt�r. Yaz�l�m y�klemenize gerek
yoktur ve bilgisayar�n�zda hi�bir �eyi de�i�tirmeniz de gerekmiyor.
Hatta ben bile b�yle bir CD kullan�yorum, ��nk�
geli�tirdi�im donan�mlar, bilgisayar�mdaki birka� �ekirdek nesli ile
Linux da��t�m�n� de��tirmeme kar��n, de�i�meden kalmaktad�r.
Elimde CD oldu�u i�in, geli�tirmi� oldu�um yaz�l�mda g�ncelleme
yapmak istedi�imde, uygulama geli�tirme ortam�n�n bilgisayar�mda hala
y�kl� ve ayarl� olup olmad��� pek �nemli olmamaktad�r.
Yapmam greken tek �ey, CD'den bilgisayar�m� a�makt�r.
CD'den ba��m�s�z olarak, GCC avr uygulama geli�tirme
ortam�n�n y�kleni�ini burada a��klayaca��m. tuxgraphics'ten
bu CD'yi elde ettiyseniz, okumaya "K���k bir deneme projesi"
b�l�m�nden devam edebilirsiniz.
Gerekli olan yaz�l�mlar
GNU C uygulama geli�tirme ortam�n� kullanabilmek i�in a�a��daki yaz�l�mlara gereksinim
duyacaks�n�z:
binutils-2.15.tar.bz2 |
ftp://ftp.gnu.org/gnu/binutils/
veya yans� y�resi olan
ftp://gatekeeper.dec.com/pub/GNU/binutils/ adresinden elde
edebilirsiniz. |
gcc-core-3.4.2.tar.bz2 |
ftp://ftp.gnu.org/gnu/gcc/
veya yans� y�resi olan
ftp://gatekeeper.dec.com/pub/GNU/gcc/ adresinden elde edebilirsiniz. |
avr-libc-1.0.4.tar.bz2.tar |
AVR C k�t�phanesini
http://savannah.nongnu.org/projects/avr-libc/ adresinden elde
edebilirsiniz. |
uisp-20040311.tar.bz2 |
AVR programlay�c� yaz�l�m�n�
http://savannah.nongnu.org/projects/uisp adresinden elde edebilirsiniz. |
T�m yaz�l�mlar� /usr/local/avr dizinine y�kleyece�iz.
B�ylece yaz�l�mlar� bilgisayar�n�zdaki C derleyicisinden ayr�
tutumu� oluruz. Bu dizini a�a��daki buyrukla yarat�n:
mkdir /usr/local/avr
�al��abilir programlar�n�n bulundu�u bin dizinini, PATH �evre
de�i�kenine ekleyebilirisiniz:
mkdir /usr/local/avr/bin
export PATH=/usr/local/avr/bin:${PATH}
GNU ara�lar�n�n y�klenmesi
Nesne dosyalar� yaratmak i�in gerekli t�m d���k seviye
ara�lar� binutils paketiyle birlikte gelmektedir.
Paket i�erisinde, AVR assembler (avr-as), ba�lay�c� (avr-ld),
k�t�phane i�leme ara�lar� (avr-runlib, avr-ar), mikroi�lemcinin
EEPROM'una y�klenebilir nesne dosyalar� yaratmaya yarayan programlar
(avr-objcopy), avr-objdump, avr-size ve avr-strip gibi
ara�lar bulunmaktad�r.
binutils paketini olu�turmak ve y�klemek i�in a�a��daki buyruklar� verin:
tar jxvf binutils-2.15.tar.bz2
cd binutils-2.15/
mkdir obj-avr
cd obj-avr
../configure --target=avr --prefix=/usr/local/avr --disable-nls
make
# ve root kullan�c�s� olarak:
make install
/usr/local/avr/lib sat�r�n� /etc/ld.so.conf dosyas�na
ekleyin ve ba�lay�c� ge�ici belle�ini yenilemek i�in /sbin/ldconfig
buyru�unu �al��t�r�n.
AVR gcc derleyicisinin y�klenmesi
avr-gcc bizim kullanaca��m�z C derleyicimiz olacak.
Derleyiciyi olu�turup y�klemek i�in a�a��daki buyruklar� verin:
tar jxvf gcc-core-3.4.2.tar.bz2
cd gcc-3.4.2
mkdir obj-avr
cd obj-avr
../configure --target=avr --prefix=/usr/local/avr --disable-nls --enable-language=c
make
# ve root kullan�c�s� olarak:
make install
AVR C k�t�phanesinin y�klenmesi
�imdiki C k�t�phanesi, Mart 2002 yaz�s�nda kulland���mdan daha
sa�lamd�r.
K�t�phaneyi olu�turup y�klemek i�in a�a��daki buyruklar� verin:
tar jxvf avr-libc-1.0.4.tar.bz2.tar
cd avr-libc-1.0.4
PREFIX=/usr/local/avr
export PREFIX
sh -x ./doconf
./domake
cd build
#ve root kullan�c�s� olarak:
make install
Programlay�c� yaz�l�m�n�n y�klenmesi
Programlay�c� yaz�l�m�, �zel haz�rlanm�� nesne kodunu
mikroi�lemcinin EEPROM'una y�klenmesini sa�lamaktad�r.
Linux i�in olan uisp programlay�c�s� �ok iyi bir programlay�c�d�r.
Kendisini Makefile dosyas� i�erisinden do�rudan kullanabilirsiniz.
Yaz�l�m� derleme ve y�klemek i�in yapman�z gereken tek �ey
"make load" kural�n� Makefile dosyas�na eklemek olacakt�r.
uisp a�a��daki gibi y�klenmektedir:
tar jxvf uisp-20040311.tar.bz2.tar
cd uisp-20040311
./configure --prefix=/usr/local/avr
make
# ve root kullan�c�s� olarak:
make install
K���k bir deneme projesi
��e, daha sonra geli�tirebilece�iniz k���k bir deneme devresiyle
ba�layaca��z.
Devreyi, daha karma��k donan�mlar� denemek i�in de kullanabilirsiniz.
Yaz�l�m y�kleme denemesi, alg�lay�c� veya ba�ka �l��m ayg�t�
ekleme gibi i�leri, devre ile kolayca yapabilirsiniz.
Burada vermi� oldu�umuz deneme program� sadece LED'in yan�p s�nmesine
yaramaktad�r.
Mikroi�lemci i�in k���k bir bask� devresi yapman�z� �neririm.
Gerekli donan�mlar
Gerekli par�alar�n listesi a�a��daki tabloda verilmi�tir.
��lemcinin yayg�n kullan�lm�na kar��n, i�lemciyi t�m yerel elektronik
malzemeleri satan d�kkanlarda bulamayabilirsiniz. Almanya'daki
www.conrad.de, Fransa'daki www.selectronic.fr, ABD'deki
digikey.com vs. gibi elektronik malzeme satan b�y�k
da��t�c�lar�n elinde bu mikroi�lemci kesin olarak bulunmaktad�r.
Ayr�ca, t�m par�alar� veya sadece mikroi�lemciyi
shop.tuxgraphics.org adresinden
de elde edebilirsiniz.
1 x ATmega8 DIP s�r�ml�, Atmel 8 bit Avr risc i�lemcisi. |
1 x 28 pin 7.5mm IC socket
28 delikli (pin) socket zor bulunmaktad�r.
28 delikli socket ler genillikle 14mm geni�li�indedir.
Bize ise, 7.5mm geni�li�inde olan� gerekmektedir.
|
Bir adet 10K diren� (Renk kodu: kahverengi, siyah, turuncu)
Bir adet 1K diren� (Renk kodu: kahverengi, siyah, k�rm�z�)
Bir adet 10uF electrolytic kapasit�r
Kablo
Bir adet LED
Delikli matris devresi
|
A�a��daki par�alar programlay�c� i�in gereklidir.
"Linux AVR programming kit" i tuxgraphics ten ald�ysan�z,
gerekli de�il.):
Paralel ba�lant� noktas�na ba�lant� yapmak i�in bir adet DB25
ba�la��.
Programlay�c� i�in 5 bacakl� herhangi bir ba�layici veya socket.
IC socket'lerine benzer olan ba�la�lardan kullanman�z� ve be�
bacakl� olacak �ekilde onu kesmenizi �neririm.
Bir adet 220 Ohm diren� (Renk kodu: k�rm�z�, k�rm�z�, kahverengi)
�� adet 470 Ohm diren� (Renk kodu: sar�, mor, kahverengi)
|
Yukar�dakilerin yan� s�ra, elektronik olarak dengele�tirilen
5V do�ru ak�m kayna��na veya 4.5V pile gereksiniminiz olacakt�r.
Kristale gereksinim duymad���m�z� belki de fark etmi�sinizdir.
Bunun nedeni, ATmega8'in i�inde bir osilat�r�m olmas�d�r.
�ok hassas zamanlama gerekmedi�inde, bu osilat�r kullan�labilir.
E�er, hassas �l�� aletleri yapacaksan�z veya UART/RS232 aray�z�n�
kullanacaks�n�z, bir kristale gereksinim duyacaks�n�z.
Programlay�c� arac�l��� ile sigorta bitlerini ayarlayarak, hangi t�r
osilat�r�n kullan�laca�� tan�mlanabilir. Fabrikadan ayarlanm�� olarak gelen
1Mhz'lik osilat�r �al���r durumdad�r.
Programlay�c� donan�m� olu�turmak
AVR mikroi�lemcileri devredeyken programlanmalar�na izin vermektedir.
(in circuit programming - ISP).
Ba�ka bir deyi�le, mikroi�lemciyi programlamak i�in
devreden ��kartman�za gerek yoktur. �e�itli programlay�c�
aletlerini 50 ila 150 Euro'ya sat�n alabilirsiniz.
Ancak, Linux'unuz varsa, basit ama i�e yarayan bir
programlay�c� olu�turabilirsiniz. A�a��daki kablonun yan� s�ra,
bilgisayar�n�zda bo� bir paralel ba�lant�s�na gereksinim
duyacaks�n�z:
Bu programlay�c� Mart 2002 yaz�s�nda olu�turdu�umuz
programlay�c�dan daha geli�mi�tir. Koruma diren�lerini
programlay�c�n�n i�erisine yerle�tiriyoruz. B�ylece,
devre �zerinde daha fazla bo� yer kalm�� oluryor.
Programlay�c� kablosunun ba�lant�lar� a�a��daki gibi
yap�lmal�d�r:
pcb baca�� |
AVR baca�� |
koruma direnci |
paralel ba�lant�s� baca�� |
5 |
Yenileme (Reset) (1) |
-- |
�lklendirme (Init) (16) |
4 |
MOSI (17) |
470 Ohm |
D0 (2) |
3 |
MISO (18) |
220 Ohm |
Me�kul (Busy) (11) |
2 |
SCK (19) |
470 Ohm |
Strobe (1) |
1 |
GND |
-- |
GND (18) |
Kablo 70 santimetreden daha uzun olmamal�d�r.
Sa�daki resimde de g�sterildi�i gibi, koruma diren�leri
ba�la��n i�ine yerle�tirilebilirler.
Uygulama geli�tirmek
ATmega8 mikroi�lemcisi gcc ve C programlama diliyle programlanabilir.
AVR assembler dilini biraz bilmeniz, size yarar sa�layabilir, ama
gerekli de�ildir.
AVR libc'si t�m C fonksiyonlar�n� anlatan bir
avr-libc kullan�c� k�lavuzuyla PDF (1139921 bytes) birlikte
gelmektedir. Atmel'in sayfas�ndan
(www.atmel.com, avr �r�nleri k�sm�na
-> 8 bit risc-> Datasheets bak�n�z.), t�m verileri indirebilirsiniz.
Orada t�m yazma�lar (register) ile i�lemci kullan�m� anlat�lmaktad�r.
Mikroi�lemciyi kullan�rken akl�n�zda tutman�z gereken �ey, i�lemcinin
sadece birka� byte ge�ici belle�e sahip olmas�d�r.
Ba�ka bir deyi�le, b�y�k veri yap�lar� veya karakter katarlar�
tan�mlamamal�s�n�z. �� i�e girmi� fonksiyon veya �zyinemeli
fonksiyonlar�n program�n�zda kullanmaktan ka��nmal�s�n�z.
Teori yerine ger�ek bir �rnek her zaman i�in daha iyidir.
Yazaca��m�z program, devredeki LED'in 0.5 saniye aral�klarla
yan�p s�nmesini ger�ekle�tirecektir.
Pek kullan��l� bir �rnek de�il, ama ba�lang�� i�in yeterlidir.
avr-libc �ok de�i�ti. Bir ba�lant� noktas� i�in bir biti
bir yapmak i�in sbi ve s�f�r yapmak i�in de cbi fonksiyonlar�
kullan�lmaktad�yd�. �imdi ise, bu fonksiyonlar art�k yok.
Ben ilk �nce "eski g�zel" fonksiyonlar� kullanabilmek i�in
ilgili fonksiyonlar�, makrolar arac�l��� ile tan�ml�yorum:
/* �leriki kullan�mlarda uyumlu olmas� i�in tan�mlanan fonksiyonlar */
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
void main(void)
{
/* INITIALIZE */
/* enable PC5 as output */
sbi(DDRC,PC5);
/* BLINK, BLINK ... */
while (1) {
/* led on, pin=0 */
cbi(PORTC,PC5);
delay_ms(500);
/* set output to 5V, LED off */
sbi(PORTC,PC5);
delay_ms(500);
}
}
A�a��daki �rnek, yeni kullan�mla yaz�lm�� ve ayn� i�i g�rmektedir.
void main(void)
{
/* �lklendirme */
/* PC5 ��k�� olarak ayarla */
DDRC|= _BV(PC5);
/* Yan, s�n, yan s�n ... */
/* PC5, 5 dir (include/avr/iom8.h bak�n�z) ve _BV(PC5), 00100000 d�r.*/
while (1) {
/* led on, pin=0 */
PORTC&= ~_BV(PC5);
delay_ms(500);
/* set output to 5V, LED off */
PORTC|= _BV(PC5);
delay_ms(500);
}
}
Yukar�daki program par�as�, mikroi�lemciyi ne kadar kolay
programlayabilece�inizi g�stermektedir.
Siz sadece ana program k�sm�n� g�r�yorsunuz, delay_ms fonksiyonunu
t�m program
(avrm8ledtest.c) dosyas�ndan elde edebilirsiniz.
PC5 baca��n� ��k�� olarak kullanmak isterseniz,
C (DDRC) ba�lant� noktas� i�in olan ve veri do�rultusundaki yazma�ta
PC5 bitini bir yapman�z gerekir. Bunu yapt�ktan sonra,
PC5 bitini cbi(PORTC,PC5) fonksiyonu ile s�f�r yaparsan�z PC5'e 0V,
PC5 bitini sbi(PORTC,PC5) fonksiyonu ile bir yaparsan�z PC5'e 5V
vermi� olursunuz. PC5'in de�eri io.h taraf�ndan dahil edilen iom8.h
ba�l�k dosyas�nda tan�mlanm��t�r. Dolay�s�yla bunun i�in endi�elenmenize
gerek yoktur. E�er, Linux gibi �ok kullan�c�l� ve �ok i�lemli
sistemler i�in program yazd�ysan�z, sonsuz d�ng�lerinizi bir
bekleme olmaks�z�n yap�lmamas� gerekti�ini biliyorsunuzdur.
Yoksa, i�lemci zaman�n� bo�a kullan�r ve b�ylece sisteminizi
baya�� yava�latm�� olursunuz. AVR i�lemcisinde durum ba�kad�r.
Birden fazla i�lem yok ve �al��an ba�ka bir program da yoktur.
��letim sistemi bile yok. Dolay�s�yla, me�kul d�ng�y� burada kullanmak
gayet do�ald�r.
Derleme ve y�kleme
��e ba�lamadan �nce /usr/local/avr/bin dizinin yoltan�m� i�erisinde yer
ald���ndan emin olun. E�er, gerekiyorsa, .bash_profile veya
.tcshrc dosyas�n� a�a��daki gibi de�i�tirin:
export PATH=/usr/local/avr/bin:${PATH} (bash i�in)
setenv PATH /usr/local/atmel/bin:${PATH} (tcsh i�in)
AVR'yi programlamak i�in uisp ve paralel ba�lant� noktas�n� kullan�yoruz.
Uisp, �ekirde�in ppdev aray�z�n� kullanmaktad�r. Dolay�s�yla,
a�a��daki �ekirdek mod�llerine gereksinim duyacaks�n�z:
# /sbin/lsmod
parport_pc
ppdev
parport
lsmod buyru�u ile mod�llerinin y�kl� olup olmad���n� denetleyin ve
e�er y�kl� de�iller ise, root kullan�c�s� olarak mod�lleri a�a��daki
buyruklarla y�kleyin:
modprobe parport
modprobe parport_pc
modprobe ppdev
Bu buyrukler�n sistem a��l�rken kendili�inde verilmesinde
yarar vard�r. Bunun i�in buyruklar� rc betiklerine (S�zgelimi, RedHat i�in
olan rc beti�i /etc/rc.d/rc.local d�r.) ekleyebilirsiniz.
ppdev aray�z�n� s�radan bir kullan�c� olarak kullanmak istedi�inizde,
root kullan�c�s� bir defa olmak �zere a�a��daki buyrukla size yazma
hakk� vermesi gerekir:
chmod 666 /dev/parport0
Ayr�ca, sisteminizde yaz�c� servisinin �al��mad���ndan da emin olun.
E�er, �al���yorsa, programlay�c� kabloyu kullanmadan �nce onu durdurun.
Programlar�m�z� derlemek ve mikroi�lemcimizi programlamak i�in art�k her �ey
haz�r.
Deneme program�m�z i�in olan
(avrm8ledtest-0.1.tar.gz)
paketinde bir Makefile dosyas� vard�r. Yapman�z gereken tek �ey
a�a��daki buyruklar� vermek:
make
make load
Bunlar, yaz�l�m� derleyip y�kleyecektir. T�m buyruklar�n ayr�nt�s�na
girmeyece�im. Onlar�
Makefile
dosyas� i�erisinde g�rebilirsiniz ve buyruklar hep ayyn�d�r zaten.
Ben bile t�m buyruklar� hat�rlayam�yorum. Tek bilmemem gereken
"make load" buyru�unu vermemdir. E�er, yeni bir program yazmak istiyorsan�z,
Makefile dosyas� i�erisinde avrm8ledtest s�zc���n�, yazd���n�z program ad�yla
de�i�tirmeniz yeterli olacakt�r.
Baz� ilgin� ara�lar
Derleme s�recinden daha ilgin� olan binutils ara�lar�d�r.
Ancak, bu ara�lar Mart 2002'den beri pek de�i�medi.
Daha fazla bilgi i�in
Mart 2002 deki 231 nolu yaz�n�n
"Baz� ilgin� binutils'ler" b�l�m�ne bakabilirsiniz.
D���nce ve �neriler
Bir�ok kullan�m i�in ATmega8 mikroi�lemcisi AT90S4433 ile uyumludur.
D�� osilat�r� kullanabilmek i�in sigorta bitlerini programlaman�z
gerekecektir. �nceden yapm�� oldu�umuz donan�mlar �ok az de�i�iklikler ile
aynen kullan�labilir. Ancak, eski yaz�larda AT90S4433 ile yapm�� oldu�um
devreleri zamans�zl�ktan deneme olana��m ne yaz�k ki olmad�.
E�er, kendinizi sa�lama almak istiyorsan�z, eski devrelerle
AT90S4433 kullan�n. E�er, ben u�ra��r�m ve ��kabilecek sorunlar� seve
seve ��zerim diyorsan�z, eski devreleri ATmega8 ile kullanmay�
deneyebilirsiniz.
Eski yaz�lar�n listesi a�a��da verilmi�tir:
Eski devrelerde devre �zerinde bulunan koruma diren�lerinin,
�imdiki programlay�c� �zerinde oldu�unu unutmay�n. E�er,
programlay�c�y� eski devrelerle kullanmak isterseniz,
devre �zerinde bulunan koruma diren�lerini kablolar
arac�l��� ile devred��� b�rakabilirsiniz.
Kaynak�a