Jz yk C dla mikrokontrolerów AVR. Od podstaw do ... · Id do Spis trec i Przyk adowy rozdzia Skorowidz Katalog online Dodaj do koszyka Zamów cennik Zamów informacje o nowociach
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Rozdzia� 1. Instalacja �rodowiska i potrzebnych narz�dzi ................................... 15Instalacja WinAVR ........................................................................................................ 16Instalacja AVR Studio .................................................................................................... 17Systemy GNU/Linux ...................................................................................................... 18AVR Studio .................................................................................................................... 19
Pierwsza aplikacja .................................................................................................... 21Dodawanie plików do projektu ................................................................................ 25
Biblioteki ........................................................................................................................ 46Projekt biblioteki ...................................................................................................... 47Tworzenie biblioteki ................................................................................................ 48Do��czanie biblioteki do programu .......................................................................... 49Funkcje „przestarza�e” ............................................................................................. 50Nadpisywanie funkcji bibliotecznych ....................................................................... 50Usuwanie niepotrzebnych funkcji i danych .............................................................. 51
Problemy .................................................................................................................. 55Programatory ISP ........................................................................................................... 55
Budowa programatora .............................................................................................. 56Programator USBASP .............................................................................................. 59Kilka procesorów w jednym uk�adzie ...................................................................... 59
4 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
Kilka procesorów w jednym uk�adzie ...................................................................... 62AVR Dragon ............................................................................................................ 63
Programatory HW i równoleg�e ...................................................................................... 63Tryb TPI ......................................................................................................................... 64Programowanie procesora w AVR Studio ...................................................................... 64Programowanie przy pomocy narz�dzi dostarczonych przez firm� Atmel ..................... 65Program AVRDUDE ...................................................................................................... 67Program PonyProg .......................................................................................................... 70Fusebity i lockbity w AVR-libc ...................................................................................... 70
Funkcje ......................................................................................................................... 112Przekazywanie parametrów przez warto�� i referencj� .......................................... 114Wywo�anie funkcji ................................................................................................. 114Rekurencyjne wywo�ania funkcji ........................................................................... 115
Rozdzia� 4. Sekcje programu .......................................................................... 141Sekcje danych ............................................................................................................... 142
Sekcje zawieraj�ce kod programu ................................................................................ 144Podsekcje .init[0-9] ................................................................................................ 144Podsekcje .fini[0-9] ................................................................................................ 145
Sekcje specjalne ............................................................................................................ 146Sekcje tworzone przez programist� .............................................................................. 146Umieszczanie sekcji pod wskazanym adresem ............................................................. 147
Rozdzia� 5. Kontrola rdzenia i zarz�dzanie poborem energii .............................. 149�ród�a sygna�u RESET ................................................................................................. 149
Wycieki pami�ci i b��dne uycie pami�ci alokowanej dynamicznie ............................ 169Jak dzia�a alokator ........................................................................................................ 171Wykrywanie kolizji sterty i stosu ................................................................................. 172
Metoda I — w�asne funkcje alokuj�ce pami�� ....................................................... 173Metoda II — sprawdzanie ilo�ci dost�pnej pami�ci ............................................... 173Metoda III — marker ............................................................................................. 173Metoda IV — wzór w pami�ci ............................................................................... 173Metoda V — wykorzystanie interfejsu JTAG ........................................................ 176
Odczyt zawarto�ci komórki pami�ci ...................................................................... 180Zapis do komórki pami�ci ...................................................................................... 180
Dost�p do EEPROM z poziomu AVR-libc ................................................................... 181Deklaracje danych w pami�ci EEPROM ................................................................ 182Funkcje realizuj�ce dost�p do pami�ci EEPROM .................................................. 183Inne funkcje operuj�ce na EEPROM ...................................................................... 185
Techniki wear leveling ................................................................................................. 186
Rozdzia� 8. Dost�p do pami�ci FLASH ............................................................ 189Typy danych zwi�zane z pami�ci� FLASH .................................................................. 190Odczyt danych z pami�ci FLASH ................................................................................ 191Dost�p do pami�ci FLASH >64 kB .............................................................................. 192
6 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
Rozdzia� 9. Interfejs XMEM ............................................................................ 193Wykorzystanie zewn�trznej pami�ci SRAM w programie ........................................... 197
Konfiguracja I — w pami�ci zewn�trznej jest tylko sekcja specjalna .................... 198Konfiguracja II — wszystkie sekcje w pami�ci zewn�trznej,
stos w pami�ci wewn�trznej ................................................................................ 199Konfiguracja III — w pami�ci zewn�trznej umieszczona jest tylko sterta ............. 201Konfiguracja IV — w pami�ci zewn�trznej sterta i segment zdefiniowany
przez programist� ................................................................................................ 202Konfiguracja V — w pami�ci zewn�trznej znajduje si� stos .................................. 208Pami�� ROM jako pami�� zewn�trzna ................................................................... 208
Rozdzia� 10. Dost�p do 16-bitowych rejestrów IO ............................................. 211Dost�p do 16-bitowego rejestru ADC ........................................................................... 211Dost�p do 16-bitowych rejestrów timerów ................................................................... 213
Zmiana stanu portu na przeciwny ........................................................................... 225Ustawianie linii IO ................................................................................................. 226Zerowanie linii IO .................................................................................................. 226Makrodefinicja _BV() ............................................................................................ 227Uycie pól bitowych ............................................................................................... 227
Miernik cz�stotliwo�ci i wype�nienia ........................................................................... 323Realizacja RTC przy pomocy timera ............................................................................ 326
Po��czenie mikrokontroler – komputer PC ............................................................. 375RS485 ..................................................................................................................... 383
8 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
Bity START i STOP .............................................................................................. 417Podstawowe funkcje do wspó�pracy z I2C ............................................................. 418Wspó�praca z zewn�trzn� pami�ci� EEPROM ....................................................... 422Wspó�praca z zewn�trzn� pami�ci� FRAM ............................................................ 427Umieszczanie zmiennych w zewn�trznej pami�ci EEPROM ................................. 427Wspó�praca z zegarem RTC ................................................................................... 431Obs�uga ekspandera IO PCF8574 ........................................................................... 436
Procesor w trybie I2C slave .......................................................................................... 437Przyk�ad ................................................................................................................. 440
Rozdzia� 22. Interfejs USI ................................................................................. 4474-bitowy licznik i zegar ................................................................................................ 447Przerwania USI ............................................................................................................. 448Zmiana pozycji pinów .................................................................................................. 449Wykorzystanie interfejsu USI w trybie SPI .................................................................. 449
Tryb SPI master ...................................................................................................... 451Tryb SPI slave ........................................................................................................ 452
Rozdzia� 23. Interfejs USB ............................................................................... 453Zasilanie ....................................................................................................................... 454Sygna�y danych ............................................................................................................ 455VID i PID ..................................................................................................................... 456Interfejs USB realizowany przy pomocy konwertera ................................................... 458Interfejs USB realizowany programowo ...................................................................... 459
Po��czenie elektryczne ........................................................................................... 460Dost�p na PC .......................................................................................................... 460Programowy interfejs USB na AVR ...................................................................... 461
Sprz�towy interfejs USB .............................................................................................. 464
Realizacja master 1-wire przy pomocy pinów IO ................................................... 469Realizacja master 1-wire przy pomocy interfejsu USART ..................................... 472Wysokopoziomowe funkcje obs�ugi 1-wire ........................................................... 477
Start bootloadera ........................................................................................................... 496Wykorzystanie dodatkowego przycisku/zworki ..................................................... 496Wykorzystanie markerów w pami�ci EEPROM .................................................... 497Oczekiwanie na specjalny znak w wybranym kanale komunikacji ........................ 498Start aplikacji ......................................................................................................... 499
Wspó�dzielenie kodu aplikacji i bootloadera ................................................................ 499Wywo�ywanie funkcji bootloadera w procesorach ATMega256x .......................... 501Wywo�ywanie funkcji obs�ugi przerwa zawartych w kodzie bootloadera ............ 505Wspó�dzielenie zmiennych pomi�dzy aplikacj� a bootloaderem ........................... 505
Mikrokontrolery AVR z wbudowanym bootloaderem ................................................. 507
Rozdzia� 26. Kontrola integralno�ci programu ................................................... 509Suma kontrolna ............................................................................................................. 509CRC .............................................................................................................................. 511Automatyczne generowanie CRC ................................................................................. 514
Rozdzia� 28. �czenie kodu w C i asemblerze ................................................... 529S�owo kluczowe asm .................................................................................................... 530
Typy operandów ..................................................................................................... 531Dost�p do portów IO .............................................................................................. 533Dost�p do danych wielobajtowych ......................................................................... 533Dost�p do wska�ników ........................................................................................... 534Lista modyfikowanych rejestrów ........................................................................... 535Wielokrotne uycie wstawki asemblerowej ........................................................... 535
Rozdzia� 29. Optymalizacja i debugowanie programu ......................................... 543Optymalizacja programu .............................................................................................. 543
Opcje kompilatora zwi�zane z optymalizacj� ........................................................ 545Atrybuty optymalizacji ........................................................................................... 548
Debugowanie programu ............................................................................................... 551Rozpocz�cie sesji debugera .................................................................................... 553Zaawansowane sterowanie przebiegiem wykonywanej aplikacji ........................... 556
Po wygenerowaniu plików wynikowych naley ich zawarto�� umie�ci� w pami�ci mikro-kontrolera. Dzi�ki temu po restarcie procesor b�dzie móg� rozpocz�� wykonywanieprogramu. Procesory AVR dysponuj� moliwo�ci� programowania „w uk�adzie” przypomocy interfejsu ISP, cz��� moe by� programowana poprzez interfejsy JTAG,debugWire, PDI, TPI, a w przypadku procesorów posiadaj�cych interfejs USB monatake programowa� procesor poprzez wbudowany bootloader. W tym ostatnim przy-padku nie da si� jednak zmienia� konfiguracji fusebitów. Kada z metod programowaniama swoje zalety i wady.
Pod��czenie — uwagi ogólneKady programator ��czy si� z uk�adem docelowym przy pomocy dedykowanych wypro-wadze. Dla programatorów szeregowych jest to zwykle 4 – 5 wyprowadze, dla rów-noleg�ych znacznie wi�cej. Wykorzystanie wyprowadze mikrokontrolera do progra-mowania ogranicza moliwo�� ich wykorzystania do innych celów. Najlepiej, je�litakie wyprowadzenia nie b�d� wykorzystywane do niczego innego — w uk�adzie b�d�one pod��czone wy��cznie do gniazda ��cz�cego z programatorem. Jednak w uk�adachposiadaj�cych niewielk� liczb� wyprowadze nie zawsze jest to moliwe. St�d tepowinni�my pami�ta�, aby pod��czone do tych wyprowadze urz�dzenia nie obci�a�yich zbytnio (w trybie programowania b�d� one obci�a�y wyj�cie programatora). Z tegopowodu nie zaleca si� pod��cza� do nich np. diod LED, nie naley na tych liniach doda-wa� take kondensatorów, szczególnie o wi�kszych pojemno�ciach (>1 nF). Dodatkowoje�li jakie� wyprowadzenie jest wej�ciem (czyli wyj�ciem uk�adu programuj�cego), nienaley ��czy� do niego innych wyj�� — w takiej sytuacji w trakcie programowaniapowstanie konflikt pomi�dzy wyj�ciem programatora a wyj�ciem uk�adu korzystaj�-cego z tego pinu.
54 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
Pami�tajmy, �e dla programatora nie ma znaczenia, jak w programie skonfigurowanes� piny wykorzystywane do programowania.
Programator na czas programowania wprowadza procesor w stan RESET, co wi�e si�z wprowadzeniem wszystkich pinów IO w stan wysokiej impedancji.
Szczególn� uwag� naley zwróci� na pod��czenie sygna�u RESET. Aby wej�� w trybprogramowania, programator musi mie� moliwo�� wymuszenia na tej linii stanuniskiego (lub +12 V w przypadku programatorów wysokonapi�ciowych). W efekcie pro-blem moe wyst�pi�, je�li w uk�adzie uywane s� zewn�trzne uk�ady generuj�ce RESETlub monitoruj�ce zasilanie. Przyk�adowy schemat pod��czenia procesora do progra-matora ISP pokazano na rysunku 2.1.
W dalszych rozdzia�ach ksi��ki pokazane schematy, dla uproszczenia i wi�kszej przej-rzysto�ci, nie b�d� ju� zawiera�y elementów pokazanych na schemacie z rysunku 2.1,czyli gniazda ISP, kondensatorów odsprz�gaj�cych oraz po��cze� z zasilaniem(Vcc i GND).
Aby pokazane w dalszej cz��ci uk�ady dzia�a�y poprawnie, naley zapewni� poprawnepo��czenie elementów pokazanych na rysunku 2.1. Szczególnie istotne jest pod��-czenie w kadym procesorze wszystkich wyst�puj�cych w nim wyprowadze zasilania(Vcc i GND). Przy braku pod��czenia niektórych wyprowadze uk�ad moe dzia�a�
Rozdzia� 2. � Programowanie mikrokontrolera 55
niestabilnie i stwarza� problemy. Drugim istotnym elementem s� kondensatory odsprz�-gaj�ce C23 i C24. S� to elementy, których zadaniem jest odsprz�ganie zasilania, a ichznaczenie ro�nie wraz ze wzrostem stopnia skomplikowania uk�adu.
Problemy
Najcz�stsze problemy z zaprogramowaniem procesora:
1. W przypadku programowania w trybie ISP „zablokowanie” procesora, poprzezniew�a�ciw� konfiguracj� fusebitów.
2. Nieprawid�owa cz�stotliwo�� sygna�u SCK (w przypadku programatorów ISP).Je�li podejrzewamy taki problem, naley zmniejszy� szybko�� programowania.W adnym przypadku nie moe ona przekroczy� ¼ cz�stotliwo�ci taktowaniaprocesora.
3. Zbyt d�ugi kabel ��cz�cy programator z uk�adem. Im d�uszy kabel, tym wi�kszeryzyko niepoprawnej pracy uk�adu. Zwykle problem ten objawia si� niestabiln�prac� programatora.
4. B��dne pod��czenie sygna�ów. Zawsze warto si� upewni�, e wszystkie sygna�yzosta�y prawid�owo po��czone z odpowiednimi wyprowadzeniami procesora.
5. Pomy�kowe pod��czenie programatora nie do wyprowadze zwi�zanych z ISP,lecz do wyprowadze zwi�zanych z interfejsem SPI (oznaczenia linii sygna�owychs� podobne). Problem ten dotyczy g�ównie procesorów ATMega128.
6. Wybór niew�a�ciwego programatora lub niew�a�ciwego trybu programowania.
7. Zablokowanie wykorzystywanego interfejsu (dotyczy g�ównie próbyprogramowania przy wy��czonym interfejsie JTAG lub próby programowaniaprzy pomocy ISP, z w��czonym interfejsem debugWire).
Programatory ISPPrawie kady procesor AVR dysponuje moliwo�ci� programowania przy pomocy inter-fejsu ISP (ang. In-system Programming Interface). Interfejs ten wykorzystuje do pro-gramowania piny RESET, MISO, MOSI oraz SCK. Zwykle piny te pokrywaj� si� z analo-gicznymi wyprowadzeniami interfejsu SPI, lecz nie zawsze tak jest. Jednym z takichwyj�tków jest procesor ATMega128. St�d te zawsze naley dok�adnie sprawdzi�, jakiewyprowadzenia procesora wykorzystywane s� do programowania przy pomocy inter-fejsu ISP. Informacje o wykorzystanych wyprowadzeniach znajduj� si� w nocie katalo-gowej procesora, w sekcji Memory Programming/Serial Downloading. Programatory ISPmaj� znormalizowany uk�ad sygna�ów wyprowadzonych na z��cze programuj�ce, poka-zany na rysunku 2.2.
Istniej� dwa typy z��cza ISP — jedno mniejsze, 6-pinowe, oraz wi�ksze 10-pinowe.Odst�p pomi�dzy pinami wynosi 2,54 mm, chocia w nowszych konstrukcjach Atmela
56 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
spotyka si� rozstaw pinów 1,27 mm. Umoliwia to zmniejszenie rozmiarów z��cza pro-gramuj�cego na p�ytce. Pewnego omówienia wymaga przeznaczenie pinu oznaczonegojako +Vcc. Do tego pinu naley pod��czy� napi�cie zasilaj�ce uk�ad. Napi�cie z tego pinuwykorzystywane jest przez programator do zasilania buforów wyj�ciowych, dzi�ki czemuprogramator dostosowuje poziomy napi�� na pozosta�ych pinach programatora do napi��panuj�cych w programowanym uk�adzie. Cz��� programatorów posiada take specjaln�zwork� prze��czaj�c� napi�cie. W takiej sytuacji jedna z pozycji powoduje zasilenieprogramatora z programowanego uk�adu, w drugiej pozycji to programator zasila pro-gramowany uk�ad. Programator ��czy si� z programowanym uk�adem tak, jak pokazanona rysunku 2.3.
Urz�dzenie�programowane
ProgramatorKomputer
USB
USB
Rysunek 2.3. Po��czenie programowanego uk�adu z programatorem i komputerem PC. Masy wszystkichurz�dze musz� zosta� po��czone razem
��cz�c programator z komputerem i programowanym uk�adem, naley zwraca� uwag�na potencja� masy. W komputerach klasy PC, ze wzgl�du na budow� zasilacza, masa(obudowa komputera) przy braku zerowania ma potencja� ok. 115 V wzgl�dem ziemi(wynika to z istnienia w zasilaczu uk�adu filtruj�cego). W efekcie przy braku zerowaniakomputera lub niepoprawnym zerowaniu moe doj�� do uszkodzenia programatora lubprogramowanego uk�adu. Aby unikn�� takich przykrych niespodzianek, mona zaopa-trzy� si� w programator z optoizolowanymi wyj�ciami, lecz jest to dodatkowy, sporywydatek.
Budowa programatora
Programatory ISP s� jednymi z najprostszych w budowie, w zwi�zku z tym kady moeposk�ada� sobie taki programator, dos�ownie z niczego. W szczególnie dobrej sytuacjis� tu uytkownicy posiadaj�cy komputery z wyprowadzonym portem równoleg�ym.W takiej sytuacji programator moe by� zwyk�� przej�ciówk� pomi�dzy portem kom-putera a gniazdem ISP. Uk�ad taki jest niezwykle prosty, lecz niezalecany. Jakikolwiekb��d w po��czeniach moe bardzo �atwo doprowadzi� do uszkodzenia portu równoleg�ego,
Rozdzia� 2. � Programowanie mikrokontrolera 57
dodatkowo jego niewielka wydajno�� pr�dowa powoduje znaczne ograniczenie maksy-malnej d�ugo�ci przewodu ��cz�cego komputer z programowanym uk�adem (w praktycedo kilkunastu cm). St�d znacznie lepszym rozwi�zaniem jest to pokazane na rysunku 2.4.
Rysunek 2.4. Schemat prostego programatora ISP pod��czanego do portu równoleg�ego komputera
Jak wida�, programator taki sk�ada si� z bufora 74XX244 (nie musi to by� uk�ad serii HC).Jego wprowadzenie umoliwia znaczne wyd�uenie przewodu ��cz�cego komputer z pro-gramatorem, nawet do 1 m i wi�cej (naley mie� na uwadze, e zbyt d�ugi przewód ��cz�cynie jest zalecany i w pewnych okoliczno�ciach moe prowadzi� do problemów z progra-mowaniem). Wprowadzenie tego uk�adu chroni take port równoleg�y. W przypadkub��dnego pod��czenia zasilania np. do pinów programatora uszkodzeniu ulegnie tylkotani uk�ad buforuj�cy, ochraniaj�c port równoleg�y. Wykonanie takiego programatorato koszt rz�du kilku z�otych, lecz ju za kilkana�cie z�otych mona kupi� programatorybardziej rozbudowane, których zaletami s�:
� bezpo�rednia wspó�praca z AVR Studio;
� moliwo�� programowania uk�adów zasilanych innym napi�ciem ni 5 V;
� wspó�praca z portem USB mikrokontrolera.
Szczególnie ta ostania cecha jest po�dana. Porty USB, w przeciwiestwie do równo-leg�ych, wyst�puj� praktycznie w kadym urz�dzeniu, lecz ich najwi�ksz� zalet� jestmoliwo�� czerpania energii z takiego portu. Stwarza to moliwo�� nie tylko zasilaniasamego programatora, ale take zasilania programowanego uk�adu (tu jednak trzebamie� na uwadze ograniczon� do ok. 0,5 A wydajno�� pr�dow� portu USB).
58 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
Programator AVRISP
Jest to prosty programator z moliwo�ci� pod��czenia poprzez port szeregowy RS232lub USB. Na rynku dost�pne s� liczne klony tego uk�adu, w efekcie mona go kupi� juza kilkana�cie z�otych, co czyni go szczególnie interesuj�cym dla amatora. W stosunkudo prostych programatorów, posiadaj�cych tylko bufor, jego zalet� jest moliwo�� pro-gramowania uk�adów zasilanych napi�ciem w granicach 2,7 – 5,5 V. Klasyczny progra-mator AVRISP zasilany jest z urz�dzenia programowanego, lecz jego wersje na USBcz�sto posiadaj� zworki, umoliwiaj�ce wybór �ród�a zasilania. Przy jego pomocy monaprogramowa� szerok� gam� modeli procesorów AVR. Wyj�tkiem jest tu tylko rodzinaAVR XMega oraz AVR32, wymagaj�ce programatora AVRISP mkII. Programator tenposiada wbudowany procesor, którego firmware kontroluje proces programowania. Wrazz uaktualnianiem AVR Studio firmware ten te moe zosta� uaktualniony, w efekcieposzerza si� lista obs�ugiwanych procesorów.
Programator ten jest rozwi�zaniem tanim, lecz warto mie� na uwadze, e obecnie niejest on ju praktycznie rozwijany przez firm� Atmel. St�d potencjalnie mog� by� pro-blemy z jego wykorzystaniem z najnowszymi modelami procesorów.
Programator AVRISP mkII
Rozwi�zaniem dla bardziej zaawansowanych amatorów i osób, które pó�profesjonalniechc� si� zajmowa� mikrokontrolerami AVR, jest programator AVRISP mkII. Równieten programator dost�pny jest w postaci klonów, w efekcie mona go kupi� za cen�ok. 100 – 150 z�. Jest to programator aktywnie wspierany przez firm� Atmel, wspiera-j�cy wszystkie rodziny procesorów AVR (��cznie z procesorami XMega oraz AVR32).Wspiera take procesory ATTiny, nieposiadaj�ce interfejsu ISP, dzi�ki moliwo�ci wyko-rzystania interfejsu TPI.
Programator ten moe programowa� uk�ady zasilane napi�ciem od 1,8 do 5,5 V, dodat-kowo mona regulowa� cz�stotliwo�� sygna�u zegarowego taktuj�cego transmisj�w zakresie 50 Hz – 8 MHz. Ma to istotn� zalet� w przypadku programowania uk�a-dów niskonapi�ciowych, taktowanych z wolnych zegarów, np. kwarców zegarkowycho cz�stotliwo�ci 32 768 Hz.
Maksymalna pr�dko�� programowania wynika z ogranicze� interfejsów szerego-wych — cz�stotliwo�� linii SCK nie mo�e by� wi�ksza ni� czterokrotno�� cz�stotli-wo�ci taktuj�cej rdze� procesora.
Tak wi�c wykorzystanie programatora AVRISP mkII umoliwia programowanie proce-sorów taktowanych zegarem od 200 Hz wzwy.
Programator ten wspó�pracuje z interfejsem USB, posiada take wyj�cia zabezpieczoneprzez zwarciem.
Rozdzia� 2. � Programowanie mikrokontrolera 59
Programator USBASP
Programator ten jest niezwykle popularny ze wzgl�du na jego prostot� oraz nisk� cen�.Dodatkow� zalet� tego programatora jest wsparcie ze strony WinAVR oraz bardzo popu-larnego programu AVRDude. Schemat tego programatora pokazano na rysunku 2.5.
Rysunek 2.5. Schemat programatora USBASP. Programator ten zawiera mikrokontroler steruj�cyprocesem programowania uk�adu docelowego. Dzi�ki temu programator ten jest niezale�ny od przebiegówczasowych generowanych przez komputer. �czno�� z komputerem nast�puje poprzez z��cze USB, st�d te�programator czerpie zasilanie. Po zwarciu zworki JP1-2 mo�liwe jest tak�e zasilanie z portu USB uk�aduprogramowanego
Programator ten umoliwia take programowanie procesorów taktowanych zegaramio niskiej cz�stotliwo�ci. Przy pomocy zworki JP3 mona prze��cza� cz�stotliwo�� liniiSCK z 375 kHz na 8 kHz, co umoliwia programowanie uk�adów taktowanych kwarcemzegarkowym o cz�stotliwo�ci 32 768 Hz. Zwarcie zworki JP1-1 umoliwia zaprogra-mowanie lub uaktualnienie oprogramowania programatora poprzez jego z��cze ISP.
Kilka procesorów w jednym uk�adzie
Sporadycznie zdarza si�, e na jednej p�ytce znajduje si� wi�cej ni jeden procesor AVRi kady powinien mie� zapewnion� moliwo�� programowania. Najch�tniej w takiejsytuacji chcieliby�my móc korzysta� tylko z jednego gniazda programuj�cego. Konfi-guracja taka jest moliwa, musimy tylko pami�ta� o spe�nieniu pewnych dodatkowychza�oe. W takiej sytuacji sygna�y z programatora (RESET, MISO, MOSI) powinny by�rozprowadzone do wszystkich mikrokontrolerów. Natomiast sygna� SCK musi pozosta�
60 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
rozdzielony. Przy takiej konfiguracji wyboru programowanego mikrokontrolera doko-nuje si� poprzez wybranie mikrokontrolera, do którego doprowadzony zostanie sygna� SCK.Uk�ad taki moe dzia�a�, poniewa aby procesor wszed� w tryb programowania (a co zatym idzie, linie MOSI i MISO sta�y si� aktywne), musi by� spe�nionych kilka za�oe. Popierwsze, programator musi zapewni� aktywno�� sygna�u RESET. Dzi�ki utrzymywaniugo w stanie aktywnym wyprowadzenia wszystkich mikrokontrolerów przechodz� w stanwysokiej impedancji. Dzi�ki temu nie zak�ócaj� one transmisji. Uaktywnienie trybuprogramowania wymaga w takiej sytuacji doprowadzenia do wej�cia SCK odpowied-niego przebiegu. Poniewa przebieg taki zostanie doprowadzony wy��cznie do wybra-nego procesora, inne procesory pozostan� nieaktywne, z wyprowadzeniami w staniewysokiej impedancji.
W przypadku gdy na p�ytce znajduje si� jeden wi�kszy procesor i jeden lub wi�cejprocesorów ze stosunkowo niewielk� ilo�ci� pami�ci FLASH, mona rozway� jeszczejedn� moliwo��. Funkcj� programatora moe przej�� procesor „wi�kszy”, odpowied-nio steruj�c wyprowadzeniami odpowiedzialnymi za programowanie innych procesorów.W takiej sytuacji ich przeprogramowanie wymaga wczytania do procesora kontroluj�-cego pozosta�e odpowiedniego programu oraz zawarto�ci pami�ci FLASH pozosta�ychprocesorów. Rozwi�zanie takie jest stosunkowo proste, lecz wymaga takiego pod��cze-nia wszystkich mikrokontrolerów, aby ich wyprowadzenia programuj�ce by�y dost�pnedla procesora nadrz�dnego.
Programatory JTAGProgramatory wykorzystuj�ce interfejs JTAG s� o wiele drosze, ale oprócz moliwo�ciprogramowania przy ich pomocy procesora oferuj� take moliwo�� debugowania.Obecnie na rynku wyst�puj� dwie wersje programatora JTAG dla mikrokontrolerówAVR — JTAGICE oraz JTAGICE II. Ten drugi cechuje si� bardzo wysok� cen�(ok. 700 – 1200 z�), ale oferuje moliwo�� programowania wszystkich mikrokontrole-rów AVR wyposaonych w interfejs JTAG. Za jego pomoc� mona take programo-wa� mikrokontrolery AVR32. Moliwo�ci programatora JTAGICE s� skromniejsze,ale za to jego cena jest niewiele wysza ni programatora ISP. Programator ten ��czysi� z programowanym uk�adem przy pomocy gniazda o innym rozk�adzie sygna�ów niw przypadku programatora ISP — rysunek 2.6.
Interfejs JTAG wykorzystuje pi�� sygna�ów: RESET, TCK, TMS, TDI oraz TDO. Do pinu 7 (VCC)naley doprowadzi� napi�cie zasilaj�ce tylko w sytuacji, w której programator ma by�zasilany z uk�adu. Je�li programator ma w�asne zasilanie, pin 7 mona pozostawi�
Rozdzia� 2. � Programowanie mikrokontrolera 61
niepod��czony. Z kolei pin 4 dostarcza napi�cia umoliwiaj�cego programatorowi dosto-sowanie poziomu napi�� na liniach RESET, TCK, TMS, TDI i TDO do napi�� panuj�cychw uk�adzie. Na podstawie napi�cia na tej linii programator wykrywa take pod��czeniedo uk�adu programowanego. Wyprowadzenia oznaczone jako NC naley pozostawi�niepod��czone.
Aby móc korzysta� z tego trybu, procesor musi obs�ugiwa� interfejs JTAG, a fusebitJTAGEN musi by� zaprogramowany (mie� warto�� 0).
Programowanie przy uyciu interfejsu JTAG ma liczne zalety:
� Jest 3 – 4 razy szybsze w stosunku do programowania przy uyciu interfejsu ISP.
� Podobnie, znacznie szybsze jest take programowanie pami�ci EEPROM.
� Umoliwia zmian� fusebitów okre�laj�cych �ród�o sygna�u zegarowego,niezalenie od ich poprzednich warto�ci. Interfejs JTAG sam generuje zegardla uk�adu docelowego, st�d wybranie nawet b��dnych warto�ci nie blokujemoliwo�ci dalszego programowania (odmiennie ni w przypadku interfejsuISP).
� Istnieje moliwo�� ��czenia urz�dze w konfiguracj� daisy-chain, umoliwiaj�c�programowanie wielu urz�dze przy pomocy jednego z��cza JTAG.
� Istnieje moliwo�� programowania nie tylko mikrokontrolerów AVR, ale takeinnych uk�adów kompatybilnych ze standardem JTAG (np. FPGA).
Niezwykle istotn� zalet� interfejsu JTAG jest mo�liwo�� debugowania przy jego pomocyprogramu w trakcie jego dzia�ania w docelowym uk�adzie elektronicznym.
Moliwo�� taka jest wprost trudna do przecenienia, szerzej zostanie opisana w roz-dziale 29.
Programator JTAGICE
Cena tego uk�adu porównywalna jest z cen� dobrego programatora ISP. Jest to wi�cpropozycja dla hobbystów zdecydowanie powaniej my�l�cych o zaj�ciu si� budowaniemuk�adów w oparciu o mikrokontrolery AVR. Zastosowania tego programatora ograniczastosunkowo niewielka liczba wspieranych uk�adów [ATmega16(L), ATmega162(L),ATmega169(L or V), ATmega32(L), ATmega323(L), ATmega64(L), ATmega128(L)].Lecz nawet pomimo tej wady warto rozway� jego zakup, szczególnie je�li jeste�myw posiadaniu p�ytki rozwojowej zawieraj�cej jeden z wyej wymienionych procesorów.Programowanie przy jego pomocy jest nie tylko szybsze, lecz przede wszystkim udo-st�pnia szerokie moliwo�ci debugowania uk�adu w systemie. Dzi�ki temu nawet je�lipisany program b�dzie docelowo dzia�a� na innym typie procesora, �atwiej jest napisa�aplikacj� na jednym ze wspieranych przez JTAGICE procesorów, a nast�pnie j� tylkozmodyfikowa� dla potrzeb procesora docelowego. Uycie interfejsu JTAG umoliwianie tylko debugowanie samego programu, ale take sprawdzenie stanu wszystkich bloków
62 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
procesora, a take jego portów IO. Oprócz moliwo�ci sprawdzenia stanu mona ichstan take modyfikowa� „w locie”. U�atwia to testowanie poprawno�ci po��cze elek-trycznych na p�ytce i poprawno�ci montau.
Programator JTAGICE mkII
Programator JTAGICE mkII jest rozwini�ciem uk�adu JTAGICE. Umoliwia on pro-gramowanie wszystkich procesorów AVR wyposaonych w interfejs JTAG, w tym takeprocesorów z rodziny AVR32. Ze wzgl�du na cen� tego programatora (przekraczaj�ca1000 z�) jest to raczej propozycja dla osób chc�cych bardziej profesjonalnie zaj�� si�programowaniem i budowaniem uk�adów w oparciu o mikrokontrolery. Funkcjonalnieprogramator ten nie róni si� od swojego poprzednika, udost�pnia podobne moliwo�ci.Oprócz programowania przez interfejs JTAG udost�pnia take moliwo�� programo-wania z wykorzystaniem interfejsów PDI, debugWire, SPI oraz aWire. W efekcie za jegopomoc� mona zaprogramowa� praktycznie wszystkie procesory AVR.
Kilka procesorów w jednym uk�adzie
Podobnie jak w przypadku ISP, take JTAG umoliwia wykorzystanie jednego z��czado programowania kilku uk�adów. Funkcja taka jest wpisana w specyfikacj� proto-ko�u JTAG, wi�c teoretycznie taka konfiguracja powinna by� nawet �atwiejsza w reali-zacji. Tu, niestety, jak to zwykle bywa, napotykamy na problemy natury programowej.Wi�kszo�� dost�pnego oprogramowania nie wspiera moliwo�ci wybierania procesoraw konfiguracji �acuchowej JTAG (ang. Daisy-chain JTAG mode). Sytuacja ta stop-niowo si� zmienia i cz��� oprogramowania dostarczonego przez firm� Atmel wspiera tak�konfiguracj� dla programatora AVRICE mkII. Schemat pod��czenia interfejsów JTAGw konfiguracji daisy-chain pokazano na rysunku 2.7. Linie TDI i TDO kolejnych proce-sorów s� po��czone szeregowo.
Rysunek 2.7. Po��czenie kilku uk�adów AVR, wykorzystuj�cych jedno z��cze JTAG
Rozdzia� 2. � Programowanie mikrokontrolera 63
Inn� moliwo�ci� jest rozwi�zanie analogiczne do pokazanego przy okazji programo-wania ISP — po��czenie równoleg�e odpowiednich linii JTAG, z wyj�tkiem linii SCK.Wybór aktywnej linii SCK umoliwia wybór programowanego/debugowanego uk�adu.
Korzystaj�c z mo�liwo�ci konfiguracji daisy-chain, nale�y mie� na uwadze jeszcze jedenproblem — niektóre mikrokontrolery AVR maj� b��dn� implementacj� obs�ugi JTAG,uniemo�liwiaj�c� zastosowanie konfiguracji daisy-chain. St�d przed jej u�yciem nale�yzawsze sprawdzi� errat� do noty katalogowej procesora, zgodn� z jego modelem orazwersj� uk�adu.
AVR Dragon
Alternatyw� dla wcze�niej wymienionych programatorów, w tym dla drogiego JTA-GICE mkII, jest uk�ad AVR Dragon. W przeciwiestwie do wcze�niejszych uk�adówjest on sprzedawany bez obudowy, z��cz i kabli. Potrzebne z��cza naley wlutowa�samemu. Dzi�ki temu jego cena jest niezwykle atrakcyjna — mona go kupi� w cenieok. 200 – 240 z�. Niestety, brak wielu wbudowanych zabezpiecze� czyni go nie-zwykle podatnym na uszkodzenie. Aby tak� moliwo�� znacznie zmniejszy�, naleysamemu doda� odpowiednie uk�ady zabezpieczaj�ce — np. uk�ady buforuj�ce wyj�ciaprogramatora. Uk�ad AVR Dragon umoliwia programowanie wszystkich mikrokon-trolerów AVR dzi�ki wyposaeniu go w interfejsy HVPP, HVSP, ISP, JTAG, PDI.Umoliwia take debugowanie uk�adu docelowego dzi�ki interfejsom JTAG i debugWire.Programowane uk�ady mog� by� zasilane napi�ciem z zakresu 1,8 – 5,5 V. Uk�adAVR Dragon moe take dostarcza� dla nich napi�cia zasilaj�cego o nat�eniu mak-symalnie 300 mA.
Programatory HW i równoleg�eProgramatory wysokonapi�ciowe (HW, ang. High Voltage) oraz równoleg�e s� niezwyklerzadko wykorzystywane. Programator wysokonapi�ciowy wykorzystuje podobne sygna�yco programator ISP, lecz podczas programowania na wej�ciu RESET procesora zamiaststanu niskiego doprowadzane jest napi�cie +12V. Dzi�ki temu mona programowa�procesory, w których przy pomocy fusebitu RSTDSBL wej�cie RESET zosta�o zablokowane.Nie wszystkie procesory dysponuj� moliwo�ci� programowania wysokonapi�ciowego.W tym trybie programowania procesor wymaga doprowadzenia sygna�ów pokazanychw tabeli 2.1.
Tabela 2.1. Sygna�y wykorzystywane do programowania w trybie wysokonapi�ciowym
64 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
Programatory równoleg�e wykorzystywane s� jeszcze rzadziej. Ich potencjaln� zalet�jest wi�ksza szybko�� dzia�ania, lecz do poprawnej pracy wymagaj� pod��czenia kilku-nastu rónych sygna�ów. Zalet� tego typu programatorów jest moliwo�� programowaniaprocesora zablokowanego w wyniku przeprogramowania fusebitów odpowiedzialnychza wybór zegara. Jest to moliwe, poniewa w tym trybie programator generuje przebiegzegarowy taktuj�cy procesor, który jest doprowadzony do wej�cia XTAL1.
Tryb TPIJest to uproszczony interfejs umoliwiaj�cy programowanie najmniejszych procesorówAtmel z serii ATTiny. Uywa on linii RESET oraz linii danych TPIDATA i zegara TPICLK.W przypadku kiedy pin RESET jest wykorzystywany jako zwyk�y pin IO, wej�cie w trybTPI jest wymuszane poprzez podanie na ten pin napi�cia +12 V. Protokó� ten wspie-rany jest przez najnowsze programatory, m.in. AVRISP mkII, AVR Dragon.
Programowanie procesoraw AVR Studio
Zdecydowanie naj�atwiejsz� opcj� jest wykorzystanie do programowania zintegrowa-nego �rodowiska, jakim jest AVR Studio. Dzi�ki temu mamy moliwo��, przy pomocyjednego programu, pisa� program, kompilowa� go, debugowa� (za pomoc� interfejsówsprz�towych lub wbudowanego w AVR Studio symulatora), a efekt finalny przy pomocyjednego przycisku wgrywa� do pami�ci procesora. Bezpo�rednio AVR Studio wspieranarz�dzia dostarczane przez firm� Atmel — programatory AVRISP, JTAGICE, Dragon.Po pewnych zabiegach mona take korzysta� z innych programatorów.
Rozpocz�cie procesu programowania w AVR Studio wymaga najpierw skonfigurowaniainterfejsu programatora — czyli wybrania z listy programatora, który posiadamy, orazpodania sposobu komunikacji z nim (rysunek 2.8). Opcj� konfiguracji wybiera si�z menu Tools/Program AVR/Connect.
Rysunek 2.8.Konfiguracjaprogramatoraw AVR Studio— w powy�szymprzyk�adzie zosta�wybrany programatorAVRISP mkII,pod��czonyprzez port USB
Rozdzia� 2. � Programowanie mikrokontrolera 65
Po udanej próbie nawi�zania po��czenia z programatorem wy�wietlone zostanie kolejneokno, z opcjami, jakie moemy wybra�. Opcje niewspierane przez dany typ programa-tora nie b�d� dost�pne (rysunek 2.9).
Rysunek 2.9.Opcje dost�pnedla programatoraAVRISP MkII.Poniewa� programatorten mo�na ��czy�z uk�ademprogramowanymprzy pomocy ró�nychinterfejsów, w�a�ciwytryb po��czenia nale�ywybra� w menuProgramming Modeand Target Settings.Dla tego programatoranale�y tak�e okre�li�cz�stotliwo�� zegarataktuj�cego transmisj�,pami�taj�c, �e nie mo�eona by� wy�sza ni� ¼cz�stotliwo�ci zegarataktuj�cego rdzeprocesora
W oknie konfiguracji mona take ustawi� konfiguracj� fusebitów oraz lockbitów(zak�adki Fuse oraz LockBits) — rysunek 2.10.
W zak�adce Program okre�la si� �cieki do plików zawieraj�cych program, który chce-my wczyta� do mikrokontrolera (pliki musz� by� w formacie elf lub Intel HEX) —rysunek 2.11.
Programowanie przy pomocy narz�dzidostarczonych przez firm� Atmel
Firma Atmel wraz z AVR Studio dostarcza wielu rónych programów umoliwiaj�cychprogramowanie z linii polece przy pomocy programatorów kompatybilnych z proto-ko�ami firmy Atmel. S�u� one generalnie do automatyzacji procesu programowaniaw przypadku programowania d�uszych serii procesorów. W�ród licznych programów naszczególn� uwag� zas�uguje program FLIP. Nie jest on dostarczany razem z AVR Studio,lecz wymaga osobnego pobrania ze strony www.atmel.com i instalacji. W�ród licznych
66 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
Rysunek 2.10.Konfiguracja fusebitóww AVR Studio.W przypadkuz�o�onych operacji(np. wyboru zegara)zamiast wybiera�konfiguracj�poszczególnychfusebitów, mo�emypos�u�y� si�rozwijalnymi listamiz mo�liwymido wybrania opcjami.W znacznym stopniuogranicza to mo�liwo��pomy�ki. Wybran�konfiguracj� fusebitówwprowadza si�do procesorapo naci�ni�ciuprzycisku Program
Rysunek 2.11.W zak�adce Programokre�la si� �cie�kidost�pu do plikówwykorzystywanychw trakcieprogramowania.Najwygodniej jestu�y� pliku w formacieelf, gdy� zawieraon wszystkie niezb�dnedo zaprogramowaniaprocesora dane.Alternatywnie mo�napoda� �cie�kido plików hex i eep,zawieraj�cych wsaddo zaprogramowaniapami�ci FLASHi EEPROM
Rozdzia� 2. � Programowanie mikrokontrolera 67
jego moliwo�ci jest take moliwo�� programowania urz�dze wyposaonych w bootlo-ader kompatybilny ze specyfikacj� Atmela dla urz�dze klasy DFU (ang. Device FirmwareUpdate). Do tej klasy urz�dze zalicza si� m.in. procesory AVR wyposaone w sprz�towyinterfejs USB. S� one sprzedawane z firmowo wgranym bootloaderem, umoliwiaj�-cym wczytanie oprogramowania do pami�ci FLASH i EEPROM mikrokontrolera.
Tryb DFU nie umo�liwia zmiany fusebitów. W tym celu nale�y pos�u�y� si� innym pro-gramatorem.
Aby uruchomi� wbudowany w urz�dzenie bootloader, podczas wyprowadzenia urz�-dzenia ze stanu RESET naley zewrze� do masy pin HWB. Dzi�ki temu zamiast programuzostanie uruchomiony bootloader umoliwiaj�cy wczytanie nowego oprogramowania.
Po pod��czeniu programowanego uk�adu do komputera przy pomocy USB i urucho-mieniu bootloadera przy pomocy pinu HWB urz�dzenie jest gotowe do programowania.
Aby klasa DFU by�a rozpoznawana przez komputer, nale�y zainstalowa� sterowniki DFUdostarczone przez firm� Atmel.
Po uruchomieniu programu FLIP wybieramy z menu Device/Select; w efekcie ukazujesi� okno wyboru procesora (rysunek 2.12).
Po wyborze procesora klikamy na Open, co powoduje nawi�zanie po��czenia z progra-mowanym uk�adem. Nast�pnie wczytujemy pliki do zaprogramowania (File/Load HEX),wybieramy opcje programowania i weryfikacji uk�adu i klikamy na przycisk Run, coinicjuje proces uaktualniania oprogramowania (rysunek 2.13).
Program AVRDUDEJest to jeden z najpopularniejszych programów uywanych do programowania mikrokon-trolerów AVR. Jest on dostarczany wraz z pakietem WinAVR. Sam program AVRDUDEjest aplikacj� uruchamian� z wiersza plece, parametry podaje si� jako opcje wywo�ania.
68 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
Aby uczyni� go nieco bardziej przyjaznym, w Internecie dost�pnych jest wiele graficz-nych nak�adek, umoliwiaj�cych uzyskanie tych samych efektów przy pomocy prostegointerfejsu graficznego. Program AVRDUDE obs�uguje nast�puj�ce programatory:
� STK500, STK600,
� AVRISP i AVRISP mkII,
� AVRICE i AVRICE mkII,
� proste programatory pod��czane do wyj�cia równoleg�ego i szeregowegokomputera.
Program ten wspiera wszystkie protoko�y transmisji uywane przez firm� Atmel. Nie-stety, do programowania mona pos�uy� si� wy��cznie plikami IntelHEX, gdy niewspiera on formatu elf. W efekcie musimy dysponowa� oddzielnymi plikami zawiera-j�cymi obrazy pami�ci FLASH, EEPROM, a take warto�ciami numerycznymi fuse-i lockbitów. Stwarza to pewne dodatkowe moliwo�ci pomy�ki.
Program ten moe pracowa� w dwóch trybach — terminalowym oraz wywo�ywanyz wiersza polece. Poniej krótko pokazane zostan� podstawowe opcje wywo�ania,umoliwiaj�ce zaprogramowanie przy jego pomocy mikrokontrolera.
Parametry wywo�ania:
� -p procesor — jest to obowi�zkowy parametr wywo�ania programu. Okre�laon typ procesora pod��czonego do programatora. List� dost�pnych typów monawy�wietli�, wydaj�c polecenie avrdude –p ?. W efekcie powinna wy�wietli�si� lista wspieranych typów procesorów.
Rozdzia� 2. � Programowanie mikrokontrolera 69
� -B okres — parametr ten jest uywany przy programowaniu za pomoc� interfejsuJTAG w trybie ISP. Umoliwia on okre�lenie pr�dko�ci programowania poprzezpodanie okresu (w mikrosekundach) sygna�u SCK. Np. avrdude –B 1 powoduje,e linia SCK b�dzie taktowana sygna�em o cz�stotliwo�ci 1 MHz.
� -c programator — okre�la typ programatora, który ma zosta� uytydo programowania mikrokontrolera. List� dost�pnych typów mona wy�wietli�poleceniem avrdude –c ?. Na li�cie tej naley odnale�� uywany programator.
Czasami dany programator wspiera ró�ne protoko�y programowania. W takiej sytu-acji b�dzie wyst�powa� na li�cie wiele razy z sufiksami okre�laj�cymi wybrany trybprogramowania.
� -F — powoduje, e program nie weryfikuje sygnatury uk�adu z typem podanymjako parametr –p. W nielicznych sytuacjach umoliwia to obej�cie pewnychproblemów zwi�zanych z uszkodzeniem sygnatury procesora, lecz normalnieopcja ta nie powinna by� uywana.
� -n — wykonuje wszystkie operacje, ale bez fizycznego zapisu do uk�adu.Jest to przydatne do testowania rónych skryptów automatyzuj�cych procesprogramowania.
� -O — przeprowadza kalibracj� wewn�trznego generatora RC zgodnie z opisemz noty AVR053. Uzyskany w wyniku kalibracji bajt kalibracyjny jest zapisywanydo komórki pami�ci EEPROM o adresie 0, sk�d moe zosta� odczytany przezprogram i uyty do kalibracji rejestru OSCCAL mikrokontrolera. Co prawdaoperacja ta nie poprawia stabilno�ci wewn�trznego generatora RC, ale okre�ladok�adniej jego cz�stotliwo��.
� -U obszar:typ:plik[:format] — opcja ta przeprowadza operacj� na wskazanymobszarze (moe to by� operacja odczytu lub zapisu). Parametr obszar moeby� jednym z symboli: eeprom, flash, fuse, hfuse, lfuse, efuse, lock. Okre�laon obszar podlegaj�cy danej operacji, zgodnie z nazw� podanych symboli.Parametr typ okre�la typ operacji: r — odczyt, w — zapis, v — weryfikacja,Parametr plik okre�la nazw� pliku, z którego b�d� odczytywane danew przypadku operacji zapisu lub do którego b�d� zapisywane dane w przypadkuoperacji odczytu. Ostatni parametr, format, okre�la format pliku. Z licznychformatów istotne s� i — okre�laj�cy, e plik jest w formacie IntelHEX,i m — okre�laj�cy, e parametr b�dzie warto�ci� bezpo�redni�, podan� w liniiwywo�ania (najcz��ciej uywane do programowania fuse- i lockbitów).
spowoduje zaprogramowanie procesora ATMega88 plikami test.hex i test.eep, którychzawarto�� zostanie umieszczona odpowiednio w pami�ci FLASH i EEPROM mikro-kontrolera. Dodatkowo warto�� fusebitów zostanie ustawiona na 0x2E89FF. Z koleiwywo�anie:
70 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
avrdude -c avrisp2 -P usb -p t26 -U flash:w:main.hex:i
powoduje zaprogramowanie procesora typu ATTiny26 plikiem main.hex, przy pomocyprogramatora AVRISP mkII, pod��czonego przez port USB, w trybie ISP.
Program PonyProgProgram PonyProg jest bardzo prostym programem umoliwiaj�cym programowanierónych uk�adów przy pomocy prostych interfejsów pod��czanych do portu równole-g�ego lub szeregowego komputera. Obs�uguje on pliki Intel Hex. Program mona pobra�ze strony http://www.lancos.com/prog.html. Oprócz programowania procesorów przyjego pomocy mona take programowa� rónego typu pami�ci szeregowe. Po skonfigu-rowaniu typu posiadanego programatora (opcja Setup/Interface Setup) naley wybra�typ programowanego uk�adu. Nast�pnie z menu File wybieramy Open Program File orazOpen Data File i wczytujemy uzyskane w trakcie kompilacji pliki z rozszerzeniemhex i eep. Ostatni� czynno�ci� jest zaprogramowanie procesora poleceniem Command/Write All. PonyProg umoliwia take konfiguracj� fuse- i lockbitów. W tym wzgl�dziejego prostota prowadzi cz�sto do b��dów. Do dyspozycji mamy tylko pojedyncze fusebity,których odpowiedni� warto�� naley ustali� po przejrzeniu sekcji noty katalogowejprocesora po�wi�conej konfiguracji fusebitów.
Nale�y pami�ta�, �e podobnie jak w przypadku innych programów, fusebit zaprogra-mowany oznacza fusebit o warto�ci 0.
Po skonfigurowaniu fusebitów wybieramy opcj� Write, co powoduje ich zapisanie doprocesora.
Fusebity i lockbity w AVR-libcBiblioteka AVR-libc udost�pnia wygodny sposób modyfikacji bitów konfiguracyjnychprocesora. Poniewa bity te nie mog� by� zmieniane programowo, aby taka konfigu-racja by�a moliwa, potrzebne jest specjalne oprogramowanie wspieraj�ce funkcje biblio-teki AVR-libc. Zwykle wspieraj� tak� moliwo�� programy, które jako �ród�o danychdo programowania procesora wykorzystuj� pliki w formacie elf. W plikach w formacieIntel HEX nie ma moliwo�ci umieszczenia informacji o konfiguracji fuse- i lockbitów;w efekcie programatory wykorzystuj�ce ten format nie wspieraj� funkcji AVR-libc.W takiej sytuacji pozostaje r�czna konfiguracja tych bitów poprzez wybranie odpowied-nich opcji programatora.
Programuj�c lock- i fusebity, nale�y pami�ta�, �e warto�ci jeden odpowiada fusebitniezaprogramowany, natomiast warto�ci 0 — zaprogramowany.
Rozdzia� 2. � Programowanie mikrokontrolera 71
Aby fusebity i lockbity zosta�y poprawnie skonfigurowane i umieszczone w wynikowympliku elf, naley wybra� w�a�ciwy typ procesora. B��dne ustawienie typu procesoramoe spowodowa� jego zablokowanie na skutek próby wpisania nieprawid�owej kon-figuracji fuse- i lockbitów.
Lockbity
Lockbity zosta�y dok�adnie omówione w rozdziale 25. Ich funkcj� jest ochrona pami�cimikrokontrolera przed moliwo�ci� jej odczytania przy pomocy programatora. Dzi�kitemu umieszczony w pami�ci FLASH program po zaprogramowaniu lockbitów nie dajesi� odczyta�. Ich zaprogramowanie nie blokuje moliwo�ci komunikacji z procesorem,przy próbie odczytu zwracane s� warto�ci b�d�ce kolejnymi adresami komórek pami�ciFLASH. Natomiast w aden sposób nie da si� odczyta� ich zawarto�ci, mimo e pro-gramator nie zasygnalizuje adnego b��du. Raz zaprogramowane lockbity mona ska-sowa� wy��cznie razem z kasowaniem pami�ci FLASH i EEPROM poleceniem ChipErase. W ten sposób odzyskujemy moliwo�� programowania i odczytywania zawar-to�ci pami�ci FLASH procesora, lecz jednocze�nie tracimy zawarty w niej poprzednioprogram. Zwykle w�a�ciwa konfiguracja lockbitów okre�lana jest na kocowym etapietworzenia urz�dzenia. Nie ma sensu ich uywa� w trakcie pisania aplikacji.
Fusebity
Wszystkie procesory AVR posiadaj� tzw. fusebity, umoliwiaj�ce okre�lenie konfiguracjipocz�tkowej procesora po w��czeniu zasilania. W zaleno�ci od modelu procesoradost�pne fusebity mog� si� nieznacznie róni�, oferuj�c wi�cej lub mniej opcji konfi-guracyjnych. Poniej przedstawiona zostanie krótko charakterystyka poszczególnychfusebitów. Naley pami�ta�, e nowa konfiguracja fusebitów zaczyna obowi�zywa�dopiero po wyj�ciu z trybu programowania procesora. Dzi�ki temu je�li przypadkowowprowadzono nieprawid�ow� konfiguracj� fusebitów, to mona j� poprawi�, o ile pro-cesor nadal znajduje si� w trybie programowania.
Fusebity BODLEVEL
S� one odpowiedzialne za konfiguracj� uk�adu odpowiedzialnego za detekcj� awariizasilania. Je�li napi�cie zasilaj�ce procesor b�dzie poniej progu wyznaczonego war-to�ci� fusebitów BODLEVEL, procesor utrzymywany b�dzie w stanie resetu do czasu, anapi�cie wróci do warto�ci prawid�owych. Domy�lnie ich konfiguracja odpowiadazablokowanemu uk�adowi detekcji awarii zasilania. W gotowym uk�adzie w�a�ciwiew ka�dej sytuacji nale�y w��czy� ten uk�ad ochronny. Zapobiega to pracy procesoraprzy napi�ciach spoza specyfikacji, co moe doprowadzi� do nieprawid�owej pracy rdze-nia procesora i uk�adów peryferyjnych. Cz�sto spotykanym problemem przy wy��czo-nym uk�adzie BOD jest uszkodzenie komórek pami�ci EEPROM. W��czenie uk�aduBOD praktycznie eliminuje ten problem. Uk�ad BOD mona wy��cza� okresowo w sys-temach, w których pobór mocy jest szczególnie istotny. Jego wy��czenie nieznaczniezmniejsza pobór energii przez procesor. Szczegó�owo zosta�o to omówione w rozdzialepo�wi�conym trybom oszcz�dzania energii.
72 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
Fusebit WDTON
Jego zaprogramowanie powoduje w��czenie uk�adu watchdoga. W takiej sytuacji uk�adten nie moe zosta� wy��czony. O konsekwencjach w��czenia uk�adu watchdoga szerzejnapisano w rozdziale 5.
Fusebit EESAVE
Ma on znaczenie tylko podczas kasowania pami�ci procesora przed programowaniem.Jego zaprogramowanie powoduje zachowanie zawarto�ci pami�ci EEPROM, zawarto��pami�ci FLASH nadal b�dzie mog�a by� normalnie kasowana. Fusebit ten ma zastoso-wanie w sytuacjach, w których wgrywana jest przy pomocy programatora nowa zawar-to�� pami�ci FLASH, a jednocze�nie nowy program ma mie� dost�p do danych umiesz-czonych w pami�ci EEPROM przez program poprzedni. Poza sytuacj� programowaniaprocesora przez programator, fusebit EESAVE nie ma znaczenia.
Fusebity BOOTSZ i BOOTRST
Ich znaczenie zosta�o szerzej omówione w rozdziale 25.
Fusebit JTAGEN
Fusebit ten umoliwia wy��czenie interfejsu JTAG. Domy�lnie procesory sprzedawanes� z zaprogramowanym fusebitem JTAGEN (o ile posiadaj� interfejs JTAG). Odblokowa-nie uk�adu JTAG powoduje przej�cie kontroli nad pinami IO wspólnymi z tyminterfejsem, co jest cz�st� przyczyn� pomy�ek. Nad takimi pinami nie ma adnejkontroli ze strony programu. Je�li interfejs JTAG nie jest uywany, mona go wy��czy�,dzi�ki czemu wykorzystywane przez niego piny IO zostan� zwolnione i b�d� mog�yzosta� wykorzystane w programie.
Fusebit SPIEN
Fusebit SPIEN odblokowuje interfejs ISP procesora. Domy�lnie procesory s� sprzeda-wane z zaprogramowanym fusebitem SPIEN, dzi�ki czemu mona je programowa� przypomocy programatorów szeregowych. Tego fusebitu nie mona skasowa� w trybieprogramowania szeregowego — mona to uczyni� np. w trybie programowania poprzezinterfejs JTAG lub w trybie wysokonapi�ciowym.
Fusebit CKDIV8
Okre�la on cz�stotliwo�� taktowania procesora. Domy�lnie procesory sprzedawane s�z zaprogramowanym fusebitem CKDIV8, w efekcie zegar taktuj�cy jest dzielony przez 8,co prowadzi do cz�stych pomy�ek — np. wyliczone p�tle opó�niaj�ce s� 8-krotnied�usze. Jego zaprogramowanie powoduje wpisanie po resecie do rejestru preskalerazegara (CLKPR) warto�ci odpowiadaj�cej podzia�owi przez 8. Zamiast kasowa� ten fusebit,mona programowo zmieni� warto�� preskalera.
Rozdzia� 2. � Programowanie mikrokontrolera 73
Przyk�adowe programy przedstawione w dalszej cz��ci ksi��ki zak�adaj�, �e fusebitCKDIV8 ma warto�� 1 — poniewa� nie jest to domy�lna warto�� tego fusebitu, nale�yprzed uruchomieniem aplikacji go przeprogramowa�.
Fusebity SUT
Okre�laj� one liczb� cykli zegara po w��czeniu zasilania, po których procesor b�dziewyprowadzony ze stanu reset. W wi�kszo�ci przypadków ich konfiguracja nie maznaczenia, tym bardziej e ich warto�ci� domy�ln� jest najd�uszy moliwy czas wyj-�cia z resetu. W przypadku kiedy zasilanie procesora szybko ulega po w��czeniu stabi-lizacji, czas ten mona skróci�.
Fusebit CKOUT
Powoduje on wyprowadzenie na wyj�cie procesora CKOUT zbuforowanego zegara taktu-j�cego rdze. Dzi�ki temu inne uk�ady mog� korzysta� z zegara procesora, umoliwiato take synchroniczn� prac� innych uk�adów z procesorem. Domy�lnie ten fusebit niejest zaprogramowany, w efekcie wyj�cie CKOUT zachowuje si� jak normalny pin portu IO.
Fusebity CKSEL
Okre�laj� one sposób generowania sygna�u zegarowego dla procesora. Prawdopodob-nie s� to fusebity sprawiaj�ce najwi�cej k�opotów, gdy ich nieprawid�owe ustawieniemoe doprowadzi� do zablokowania procesora (niemono�� dalszego programowaniaw trybie ISP). Domy�ln� ich warto�ci� jest warto�� wybieraj�ca jako �ród�o zegarawewn�trzny generator RC. W wielu przypadkach to domy�lne ustawienie jest wystar-czaj�ce i nie ma potrzeby go zmienia�. Potrzeba taka zachodzi, je�li chcemy taktowa�procesor przy pomocy zewn�trznego uk�adu generuj�cego zegar lub przy pomocykwarcu. Konfiguracja tych bitów jest zale�na od procesora i przed ich zmian�nale�y skonsultowa� si� z not� katalogow� u�ywanego uk�adu.
Je�li zdarzy si� nam wybra� niew�a�ciwe �ród�o zegara, procesor mona „uratowa�”,doprowadzaj�c zewn�trzny przebieg zegarowy do wej�cia XTAL1. Dzi�ki temu moliweb�dzie nawi�zanie komunikacji z programatorem i ponowne przeprogramowaniefusebitów.
Mikrokontrolery AVR mog� by� taktowane z trzech �róde� zegara:
1. Zegara zewn�trznego doprowadzonego do wej�cia XTAL1. Jest to rzadkowykorzystywana moliwo��. W tym trybie potrzebny jest zewn�trzny generatorzegara, którym moe by� np. inny procesor AVR. Umoliwia to synchronizacj�pracy obu kontrolerów.
2. Zegara wewn�trznego (uk�ad generatora RC). W tym trybie (jest on trybemdomy�lnym) procesor jest taktowany z w�asnego generatora, w efekcie nietrzeba doprowadza� zewn�trznego przebiegu zegarowego. Wad� generatorawewn�trznego jest jego stosunkowo niewielka stabilno��. W efekcie nie moeon by� wykorzystywany np. w programach, w których wymagana jest duastabilno�� zegara.
74 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
3. Zewn�trznego rezonatora kwarcowego. W tym celu do pinów XTAL1 i XTAL2naley pod��czy� rezonator kwarcowy o po�danej cz�stotliwo�ci. Tryb tenumoliwia taktowanie procesora ze stabilnego �ród�a zegara.
Fusebit RSTDISBL
Zwykle pin RESET procesora wspó�dzieli wyprowadzenie w pinem IO. Aby móc wykorzy-sta� pin RESET jako normalny pin IO, naley zaprogramowa� fusebit RSTDISBL. Po jegozaprogramowaniu dalsze programowanie procesora w trybie szeregowym jest nie-mo�liwe. Procesor mona nadal programowa� programatorem wysokonapi�ciowym lubrównoleg�ym.
Fusebit DWEN
Jego zaprogramowanie uruchamia moliwo�� wykorzystania interfejsu debugWire, przypomocy którego mona programowa� procesor oraz w ograniczonym stopniu debu-gowa� program. Tylko nieliczne procesory dysponuj� t� funkcj�, w dodatku wymagaona posiadania specjalnego programatora obs�uguj�cego debugWire.
SygnaturaWszystkie procesory AVR dysponuj� unikaln� sygnatur� nadawan� im w czasie procesuprodukcji. Sygnatura ta okre�la typ procesora i ilo�� pami�ci. Dzi�ki temu programator,odczytuj�c sygnatur�, moe weryfikowa�, czy pod��czony procesor odpowiada proce-sorowi wybranemu przez uytkownika. Sygnatura nie zawiera unikalnego dla kon-kretnego chipu numeru seryjnego.
Lockbity w AVR-libcDefinicje wspieranych przez dany model procesora lockbitów zawiera plik nag�ówkowy<avr/io.h>. Po jego w��czeniu mona w��czy� plik <avr/io.h> zawieraj�cy definicj�ronych makrodefinicji zwi�zanych z konfiguracj� lockbitów dla danego procesora.Po w��czeniu do programu dostajemy do dyspozycji makrodefinicj� LOCKBITS, którejmona przypisa� po�dan� kombinacj� lockbitów. Domy�ln� warto�ci� tego makra jest0xFF; w efekcie wszystkie lockbity pozostaj� niezaprogramowane. Je�li chcemy tozmieni�, naley symbolowi LOCKBITS przypisa� now� warto��, najlepiej pos�uguj�c si�predefiniowanymi w pliku <avr/io.h> symbolami. Poszczególne symbole mo�na ��czy�ze sob� przy pomocy iloczynu bitowego. Przyk�adowo:
LOCKBITS=(BLB1_MODE_3 & LB_MODE_3);
spowoduje wybranie trybu 3 dla kodu aplikacji oraz bootloadera. Wi�cej o trybachochrony pami�ci przy pomocy lockbitów znajdziesz w rozdziale 25.
Rozdzia� 2. � Programowanie mikrokontrolera 75
Makrodefinicj� LOCKBITS mona zainicjowa� tylko raz, przyporz�dkowanie jej innejwarto�ci w dalszych fragmentach programu nie odnosi adnego skutku.
Warto�� ustawionych lockbitów dla skompilowanego programu mona odczyta� z plikuelf przy pomocy polecenia:
avr-objdump -s -j .lock <plik ELF>
W efekcie dla warto�ci lockbitów okre�lonej powyej dla procesora ATMega88 powin-ni�my uzyska� taki rezultat:
test.elf: file format elf32-avr
Contents of section .lock: 830000 cc .
Warto�� lockbitów wynosi wi�c 0xCC.
Fusebity w AVR-libcPodobnie jak w przypadku lockbitów, fusebity okre�lone w programie zostan� umiesz-czone w specjalnej sekcji pliku elf, sk�d b�d� mog�y zosta� odczytane przez programsteruj�cy programatorem i uyte do konfiguracji procesora. Plik <avr/fuse.h> zawieradefinicje przydatne przy niskopoziomowym manipulowaniu fusebitami. Plik nag�ów-kowy <avr/io.h> zawiera definicje fusebitów uywanych przez wybrany model proceso-ra. W zaleno�ci od typu procesora fusebity mieszcz� si� w jednym, dwóch lub trzechbajtach. Ilo�� bajtów przeznaczonych na fusebity zwraca makro FUSE_MEMORY_SIZE.Definiowanie fusebitów nast�puje poprzez przypisanie warto�ci makru FUSES, np.:
Jak widzimy, makro to ma trzy pola odpowiadaj�ce poszczególnym bajtom przecho-wuj�cym fusebity. Dla procesorów, w których makro FUSE_MEMORY_SIZE zwraca war-to�� jeden, dost�pne jest tylko pole .low, dla procesorów, w których powysze makrozwraca 2, dost�pne s� pola .low i .high, w pozosta�ych procesorach dost�pne jest takepole .extended. Niestety, wykorzystuj�c powysze definicje, naley pami�ta�, w któ-rym bajcie jakie fusebity s� przechowywane. Ich pomylenie spowoduje nieprawid�owezaprogramowanie procesora, co moe si� nawet skoczy� jego zablokowaniem. Podobniejak w przypadku lockbitów, wane jest tylko pierwsze przypisanie warto�ci do makra,kolejne s� ignorowane. St�d te najlepiej tak� definicj� umie�ci� raz, na pocz�tkuprogramu.
76 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
Podobnie jak w przypadku lockbitów, wyliczone warto�ci fusebitów mona odczyta�z pliku elf:
avr-objdump -s -j .fuse test.elf
ADCNoiseReduction.elf: file format elf32-avr
Contents of section .fuse: 820000 62d1f9 b..
Wy�wietlona warto�� odpowiada poszczególnym bajtom przechowuj�cym fusebity.Dla procesorów, w których mieszcz� si� one w mniejszej ilo�ci bajtów, pokazanychzostanie ich mniej. Co wa�ne, najm�odszy bajt wy�wietlany jest z lewej, najstarszyz prawej strony.
Skorowidz
2-wire Serial Interface, Patrzinterfejs TWI
AADC Noise Reduction Mode,
Patrz tryb redukcji szumówadres, 104, 141, 142, 144, 146,