taraf�ndan Guido Socher (homepage)
Yazar hakk�nda:
Guido, L�nux'u sadece i�letim sistemlerinin nas�l �al��t���n�
��renmenin ilgin� oldu�u i�in de�il, ayn� zamanda onu tasarlayan ki�iler
y�z�nden sevmektedir.
T�rk�e'ye �eviri:
Erdal MUTLU <erdal(at)linuxfocus.org>
��erik:
|
AVR Mikroi�lemcisini GCC ile programlamak
�zet:
Atmel firmas�n�n AVR 8-Bit RISC Mikroi�lemcisi �ok yayg�n
bir mikroi�lemcidir. Tek bir �ipte EEPROM, Ram, Analog'dan Digital'e
�evirici, bir�ok digital giri� ve ��k�� hat�, zamanlay�c�lar, RS 232
haberle�mesi i�in UART ve daha fazlas�na sahiptir.
En iyisi ise, Linux i�in tam bir uygulama geli�tirme ortam�na
sahip olmas�d�r: Bu mikroi�lemciyi C ve GCC kullanarak
programlayabilirsiniz. Bu yaz�da GCC nas�l y�klenip kullan�laca��
anlat�lacakt�r. Ayr�ca, yaz�l�m�n Mikroi�lemciye nas�l
y�klenece�i de anlat�lacakt�r. Sahip olman�z gerek �eyler,
AT90S4433 Mikroi�lemcisi, 4MHz kristal, kablo ve birka�
ucuz par�a daha.
Bu yaz� sadece giri� seviyesinde olacakt�r. Daha sonraki yaz�da,
tu�lar�, digital ve analog giri�leri, LED'leri olan bir LCD
ekran olu�turaca��z. Oradaki d���nce, Linux i�in genel ama�l�
bir denetim paneli olu�turmak olacakt�r. Ancak ilk �nce, bu yaz�n�n amac� olan
uygulama geli�tirme ortam�n� y�klemeyi ��renelim.
|
Yaz�l�mn y�klenmesi: Gereksinimler
GNU C uygulama geli�tirme ortam�n� kullanmak i�in a�a��daki
yaz�l�mlara gereksinim vard�r:
binutils-2.11.2.tar.bz2 |
ftp://ftp.informatik.rwth-aachen.de/pub/gnu/binutils/
veya
ftp://gatekeeper.dec.com/pub/GNU/binutils/ adresinden elde
edilebilir. |
gcc-core-3.0.3.tar.gz |
ftp://ftp.informatik.rwth-aachen.de/pub/gnu/gcc/
veya
ftp://gatekeeper.dec.com/pub/GNU/gcc/ adresinden elde edilebilir. |
avr-libc-20020106 .tar.gz |
AVR C-k�t�phanesi:
http://www.amelek.gda.pl/avr/libc/ veya
yaz�l�m sayfas� adresinden
elde edilebilir. |
uisp-20011025.tar.gz |
AVR programc�s�:
http://www.amelek.gda.pl/avr/libc/
veya yaz�l�m sayfas�
adresinden elde edilebilir. |
T�m programlar� /usr/local/atmel dizinine y�kleyece�iz. Bunun nedeni,
program� C derleyicinizden ayr� tutmakt�r. Dizini a�a��daki komut ile
yarat�n�z:
mkdir /usr/local/atmel
Yaz�l�m y�klenmesi: GNU binutils
Bu yaz�l�m, nesne dosyalar� olu�turmak i�in gerekli
alt seviye her�eye
sahiptir. AVR assembler'i (avr-as), ba�lay�c�y� (avr-ld),
k�t�phane ara�lar�n� (avr-ranlib, avr-ar),
Mikroi�lemcinin EEPROM'una y�klenmesine olanak verek
nesne dosyalar� olu�turan programlara (avr-objcopy),
disassembler'a (avr-objdump) ve avr-strip ve avr-size
gibi uygulamalara sahiptir.
binutils y�klemek i�in a�a��daki komutlar� �al��t�r�n:
bunzip2 -c binutils-2.11.2.tar.bz2 | tar xvf
-
cd binutils-2.11.2
./configure --target=avr --prefix=/usr/local/atmel
make
make install
/usr/local/atmel/lib sat�r�n� /etc/ld.so.conf dosyas�na
ekleyin ve ba�lay�c� cache'ini g�ncellemek i�in /sbin/ldconfig
komutunu �al��t�r�n.
Yaz�l�m y�klenmesi: AVR gcc
avr-gcc bizim C derleyicimiz olacakt�r.
Y�klemek i�in a�a��daki komutlar� �al��t�r�n:
tar zxvf gcc-core-3.0.3.tar.gz
cd gcc-core-3.0.3
./configure --target=avr --prefix=/usr/local/atmel
--disable-nls --enable-language=c
make
make install
Yaz�l�m y�klenmesi: AVR C-k�t�phanesi
C-k�t�phanesi hala geli�tirilme a�amas�ndad�r. Bu y�zden
y�kleme i�lemleri s�r�mden s�r�me de�i�iklik g�sterebilir.
E�er, buradaki y�kleme ad�mlar�n� izlemek istiyorsan�z,
yukar�daki tabloda yer alan s�r�m� kullanman�z� tavsiye
ederim. Ben bu s�r�m� denedim ve bu ve bundan sonraki
yaz�lar i�in yaz�lm�� t�m programlar sorunsuz �al��maktad�r.
Birka� �evre de�i�kenin ayarlanmas� gereklidir
(yaz�m�ekli bash kabu�u i�in):
export CC=avr-gcc
export AS=avr-as
export AR=avr-ar
export RANLIB=avr-ranlib
export PATH=/usr/local/atmel/bin:${PATH}
./configure --prefix=/usr/local/atmel --target=avr
--enable-languages=c --host=avr
make
make install
Yaz�l�m y�klenmesi: Programc�
Programc� yaz�l�m� Mikroi�lemcinin EEPROM'una
�zel haz�rlanm�� nesne dosyalar�n� y�klemek i�in
kullan�lmaktad�r.
Linux i�in olan uisp programc� yaz�l�m� �ok iyi bir yaz�l�md�r ve
Makefile i�erisinden do�rudan kullan�labilir.
Tek yap�lmas� gereken "make load" kural�n� eklemek ve
yaz�l�m�n derlenmesi ve y�klenmesi tek bir ad�mda ger�ekle�ecektir.
uisp a�a��daki gibi y�klenmektedir:
tar zxvf uisp-20011025.tar.gz
cd uisp-20011025/src
make
cp uisp /usr/local/atmel/bin
K���k bir deneme projesi
K���k bir deneme devresi ile ba�layaca��z.
Bu devrenin amac� yaz�l�m� denetlemek olacakt�r.
Bunu program� derlemede, y�klemede ve denetlemede
kullanaca��z. Program�n yapaca�� tek �ey LED'in yan�p s�nmesini
sa�lamak.
Ben Mikroi�lemci i�in k���k bir bask� devre kullanman�z� �neririm.
Daha sonra, kendi deneyleriniz i�in bu bask� devresini geni�letebilirsiniz.
Bunu i�in breadboard kullanmak iyi fikir olabilir.
Ancak, AVR ve 4MHz kristali breadboard �zerine koymaya
�al��mamal�s�n�z. Giri� ve ��k��lar i�in
k�sa kablolar kullanabilirsiniz, ��nk� breadboard'lar
h�zl� digital bilgi al��veri�leri i�in tasarlanmam��lard�r.
4MHz kristal ve kondanst�rler, Mikroi�lemciye yak�n olmal�d�r.
Programc� i�in ba�lay�c�daki diren�lere �u an gereksinimimiz yok.
Onlara sadece, B ba�lant� noktas�n�n giri�/��k�� hatlar�n�
ba�ka ama�lar i�in kullanacaksan�z gereksiniminiz olacakt�r.
Gerekli donan�mlar
A�a��daki tabloda yer alan par�alara gereksiniminiz olacakt�r.
Hepsi de kolay bulunabilen ve olduk�a ucuz par�alard�r.
Bir tek Mikroi�lemci biraz pahal�d�r, 7.50 Euro civar�nda.
S�k kullan�lan bir mikroi�lemci olmas�na kar��n, her elektronik
malzemesi satan d�kkanda bulunamayabilir, ancak www.reichelt.de (germany),
www.conrad.de (germany), www.selectronic.fr (france) gibi
b�y�k da��t�c�larda (Sizin �lkenizde de benzer y�reler olabilir.)
mutlaka vard�r.
|
1 x AT90S4433, Atmel 8 bit Avr risc i�lemcisi. |
|
2 x 14 pin IC socket
veya
1 x 28 pin 7.5mm IC socket
28 pin socket bulmak biraz daha zordur.
Genellikle,
28 socket 14mm geni�li�indedir, ancak bize 7.5mmm geni�li�indeki
olan gereklidir.
|
|
1 x 10K diren� (renk kodu: kahverengi,siyah,turuncu)
3 x 470 Ohm diren� (renk kodu: sar�, mor, kahverengi)
1 x 1K diren� (renk kodu: kahverengi, siyah, k�rm�z�)
1 x 220 Ohm diren� (renk kodu: k�rm�z�, k�rm�z�, kahverengi)
1 x 4Mhz kristal
2 x 27pf seramik kondansat�r |
|
Programc� i�in herhangi 5 pin connector/socket.
Ben genellikle daha uzun olanlar�ndan al�yorum ve 5'lik
olarak kesiyorum.
|
|
matris devre |
|
paralel port i�in 1 x DB25 connector. |
|
1 x LED |
|
Breadboard. Biz burada bunu kullanmayaca��z,
ancak AVR ile ilgili ba�ka deneyler yapacaksan�z,
olduk�a i�inize yarayacakt�r.
Ben, Mikroi�lemci ile kristali matris devresi �zerinde
b�rakman�z� ve giri�/��k�� hatlar�n� k�sa kablolar ile
breadboard'a ba�laman�z� �neririm.
|
Yukar�dakilere ek olarak 5V'luk do�ru ak�m g�� kayna��na
gereksiniminiz olacakt�r. Onun yerine 4.5V'luk pil de kullanabilirsiniz.
Programc� donan�m�n� yap�land�rmak
AT90S4433 devre i�i programlamaya (ISP �n circuit programming) yaramaktad�r.
Yani, Mikroi�lemciyi programlamak i�in devreden ��kartman�za
gerek yoktur.
Programc� donan�m�n� 50 ila 150 Euro aras�nda haz�r olarak
sat�ld���n� g�receksiniz. Bu kadar para harcaman�za gerek yoktur.
Linux, uisp yaz�l�m� ve paralel port ile kolayca bir AVR programc�s�
olu�turabilirsiniz.Basit bir kablodur. Programc� i�in kabloyu a�a��daki �ekilde
ba�lay�n�z:
AVR'deki u� |
paralel porttaki u� |
SCK (19) |
Strobe (1) |
MISO (18) |
Busy (11) |
MOSI (17) |
D0 (2) |
Reset (1) |
Init (16) |
GND |
GND (18) |
kablo 70cm den daha uzun olmamal�d�r.
Yaz�l�m yazmak
AT90S4433 gcc'nin de yard�m�yla C de programlanabilir.
Biraz AVR assembler bilmek yararl� olabilir, ancak gerekli de�ildir.
AVR libc k�t�phanesi
avr-libc-reference
ile birlikte gelmektedir ve burada fonksiyonlar ile ilgili a��klamalar
yer almaktad�r. Harald Leitner AVR'yi GCC ile nas�l kullan�laca��na dair
bir�ok �rne�in yer ald��� belge yazm��t�r (
haraleit.pdf,
286Kb, ger�e�ini
http://www.avrfreaks.net/AVRGCC/
adresinden bulabilirsiniz.).
Atmel'in sanaldoku y�resinden
(www.atmel.com avr products
-> 8 bit risc-> Datasheets k�sm�na bak�n.),
t�m�n�
(yerel kopya: avr4433.pdf,
2361Kb) dan indirebilirsiniz.
T�m registerleri ve M�B (CPU) n�n nas�l kullan�laca��n�
anlat�lmaktad�r.
4433'yi kullan�rken unutmaman�z gereken �ey, sadece 128 Byte belle�e
4K'l�k EEPROM'a sahip oldu�udur.
Bunun anlam� b�y�k veri yap�lar� ve karakter dizileri
tan�mlamaman�z gerekti�idir. Program�z, i�i i�e ge�mi� veya �zyinelemeli fonksiyonlar
kullanmamal�d�r.
char string[90];
gibi tan�mlama yapmak �ok fazla bellek gerektirir. Integer 16 bittir.
E�er, daha k���k tamsay�ya gereksiniminiz varsa,
unsigned char i; /* 0-255 */
kullan�n�z. Ancak, ne kadar b�y�k programlar yazabilece�inizi
g�rd���n�zde �ok �a��racaks�n�z. Ger�ekten m�thi� bir
i�lemcidir!
T�m teoriden daha iyisi ger�ek bir �rnektir. 0.5 saniye ar�laklarla
yan�p s�nen bir LED i�in bir program yazaca��z.
Pek kullan��l� de�il, ancak ba�lamak ve yaz�l�m geli�tirme
ortam�n� ile programc�y� s�namak i�in yeterlidir.
void main(void)
{
/* enable PD5 as output
*/
sbi(DDRD,PD5);
while (1) {
/*
led on, pin=0 */
cbi(PORTD,PD5);
delay_ms(500);
/*
set output to 5V, LED off */
sbi(PORTD,PD5);
delay_ms(500);
}
}
Yukar�daki program par�as�ndan, ne kadar kolay yaz�ld���n�
g�r�yorsunuz. G�rd���n�z sadece ana programd�r, delay_ms fonksiyonu
t�m program
(avrledtest.c) da g�receksiniz.
PD5 ucunu ��k�� olarak kullanmak istiyorsan�z,
D (DDRD) ba�lant� noktas� i�in olan PD5 bitini ayarlaman�z (a�man�z)
gerekecektir. Daha sonra,
PD5'i cbi(PORTD,PD5) (5 biti kapat) fonksiyonu ile 0V'a veya
sbi(PORTD,PD5) (PD5 a�) fonksiyonu ile 5V'a
ayarlayabilirsiniz. "PD5"'in de�eri io.h dan �a�r�lan io4433.h'de tan�mlanm��t�r.
Bunun i�in endi�elenmenize gerek yoktur. E�er, Linux gibi
�ok kullan�c�l�/s�re�li ortamlar i�in programlar yazd�ysan�z,
sonsuz d�g�l� program yazman�n pek akk�l�ca bir i� olmad���n� ve
�ok fazla M�B zaman� gerekti�ini ve sisteminizi yava�latt���n�
bilirsiniz. Ancak, bizin birden fazla s�recimiz yok ve ba�ka �al��an
program�m�z da yok. Hatta �al��an bir i�letim sistemi
bile yok. Dolay�s�yla sonsuz d�ng� kullanmak normaldir.
Derleme ve y�kleme
make'i �al��t�rmadan �nce /usr/local/atmel/bin nin
yoltan�m�n�zda oldu�undan emin olunuz. E�er, isterseniz
.bash_profile veya .tcshrc dosyalar�nda a�a��daki gibi
de�i�iklikler yapabilirsiniz:
export PATH=/usr/local/atmel/bin:${PATH} (for
bash)
setenv PATH /usr/local/atmel/bin:${PATH} (for tcsh)
Paralel port ve uisp'yi AVR'yi programlamak i�in kullan�yoruz.
Uisp �ekirde�in ppdev aray�z�n� kullanmaktad�r.
Dolay�s�yla a�a��daki �ekirdek mod�llerine gereksinim vard�r:
# /sbin/lsmod
parport_pc
ppdev
parport
/sbin/lsmod komutuyla, mod�llerin y�klenip y�klenmedi�ini
denetleyiniz. E�er, y�klenmemi� iseler, root olarak a�a��daki
komutlar� kullanarak mod�lleri y�kleyiniz:
modeprobe parport
modeprobe parport_pc
modeprobe ppdev
Bu komutlar� bilgisayar�n a��l���nda otomatik olarak �al��t�rmak
iyi bir fikir olabilir. Bu komutlar� rc kabuk program�na ekleyebilirsiniz
RedHat de /etc/rc.d/rc.local).
ppdev aray�z�n�, normal kullan�c� olarak kullanabilmek i�in,
bir defaya mahsus olarak root kullana�c�s� olarak a�a��daki komut ile hak
vermeniz gerekmektedir:
chmod 666 /dev/parport0
Ayr�ca, yaz�c� daemon'un paralel portta �al��mad���ndan emin olunuz.
�al���yorsa, programc� kablosunu ba�lamadan �nce onu durdurunuz.
�imdi, Mikroi�lemciyi programlamak i�in gerekli her�eye sahibiz.
Program�m�z�n ar�iv dosyas�nda (avrledtest-0.1.tar.gz)
make dosyas� vard�r. Yapman�z gereken yaln�zca:
make
make load
komutlar�n� �al��t�rmakt�r.
Bunlar yaz�l�m� derleyecektir. T�m komutlar� ayr�nt�l� olarak
anlatmayaca��m.
Makefile
adresinden g�rebilirsiniz. Ben de zaten hepsini hat�rlayam�yorum.
Ba�ka bir program yazmak istiyorsan�z, tek yapman�z gereken,
avrledtest ge�en yerlere kendi program isminizi yazman�zd�r.
Baz� ilgin� binutils'ler
Derleme s�recinden daha ilgin� olan baz� binutils'ler dir:
avr-objdump -h avrledtest.out
Komutu, program�m�zdaki farkl� b�l�mlerin boyutlar�n�
g�stermektedir. .text komut k�sm�d�r ve flash EEPROM'a y�klenmektedir.
.data
static char str[]="hello";
ilk de�eri atanm�� veriler ve .bss ilk de�eri atanmam��
verilerin i�erildi�i k�s�md�r.
Bizim �rne�imizde ikisi de s�f�rd�r. .eeprom eeprom'da
tutulan de�i�kenler i�indir. Ancak, ben bunu hi� kullanmad�m.
stab ve stabstr hata ay�klamak i�indir ve AVR'ye y�klenmeyecektir.
avrledtest.out: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000008c 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000000 00800060 0000008c 00000120 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 00800060 0000008c 00000120 2**0
ALLOC
3 .eeprom 00000000 00810000 00810000 00000120 2**0
CONTENTS
4 .stab 00000750 00000000 00000000 00000120 2**2
CONTENTS, READONLY, DEBUGGING
5 .stabstr 000005f4 00000000 00000000 00000870 2**0
CONTENTS, READONLY, DEBUGGING
Tabii ki avr-size komurunu kullanarak daha s�k��t�r�lm�� halini
elde edebilirsiniz:
avr-size avrledtest.out
text data bss dec hex filename
140 0 0 140 8c avrledtest.out
AVR ile �al���rken text+data+bss nin 4K'y�
ve data+bss+stack (stack'�n boyutunu g�rmenize imkan yoktur,
��nk� kulland���n�z i� i�e olan fonksiyonlara ba�l�d�r)
128 Byte'� ge�memesine dikkat etmeniz gerekmektedir.
Bir de a�a��daki komut �ok ilgin�tir:
avr-objdump -S avrledtest.out
Bu komut program�n assembler kodunu yaratacakt�r.
Sonu�
�imdi art�k AVR don�m� ve GCC ile kendi projelerinizi
ba�latacak yeteri kadar bilgiye sahipsiniz.
Tabii ki LinuxFocus'ta daha ilgin� ve karma��k projeleri anlatan
yaz�lar olacakt�r.
Kaynaklar
Bu yaz� i�in g�r�� bildiriminde bulunabilirsiniz
Her yaz� kendi g�r�� bildirim sayfas�na sahiptir. Bu sayfaya yorumlar�n�z� yazabilir ve di�er okuyucular�n yorumlar�na bakabilirsiniz.
2002-03-21, generated by lfparser version 2.27