Kurs AVR1 2 3, Elektronika i programowanie
[ Pobierz całość w formacie PDF ]Artykuł ten jest pierwszą częścią internetowego kursu pisania programów w języku C dla popularnych 8-bitowych mikrokontrolerów AVR(AT90, ATmega, ATtiny) firmy ATMEL z wykorzystaniem darmowego kompilatora AVR-GCC(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 .
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ą 8-bitowe 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 roboty-zabawki, 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 (AVR-GCC) 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).
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.
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.
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
a na temat kompilatora avr-gcc, strona biblioteki "avr-libc"
Pamięć dla programu i danych
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ęć AVR-ka.
Programator AVR ISP
A w jaki sposób załadujemy nasz program do pamięci FLASH AVR-ra i dane do pamięci EEPROM? Jest kilka możliwości, najłatwiej jest zaprogramować pamięć AVR-ka 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.
Programowanie w układzie (w systemie)
...
[ Pobierz całość w formacie PDF ]