[LinuxFocus-icon]
Ev  |  Eri�imd�zeni  |  ��indekiler  |  Arama

Duyumlar | Belgelikler | Ba�lant�lar | LF Nedir
Bu makalenin farkl� dillerde bulundu�u adresler: English  Castellano  ChineseGB  Deutsch  Francais  Italiano  Nederlands  Russian  Turkce  

convert to palmConvert to GutenPalm
or to PalmDoc

[Photo of the Author]
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

[Illustration]

�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.
[circuit diagram]
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.
[avr] 1 x AT90S4433, Atmel 8 bit Avr risc i�lemcisi.
[socket] 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.
[resistor crystal capacitor] 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
[connector] Programc� i�in herhangi 5 pin connector/socket. Ben genellikle daha uzun olanlar�ndan al�yorum ve 5'lik olarak kesiyorum.
[matrix board] matris devre
[db25] paralel port i�in 1 x DB25 connector.
[led] 1 x LED
[beardboard] 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. [AVR programcý]
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.
 talkback page 

G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Guido Socher, FDL
LinuxFocus.org

Buray� klikleyerek hatalar� rapor edebilir ya da yorumlar�n�z� LinuxFocus'a g�nderebilirsiniz
�eviri bilgisi:
en --> -- : Guido Socher (homepage)
en --> tr: Erdal MUTLU <erdal(at)linuxfocus.org>

2002-03-21, generated by lfparser version 2.27