Kurs AVR-GCC cz.1.pdf

(522 KB) Pobierz
Kurs AVR-GCC
1 Z 16
Spis treści | Następna część kursu
Artykuł ten jest pierwszą częścią internetowego kursu pisania programów w języku C dla
popularnych 8bitowych mikrokontrolerów AVR(AT90, ATmega, ATtiny) firmy ATMEL
z wykorzystaniem darmowego kompilatora AVRGCC(WinAVR).
01.10.2008 Autor:abxyz
Nikogo nie trzeba przekonywać jak bardzo uŜyteczny moŜe być mikroprocesor przy konstruowaniu
wszelkich sprzętów i urządzeń, a w szczególności przy budowie robocików takich, jakie
prezentowane są na naszym forum www.dioda.com.pl . Najwygodniejsze do wykorzystania
są mikrokontrolery, nazywane teŜ mikrokomputerami jednoukładowymi, gdyŜ w jednym takim
układnie scalonym umieszcza się: mikroprocesor, pamięć, porty wejścia/wyjścia oraz całą resztę
potrzebną do działania procesora. Największym udogodnieniem jest wbudowana w strukturę
mikrokontrolera pamięć flash, przeznaczona na programy, którą moŜna łatwo zaprogramować
"w systemie" bez potrzeby uŜywania drogich programatorów. Obecnie, zwłaszcza wśród
hobbystów, najpopularniejsze są 8bitowe mikrokontrolery AVR firmy ATMEL. Pozostaje tylko
jedna trudność, tworzenie programów, nawet najlepszy komputer bez oprogramowania jest
bezuŜyteczny. Do tego wymagana jest znajomość języków programowania
oraz architektury mikrokontrolera. W Internecie moŜna znaleźć wiele materiałów na temat
programowania AVRów, ale kompletnego kursu programowania w języku C dla początkujących
ja nie znalazłem, więc sam zabrałem się do pisanie takiego tekstu. Co do poziomu wiedzy w
tekście, to proszę nie oczekiwać zbyt wiele, jestem jedynie amatorem, hobbystą budującym małe
robotyzabawki, i ten kurs programowania takŜe kierowany jest przede wszystkim do hobbystów,
entuzjastów robotyki.
Kurs. Co i jak ?
Do zrozumienia treści kursu będzie potrzebne niewielkie doświadczenie w dziedzinie
elektroniki, dodatkowo znajomość któregoś z języków programowania
(na przykład Pascala z lekcji informatyki w szkole) znakomicie ułatwi zrozumienie tematu. Będzie
to kurs "praktyczny", przygotuję wiele działających, gotowych do wykorzystania przykładów.
Zaczniemy od zupełnych podstaw, będziemy poznawać język C oraz wewnętrzne zasoby
mikrokontrolerów AVR. Zahaczymy teŜ o asembler, gdyŜ czasem poręczniej jest napisać fragment
programu w asemblerze; dodatkowo pomoŜe to zrozumieć jak działa mikroprocesor.
Będziemy wykorzystywać kompilator języka C (AVRGCC) i programy narzędziowe z pakietu
WinAVR (oprogramowanie całkowicie darmowe). Przykładowe programy będą pisane
z przeznaczeniem głównie dla układów ATmega (ATmega8 i ATmega16).
214668302.010.png
2 Z 16
Układy ATmega8 i ATmega16 w obudowach do montaŜu przewlekanego.
Do testowania przykładów z kursu polecam płytkę stykową, ja będę uruchamiał przykładowe
programy na takiej małej, jak na zdjęciu poniŜej. Płytki stykowe to wspaniały wynalazek, niestety
nie są tanie, dlatego wybrałem małe płytki, w razie potrzeby moŜna łączyć ze sobą dwie i więcej
takich płytek.
Mała płytka stykowa.
Przewody do połączeń na płytce stykowej moŜna wykonać rozcinając kawałek skrętki
komputerowej.
śyły przewodów z rozciętej skrętki komputerowej doskonale nadają się do robienia połączeń na płytce stykowej.
214668302.011.png 214668302.012.png 214668302.013.png
3 Z 16
Jednak przy bardziej rozbudowanych projektach lepiej lutować części elektroniczne na płytce
uniwersalnej. Ja będę uŜywał takiej, jaką widać zdjęciu poniŜej.
Płytka uniwersalna
Zdecydowanie nie warto na potrzeby tego kursu wykonywać płytkę pcb, czy kupować zestaw
(płytkę startową) z mikrokontrolerem AVR. Natomiast warto kupić gotowy programator
AVR ISP, napiszę o tym dalej.
Warto teŜ postarać się o jakoś ksiąŜkę z kompletnym, szczegółowym opisem języka C. Ja polecam
ksiąŜkę: "Język ANSI C" autorzy: Brian W. Kernighan, Dennis M. Ritchie.
Mój egzemplarz ksiąŜki "Język ANSI C" kupiony okazyjnie z kartonu na bazarze. Obecnie ksiąŜka sprzedawana jest
w innej okładce.
Głównym źródłem informacji o układach AVR jest oczywiście strona producenta
http://www.atmel.com/products/AVR/
a na temat kompilatora avrgcc, strona biblioteki "avrlibc"
http://www.nongnu.org/avrlibc/
Pamięć dla programu i danych
214668302.001.png 214668302.002.png 214668302.003.png
4 Z 16
Zacznę od tematu pamięci wewnętrznej (pamięci
wbudowanej w strukturę układów AVR). Za kaŜdym
razem, gdy uruchamia się jakąś aplikacje na komputerze
PC, to programy przed uruchomieniem ładowane są
z twardego dysku do pamięci operacyjnej RAM komputera.
W przypadku mikrokontrolerów AVR kod programu
umieszczany jest na stałe w wewnętrznej pamięci FLASH.
Pamięć FLASH jest pamięcią nieulotną, jej zawartość nie
zanika w chwili odłączenia zasilania, jak to jest w przypadku
pamięci RAM, lecz pozostaje niezmieniona do momentu
ponownego zaprogramowania. Programować FLASH
mikrokontrolerów AVR, to znaczy skasować aktualną
zawartość pamięci i zapisać nową, moŜna około 10000
razy, tyle powinien układ przetrwać, potem pozostaje
wymienić układ na nowy. W pamięci FLASH mikrokontrolera
oprócz kodu programu umieszcza się takŜe wartości stałe
w programie, a zwłaszcza duŜe tablice stałych oraz
teksty ciągi znaków, na przykład komunikaty wysyłane do
wyświetlacza alfanumerycznego. Dalej w tekście zamiast
przydługiego słowa "mikrokontroler" będę uŜywał skrótu
"uC".
Oczywiście zmienne w programie tworzone są w pamięci RAM, mikrokontrolery AVR posiadają
takŜe wbudowaną pamięć SRAM (ang. static RAM). Dodatkowo uC AVR wyposaŜone są
w pamięć EEPROM, program moŜe zapisywać do tej pamięci dane, które powinny przetrwać
wyłączenie urządzenia (ustawienia). Do pamięci EEPROM uC AVR dane zapisywać moŜna około
100000 razy, tyle według dokumentacji powinien układ przetrwać. PoniŜej w tabeli wypisałem ile
pamięci FLASH, SRAM i EEPROM posiadają uC AVR, których będziemy uŜywać. Nie są to
gigabajty, warto o tym pamiętać pisząc programy i oszczędnie wykorzystywać pamięć AVRka.
Programator AVR ISP
A w jaki sposób załadujemy nasz program do pamięci FLASH AVRra i dane do pamięci
EEPROM? Jest kilka moŜliwości, najłatwiej jest zaprogramować pamięć AVRka poprzez interfejs
SPI. Do tego celu potrzebny jest specjalny adapter (nazywany programatorem AVR ISP). Z Jednej
strony programator AVR ISP przyłącza się do komputera PC poprzez któryś z portów:
USB, LPT, RS, a z drugiej strony programator łączy się z uC AVR na płytce kablem zakończonym
odpowiednim złączem. Właśnie skrót ISP (ang.In System Programming) oznacza programowanie
w układzie, czyli moŜliwość programowania uC bez konieczności wyjmowania go z urządzenia
w którym pracuje.
214668302.004.png 214668302.005.png 214668302.006.png
5 Z 16
Programowanie w układzie (w systemie)
Programator AVR ISP moŜna wykonać samemu według schematu z Internetu lub kupić gotowy. Na
fotografiach poniŜej widać dwa "kupne" programatory AVR ISP; pierwszy przyłączany do portu
równoległego (LPT) komputera PC, drugi do portu USB.
Programator AVR ISP przyłączany do portu LPT komputera
214668302.007.png 214668302.008.png 214668302.009.png
Zgłoś jeśli naruszono regulamin