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]

[Photo of the Author]

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]

[Illustration]

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

[test circuit]
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). [Linux AVR programmer]
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