język c dla - forbot.pl · idź do • spis treści • przykładowy rozdział • skorowidz •...
TRANSCRIPT
Idź do
• Spis treści• Przykładowy rozdział• Skorowidz
• Katalog online
• Dodaj do koszyka
• Zamów cennik
• Zamów informacjeo nowościach
• Fragmenty książekonline
Helion SAul. Kościuszki 1c44-100 Gliwicetel. 32 230 98 63e-mail: [email protected]© Helion 1991–2011
Katalog książek
Twój koszyk
Cennik i informacje
Czytelnia
Kontakt
• Zamów drukowanykatalog
Język C dlamikrokontrolerów AVR.Od podstaw dozaawansowanych aplikacjiAutor: Tomasz Francuz
ISBN: 978-83-246-3064-6
Format: 158×235, stron: 568
Przedstawiamy przebojowy duet – język C i mikrokontroler AVR!
• Poznaj budowę i podstawy programowania mikrokontrolerów
• Dowiedz się, jak do swoich celów wykorzystać język C
• Naucz się rozwiązywać rzeczywiste problemy i tworzyć praktyczne rozwiązania
Mikrokontrolery AVR firmy Atmel stanowią dynamicznie rozwijającą się rodzinę układów. Dzięki
niskiej cenie, dużym możliwościom i dostępności darmowych narzędzi od lat niezmiennie cieszą
się dużą popularnością wśród hobbystów i osób profesjonalnie zajmujących się programowaniem
mikrokontrolerów.
Pewnym utrudnieniem dla polskich użytkowników AVR jest brak literatury na temat wykorzystania
do ich programowania języków wysokiego poziomu, takich jak C. Niniejsza książka jest próbą
wypełnienia tej luki. W sposób syntetyczny pokazuje różnice pomiędzy programowaniem
w języku C komputerów klasy PC i mikrokontrolerów. Omawia programowanie peryferii
dostępnych w mikrokontrolerach AVR w języku C, bibliotekę standardową oraz jej rozszerzenia
znane jako AVR-libc. Dzięki temu nawet osoby w niewielkim stopniu znające podstawy języka C
będą mogły bez problemów „przesiąść się” na programowanie mikrokontrolerów AVR. Z drugiej
strony książka opisuje zaawansowane techniki programowania, związane z obsługą bootloadera,
zabezpieczaniem i szyfrowaniem kodu aplikacji oraz realizacją najpowszechniej stosowanych
protokołów wymiany danych pomiędzy urządzeniami opartymi na mikrokontrolerach
i komputerami PC. Porusza także tematy związane ze specyfiką pisania aplikacji na
mikrokontrolery oraz wyszukiwaniem i usuwaniem błędów.
Podstawy programowania mikrokontrolerów AVR• Warsztat pracy programisty AVR
• Wprowadzenie do języka C na AVR
• Budowa programu i jego części składowe
• Korzystanie z zasobów sprzętowych mikrokontrolera
• Używanie rejestrów i różnych rodzajów pamięci
• Zastosowania przetwornika ADC
• Obsługa wyświetlaczy LCD
• Korzystanie z interfejsów
• Zapewnianie bezpieczeństwa kodu
Programowanie mikrokontrolerów jeszcze nigdy nie było tak proste!
Spis tre�ci
Wst�p ............................................................................................ 11Kody przyk�adów ........................................................................................................... 12Schematy ........................................................................................................................ 12Wymagane cz��ci ........................................................................................................... 12
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
Programy narz�dziowe ................................................................................................... 27Linker ....................................................................................................................... 27Program avr-size ...................................................................................................... 31Program avr-nm ........................................................................................................ 32Program avr-objcopy ................................................................................................ 33Program make .......................................................................................................... 36Pliki wynikowe ......................................................................................................... 43
Biblioteki ........................................................................................................................ 46Projekt biblioteki ...................................................................................................... 47Tworzenie biblioteki ................................................................................................ 48Do��czanie biblioteki do programu .......................................................................... 49Funkcje „przestarza�e” ............................................................................................. 50Nadpisywanie funkcji bibliotecznych ....................................................................... 50Usuwanie niepotrzebnych funkcji i danych .............................................................. 51
Rozdzia� 2. Programowanie mikrokontrolera ..................................................... 53Pod��czenie — uwagi ogólne ......................................................................................... 53
Problemy .................................................................................................................. 55Programatory ISP ........................................................................................................... 55
Budowa programatora .............................................................................................. 56Programator USBASP .............................................................................................. 59Kilka procesorów w jednym uk�adzie ...................................................................... 59
Programatory JTAG ....................................................................................................... 60Programator JTAGICE ............................................................................................. 61Programator JTAGICE mkII .................................................................................... 62
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
Lockbity ................................................................................................................... 71Fusebity .................................................................................................................... 71
Sygnatura ........................................................................................................................ 74Lockbity w AVR-libc ..................................................................................................... 74Fusebity w AVR-libc ...................................................................................................... 75
Rozdzia� 3. Podstawy j�zyka C na AVR ............................................................. 77Arytmetyka ..................................................................................................................... 77
Proste typy danych ................................................................................................... 77Arytmetyka sta�opozycyjna ...................................................................................... 81Arytmetyka zmiennopozycyjna ................................................................................ 87
Operacje bitowe .............................................................................................................. 95Reprezentacja binarna liczb ...................................................................................... 95Operacja iloczynu bitowego ..................................................................................... 96Operacja sumy bitowej ............................................................................................. 97Operacja sumy wy��czaj�cej .................................................................................... 98Operacja negacji bitowej .......................................................................................... 99Operacje przesuni�� bitowych ................................................................................ 100
Zasi�g zmiennych ......................................................................................................... 100Zmienne globalne ................................................................................................... 101Zmienne lokalne ..................................................................................................... 102Modyfikator const .................................................................................................. 103Wska�niki ............................................................................................................... 104Tablice .................................................................................................................... 109
Funkcje ......................................................................................................................... 112Przekazywanie parametrów przez warto�� i referencj� .......................................... 114Wywo�anie funkcji ................................................................................................. 114Rekurencyjne wywo�ania funkcji ........................................................................... 115
S�owa kluczowe ............................................................................................................ 116Operatory ............................................................................................................... 116Instrukcje steruj�ce ................................................................................................. 120
Preprocesor ................................................................................................................... 123Dyrektywa #include ............................................................................................... 124Dyrektywy kompilacji warunkowej ....................................................................... 124Dyrektywa #define ................................................................................................. 126
Pliki nag�ówkowe i �ród�owe ....................................................................................... 127Definicja a deklaracja ............................................................................................. 128S�owo kluczowe static ............................................................................................ 129S�owo kluczowe extern .......................................................................................... 130Dyrektywa inline .................................................................................................... 132Modyfikator register ............................................................................................... 136
Rozdzia� 4. Sekcje programu .......................................................................... 141Sekcje danych ............................................................................................................... 142
Sekcja .text ............................................................................................................. 142Sekcja .data ............................................................................................................ 142
Spis tre�ci 5
Sekcja .bss .............................................................................................................. 143Sekcja .eeprom ....................................................................................................... 143
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
Power-on Reset ...................................................................................................... 150Zewn�trzny sygna� RESET .................................................................................... 151Brown-out Detector ................................................................................................ 151Uk�ad Watchdog ..................................................................................................... 152
Zarz�dzanie poborem energii ....................................................................................... 156Usypianie procesora ............................................................................................... 157Wy��czanie uk�adu BOD ........................................................................................ 157Wy��czanie podsystemów procesora ...................................................................... 158Preskaler zegara ..................................................................................................... 159Inne sposoby minimalizowania poboru energii ...................................................... 160
Rozdzia� 6. Dynamiczna alokacja pami�ci ....................................................... 163Alokacja pami�ci w bibliotece AVR-libc ..................................................................... 164
Funkcja malloc ....................................................................................................... 166Funkcja calloc ........................................................................................................ 166Funkcja realloc ....................................................................................................... 166Funkcja free ............................................................................................................ 168
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
Rozdzia� 7. Wbudowana pami�� EEPROM ....................................................... 177Zapobieganie uszkodzeniu zawarto�ci pami�ci EEPROM ........................................... 178Kontrola odczytu i zapisu do pami�ci EEPROM .......................................................... 179
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
Rozdzia� 11. Opó�nienia ................................................................................... 217
Rozdzia� 12. Dost�p do portów IO procesora ..................................................... 221Konfiguracja pinu IO .................................................................................................... 221Manipulacje stanem pinów IO ...................................................................................... 225
Zmiana stanu portu na przeciwny ........................................................................... 225Ustawianie linii IO ................................................................................................. 226Zerowanie linii IO .................................................................................................. 226Makrodefinicja _BV() ............................................................................................ 227Uycie pól bitowych ............................................................................................... 227
Synchronizator .............................................................................................................. 228Przyk�ady praktyczne ................................................................................................... 230
Sterowanie wy�wietlaczem 7-segmentowym ......................................................... 230Pod��czenie przycisków ......................................................................................... 232Enkoder obrotowy .................................................................................................. 237Klawiatura matrycowa ........................................................................................... 242
Rozdzia� 13. Rejestry IO ogólnego przeznaczenia .............................................. 245Wykorzystanie innych rejestrów jako GPIOR .............................................................. 246
Rozdzia� 14. Przerwania ................................................................................... 249Obs�uga przerwa ......................................................................................................... 251
sei()/cli() ................................................................................................................. 254Atrybut naked i obs�uga przerwa w asemblerze ................................................... 254Modyfikator volatile ............................................................................................... 257Atomowo�� dost�pu do danych .............................................................................. 263Funkcje reentrant .................................................................................................... 266
Przyk�ady praktyczne ................................................................................................... 268Wy�wietlanie multipleksowane .............................................................................. 268Wy�wietlanie multipleksowane z regulacj� jasno�ci wy�wietlacza ........................ 272Obs�uga przycisków ............................................................................................... 276Obs�uga enkodera ................................................................................................... 279Klawiatura matrycowa ........................................................................................... 280
Rozdzia� 15. Przetwornik analogowo-cyfrowy .................................................... 283Wybór napi�cia referencyjnego .................................................................................... 284Multiplekser .................................................................................................................. 285Przetwornik ADC ......................................................................................................... 285
Tryb pojedynczej konwersji ................................................................................... 286Tryb ci�g�ej konwersji ............................................................................................ 287
Wej�cia pojedyncze i rónicowe ................................................................................... 287
Spis tre�ci 7
Wynik ........................................................................................................................... 288Wyzwalacze .................................................................................................................. 288Blokowanie wej�� cyfrowych ....................................................................................... 289Przerwania ADC ........................................................................................................... 289Precyzyjne pomiary przy pomocy ADC ....................................................................... 290Nadpróbkowanie ........................................................................................................... 291
U�rednianie ............................................................................................................ 292Decymacja i interpolacja ........................................................................................ 292
Przyk�ady ...................................................................................................................... 292Termometr analogowy LM35 ................................................................................. 293Klawisze ................................................................................................................. 295
Rozdzia� 16. Komparator analogowy ................................................................. 301Funkcje dodatkowe ....................................................................................................... 302
Blokowanie pinów .................................................................................................. 302Wyzwalanie zdarze timera ................................................................................... 302Wybór wej�cia komparatora ................................................................................... 302Wyzwalanie przetwornika ADC ............................................................................. 303
Rozdzia� 17. Timery ......................................................................................... 305Sygna� taktuj�cy ........................................................................................................... 306
Wewn�trzny sygna� taktuj�cy ................................................................................. 306Zewn�trzny sygna� taktuj�cy .................................................................................. 308
Licznik .......................................................................................................................... 308Uk�ad porównywania danych ....................................................................................... 309
Wp�yw na piny IO .................................................................................................. 309Modu� przechwytywania zdarze zewn�trznych .......................................................... 310
Eliminacja szumów ................................................................................................ 311Komparator jako wyzwalacz zdarzenia ICP ........................................................... 311
Tryby pracy timera ....................................................................................................... 312Tryb prosty ............................................................................................................. 312Tryb CTC ............................................................................................................... 315Tryby PWM ........................................................................................................... 316Uk�ad ochronny ...................................................................................................... 321Modulator sygna�u wyj�ciowego ............................................................................ 322
Miernik cz�stotliwo�ci i wype�nienia ........................................................................... 323Realizacja RTC przy pomocy timera ............................................................................ 326
Realizacja sprz�towa .............................................................................................. 327Realizacja programowa .......................................................................................... 328
Rozdzia� 18. Obs�uga wy�wietlaczy LCD ........................................................... 331Obs�uga wy�wietlaczy alfanumerycznych .................................................................... 332
Funkcje biblioteczne .............................................................................................. 337Definiowanie w�asnych znaków ............................................................................. 342Przyk�ad — menu ................................................................................................... 345
Obs�uga wy�wietlaczy graficznych .............................................................................. 354
Rozdzia� 19. Interfejs USART ........................................................................... 367Interfejsy szeregowe ..................................................................................................... 367Interfejs USART ........................................................................................................... 368
Interfejs USART mikrokontrolera AVR ................................................................ 371Przyk�ady ...................................................................................................................... 375
Po��czenie mikrokontroler – komputer PC ............................................................. 375RS485 ..................................................................................................................... 383
8 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
Rozdzia� 20. Interfejs SPI ................................................................................. 391Inicjalizacja interfejsu ................................................................................................... 394
Ustawienie pinów IO .............................................................................................. 395Zegar taktuj�cy ....................................................................................................... 396Procesor w trybie Master SPI ................................................................................. 396Procesor w trybie slave SPI .................................................................................... 397
Przyk�ady ...................................................................................................................... 397Po��czenie AVR-AVR ........................................................................................... 397Po��czenie AVR – rejestr szeregowy ..................................................................... 403
Interfejs USART w trybie SPI ...................................................................................... 408Taktowanie magistrali SPI ..................................................................................... 409Tryb pracy SPI ....................................................................................................... 409Format ramki danych ............................................................................................. 409Konfiguracja interfejsu ........................................................................................... 410
Rozdzia� 21. Interfejs TWI ................................................................................ 413Tryb multimaster .......................................................................................................... 416Inicjalizacja interfejsu ................................................................................................... 417Procesor w trybie I2C master ....................................................................................... 417
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
Rozdzia� 24. Interfejs 1-wire ............................................................................. 465Realizacja master 1-wire na AVR ................................................................................ 469
Realizacja master 1-wire przy pomocy pinów IO ................................................... 469Realizacja master 1-wire przy pomocy interfejsu USART ..................................... 472Wysokopoziomowe funkcje obs�ugi 1-wire ........................................................... 477
Termometr cyfrowy DS1820 ........................................................................................ 480
Spis tre�ci 9
Rozdzia� 25. Bootloader ................................................................................... 483Pami�� NRWW i RWW ............................................................................................... 483Bity konfiguracyjne bootloadera .................................................................................. 485
Konfiguracja lockbitów z poziomu aplikacji .......................................................... 486Programowanie pami�ci FLASH .................................................................................. 487Wykorzystanie przerwa w kodzie bootloadera ........................................................... 489
Usuwanie tablicy wektorów przerwa .................................................................... 490Skrócenie tablicy wektorów przerwa .................................................................... 491
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� 27. Bezpiecze�stwo kodu ................................................................... 517Metody �amania zabezpiecze ...................................................................................... 517Bezpieczne uaktualnianie aplikacji ............................................................................... 518Nota AVR231 — AES Bootloader ............................................................................... 519
Ustawienie bitów konfiguracyjnych ....................................................................... 524Przygotowanie aplikacji ......................................................................................... 526Wczytywanie uaktualnienia .................................................................................... 527
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
Pliki .S .......................................................................................................................... 536Wykorzystanie rejestrów w asemblerze ................................................................. 537Przyk�ady ............................................................................................................... 541
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
Skorowidz .................................................................................... 559
Rozdzia� 2.
Programowaniemikrokontrolera
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.
Rysunek 2.1.Przyk�ad pod��czeniaprogramatora ISPdo mikrokontroleraATMega88
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
Rysunek 2.2.Rozk�ad sygna�ówstandardowychprogramatorów.Kwadratem oznaczonowyprowadzenieo numerze 1
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.
Rysunek 2.6.Rozk�ad sygna�ówna z��czu JTAG.Pin 1 oznaczonokwadratem
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
Sygna� Kierunek Opis
SDI Wej�cie Wej�cie danychSII Wej�cie Wej�cie instrukcjiSDO Wyj�cie Wyj�cie danychSCI Wej�cie Wej�cie zegarowe
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).
Rysunek 2.12.Okno wyboruprocesora. B�dzieon programowanyprzy pomocybootloaderaw trybie DFU
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
Rysunek 2.13.Proces uaktualnianiaoprogramowaniaprzy pomocyprogramu FLIP
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).
Wywo�anie:avrdude -p m88 -u -U flash:w:test.hex -U eeprom:w:test.eep -U efuse:w:0xff:m -U�hfuse:w:0x89:m -U lfuse:w:0x2e:m
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.:
FUSES = { .low=LFUSE_DEFAULT, .high=(FUSE_BOOTSZ0 & FUSE_BOOTSZ1 & FUSE_EESAVE & FUSE_SPIEN), .extended=EFUSE_DEFAULT, };
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,
147, 148akcelerometr, 391algorytm
XMODEM, 512arytmetyka
sta�opozycyjna, 15, 81, 83, 85zmiennopozycyjna, 81, 82, 87
asembler, 142, 252, 254, 529,536, 538
Atmel, 15, 17, 55, 64, 82, 456,464, 497, 507, 552
atomowo��, Patrz dost�patomowy
atrybutalways_inline, 549const, 549depreciated, 50flatten, 549ISR_NAKED, 254naked, 145, 550noclone, 550noinline, 550nonnull, 550noreturn, 551optimize, 551PROGMEM, 142, 349pure, 549SIGNAL, 251
used, 48volatile, 212warn_unused_result, 551weak, 33, 50
AVR Studio, Patrz programAVR Studio
Bbiblioteka, 46, 48
AVR-libc, 15, 70, 74, 75,137, 138, 141, 145, 147,152, 157, 159, 181, 183,190, 211, 217, 227, 249,267, 483, 520
Joerga Wunscha, 336kolejno�� przeszukiwania, 49libc, 93libm.a, 88libprintf_flt, 93libprintf_min, 93libusb, 460LUFA, 464zewn�trzna, 88
bity zabezpieczaj�ce BLB, 485,486, 487
b��d e, 89b��d reprezentacji, 89bootloader, 53, 67, 146, 249,
464, 483, 487, 489, 496, 499,504, 507, 509, 520
bootsektor, 484breakpoint, Patrz pu�apkaBrown-out Detector, 151Brown-out Reset Circuit, Patrz
reset Power-on Resetbufor, 393
74XX244, 57
cykliczny, 186wej�ciowy, 160wyj�ciowy, 56
bus keeper, 193
CCamer Dean, 464Cesko Igor, 459char, Patrz typ danych znakoweClear Timer on Compare Match,
Patrz tryb CTCClock Prescale Register, Patrz
rejestr CLKPRCodeBlocks, 18Compare Match, 309, 314, 318Complex Data Types, Patrz typ
danych z�oony, Patrz typdanych prosty
Controller Area Network, Patrzinterfejs CAN
Counter, Patrz licznikCRC, 511, 514, 520, 521Cyclic Redundancy Code, Patrz
CRCcykl oczekiwania, 193, 194czas martwy, Patrz generator
czasu martwegocz�stotliwo��, 22, 58, 59, 72,
149, 159, 178, 217, 218, 306,316, 317, 318, 319, 323, 417próbkowania, 283
czujnik temperatury, 391
560 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
DDaisy-chain JTAG mode, Patrz
konfiguracja �acuchowaDead Time Generator, Patrz
generator czasu martwegodebugowanie, 60, 61, 63, 64, 74,
101, 141, 161, 164, 529, 544,552, 553, 554, 556
decymacja, 292definicja, 128, 130
EEMEM, 182symbolu, Patrz symbolTW_STATUS_MASK, 416
deklaracja, 128, 130Device Firmware Update, Patrz
urz�dzenie DFUDevice Firmware Uploader, 507DFU, 67Digital To Analog Converter,
Patrz przetwornik DACdioda LED, 53, 230, 231, 275,
332, 333disasemblacja, 556d�ugo�� kodu, 31, 32dost�p atomowy, 263, 264, 268dyrektywa
%elif, 40%else, 40%if, 40#define, 103, 104, 126#elif, 125#else, 125#endif, 125#if, 124#ifdef, 124, 125#ifndef, 124, 125#include, 124, 128defined, 125extern, 135inline, 132kompilacji warunkowej, 124warunkowa, 40
Eeavesdropping, 518EEPROM Address Register,
Patrz rejestr EEAREEPROM Control Register, Patrz
rejestr EECREEPROM Data Register, Patrz
rejestr EEDR
ekspander, 403, 404, 436enkoder obrotowy, 230, 237,
242, 279Executable and Linkable Format,
Patrz plik elfExternal Memory Interface,
Patrz interfejs XMEM, Patrzinterfejs XMEM
Ffa�sz, Patrz typ danych boolFault Protection Interrupt Enable,
Patrz flaga FPIEFault Protection Interrupt Flag,
Patrz flaga FPFFault Protection Unit, Patrz
uk�ad ochronnyFerroelectric RAM, Patrz
pami�� FRAMflaga, 251, 254
bitowa, 246Busy, 336FPF, 322FPIE, 322ICF, 311, 319OCF, 309, 319RXCIE, 375SPIF, 396TOV, 319TWIE, 417TXCIE, 375TXCO, 476UDRIE, 375USIOIE, 449USIOIF, 452USISIE, 449WCOL, 396
FLexible In-system Programmer,Patrz program FLIP
Frame, Patrz ramkaFree Running Mode, Patrz tryb
ci�g�ej konwersjiFTDI, 456, 457funkcja, 47, 108, 112, 126, 132,
535, 549, 550, 551_delay_loop_, 219_delay_ms, 217, 219_delay_us, 217, 219adres, 144asynchroniczna, 249atof, 91bus keeper, 194, 195calloc, 166
dtostre, 90dtostrf, 91eeprom_busy_wait, 185eeprom_is_ready, 185eeprom_read_, 183, 184eeprom_update_, 183, 185eeprom_write_, 183, 184fprintf, 95free, 165, 168, 171fscanf, 95inline, 134, 135, 549main, 144, 145malloc, 165, 166, 506MD5, 512moduluj�ca, 322nie reentrant, 267obs�ugi przerwa, 101, 251opó�niaj�ca, 217parametry, 114printf, 92, 95prototyp, 113, 128, 130przeci�anie, 113Read_4kB, 196realloc, 166reentrant, 249, 250, 266reentry, 170rekurencyjna, 115, 165, 266scanf, 95SHA, 512ShowOnLED, 271snprintf, 95sscanf, 94static inline, 127statyczna, 135strsep, 107strtod, 92strtok_r, 107switch, 144void, 251wdt_enable, 145Write_4kB, 196wywo�anie, 114, 537
fusebit, 53, 55, 61, 64, 65, 70,71, 73, 75, 146, 150, 524BODLEVEL, 71, 151, 161BOOTRST, 72BOOTSZ, 72, 513CKDIV8, 22, 72, 159CKOUT, 73DWEN, 74, 161EESAVE, 72, 178HWBE, 497JTAGEN, 72RSTDISBL, 74, 151
Skorowidz 561
SPIEN, 72SUT, 73WDTON, 72, 152, 153, 161
GGeneral Purpose IO Registers,
Patrz rejestr IO ogólnegoprzeznaczenia
generatorczasu martwego, 320kwarcowy, 330wewn�trzny, 73, 307, 308zdarze, 311zewn�trzny, 73, 308
GNU/Linux, 18
HHeap, Patrz stertahttp://dfu-programmer.�sourceforge.net/, 497
http://realterm.sourceforge.�net//, 375
http://sourceforge.net/projects/�libusb-win32, 461
http://svn.savannah.nongnu.org,495
http://winavr.sourceforge.net/, 16http://www. atmel.com/, 17http://www. atmel.no/�beta_ware/, 15
http://www.atmel.com/dyn/resources/prod_�documents/doc7618.pdf, 508
http://www.atmel.com, 65http://www.atmel.com/dyn/�products/tools_card.asp?tool_id=3886, 497
http://www.avrfreaks.net/�index.php? module=�Freaks%20Files&func�=viewFile&id=3330�&showinfo=1, 520
http://www.cesko.host.sk, 459http://www.codeblocks.org, 18http://www.ftdichip.com/�FTDrivers.htm, 458
http://www.lancos.com/�prog.html, 70
http://www.obdev.at/products/�vusb/download.html, 461
http://www.usb.org, 456
Iinput capture, 311Input/Output Ports, Patrz port
wej�cia/wyj�ciainstrukcja
asm, 529, 535, 536break, 122continue, 123for, 217goto, 123if, 120kolejno��, 263MOVW, 537NOP, 229opó�niaj�ca, 229p�tla do..while, 122p�tla for, 122p�tla while, 121powrotu, 251RET, 251RETI, 251sei, 158sleep, 157SPM, 509switch, 120WDR, 152
In-system ProgrammingInterface, Patrz interfejs ISP
interfejs, 417, 4481-wire, 465, 469, 470, 472,
477, 481aWire, 62binarny, 530CAN, 367debugWire, 53, 55, 62, 63,
74, 552HVPP, 63HVSP, 63I2C, Patrz interfejs TWIISP, 53, 55, 58, 63, 72JTAG, 53, 55, 60, 61, 62,
63, 69, 72, 173, 176, 221,552, 556
pami�ci zewn�trznej, 221PDI, 53, 62, 63równoleg�y, 367, 453RS232, 368, 370, 375, 378,
386, 456, 458, 498RS485, 367, 383, 384, 386SPI, 55, 62, 367, 371, 391,
393, 397, 405, 449, 498inicjalizacja, 394nadajnik, 393odbiornik, 393
synchroniczny, 391, 413szeregowy, 354, 367, 413TPI, 53, 58TWI, 367, 391, 416, 437, 438
inicjalizacja, 417UART, 221, 370, 371, 386
odbiornik, 386pr�dko��, 372, 373
USART, 246, 367, 368, 374,375, 378, 379, 408, 469,472, 473, 475, 477nadajnik, 373, 374, 408odbiornik, 373, 374, 408
USB, 53, 58, 67, 367, 453, 454,455, 456, 460, 497, 498programowy, 461sprz�towy, 464, 507
USI, 447, 449, 472XMEM, 141, 144, 193
interpolacja, 292Interrupt Service Routine, Patrz
procedura obs�ugi przerwa
Kklawiatura, 295klawiatura matrycowa, 229, 230,
242, 244, 281kod
asemblerowy, 141binarny, 238Graya, 238, 239�ród�owy, 141
komentarz, 37komparator analogowy, 160,
301, 311, 321kompilacja, 23, 26, 47, 64, 128
warunkowa, 125kompilator, 123, 132
avr-gcc, 15, 18, 82, 88, 543gcc, 88, 142, 211, 520IAR, 520
kondensator odsprz�gaj�cy, 55konfiguracja
daisy-chain, Patrzkonfiguracja �acuchowa
�acuchowa, 62, 63pocz�tkowa, 71
kontrolerCAN, 391HD44780, 333KS0108, 355
kontynuacja linii, 37
562 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
konwersja, 283, 285, 287, 288,289, 291, 295
konwerter, 458koprocesor arytmetyczny, 87, 88
Llicznik, 305, 308, 309, 311, 315,
318, 319, 323, 447, 452linia, Patrz sygna�linia
adresowa, 195kontrolna, 193
lista modyfikowanychrejestrów, 535
litera� memory, 535lockbit, 65, 70, 71, 146, 485,
486, 496, 512, 524konfiguracja, 74LB, 525
Mmagistrala, 250
1-Wire, 163RS232, 369SCL, 413SDA, 413
makrodefinicja, 39, 126, 535, 536_BV, 227ATOMIC_BLOCK, 245,
264, 265BADISR_vect, 253boot_page_erase, 487boot_page_erase_safe, 487boot_page_write, 488boot_page_write_safe, 488boot_rww_busy, 488boot_spm_busy, 488boot_spm_busy_wait, 488cli, 254, 264, 265clock_prescale_, 159clock_prescale_set, 159EMPTY_INTERRUPT, 253FUSE_MEMORY_SIZE, 75GET_FAR_ADDRESS, 192GetAddr, 349ISR, 251LOCKBITS, 74NONATO MIC_BLOCK, 266pgm_read_, 191power_, 159PROGMEM, 190PSTR, 94
sei, 251, 254, 264, 265set_sleep_mode, 157sleep_bod_disable, 157sleep_cpu, 157sleep_disable, 157sleep_enable, 157sleep_mode, 157TW_STATUS, 438wdt_disable, 155wdt_enable, 155wdt_reset, 155
marker czasowy, 310maska bitowa, 227, 246master-slave, 379, 391, 413,
415, 437, 438, 439, 449, 451,452, 465, 466, 467, 469, 477
MCU Control Register, Patrzrejestr kontrolny
menuBuild, 23File, 25Fuse, 65LockBits, 65Program, 65Project, 26, 30, 200, 218, 490,
543, 545Tools, 64, 524View, 555
miernik cz�stotliwo�ci, 323miernik wype�nienia, 323mikrokontroler, Patrz procesormodulacja, 316, 322modulator sygna�u
wyj�ciowego, 322modu� przechwytywania
zdarze zewn�trznych, 310, 312modyfikator
const, 103, 189, 245extern inline, 135inline, 503register, 136, 137static, 267static inline, 135, 536volatile, 103, 138, 196, 217,
228, 229, 245, 257, 259,262, 279, 530
modyfikatory makr, 40multiplekser, 302multiplekser analogowy, 283, 285multipleksowanie, 269, 275, 405Multi-processor Communication
Mode, Patrz trybwieloprocesorowy MPCM
Nnadpróbkowanie, 291napi�cie, 56, 57, 58, 60, 63, 150,
151, 178, 231, 301referencyjne, 160, 161, 283,
284, 297rónica, 283, 287
No Read While Write, Patrzpami�� NRWW
numerwspó�dzielony ID, 457seryjny, 74, 519
OObjective Development, 457opcja
fdata-sections, 548ffunction-sections, 548finline-limit=n, 547flto, 548fmerge-constants, 548fno-inline, 547fwhole-program, 548mcall-prologues, 546mint8, 546mno-interrupts, 547mtiny-stack, 547
open-drain, 413operacja binarna, 95
iloczyn bitowy, 96, 98negacja bitowa, 99przesuni�cie bitowe, 100rotacja, 100suma bitowa, 97suma wy��czaj�ca, 98
operand, 531, 533sposób dost�pu, 531, 532typ, 531, 532wej�ciowy, 535wyj�ciowy, 535
operator, 116&, 105*&, 105.ascii, 540.asciz, 540.byte, 540.section, 540arytmetyczny, 116, 117bitowy, 116, 118dereferencji, Patrz operator *&hi8, 540kolejno��, 118, 119
Skorowidz 563
lo8, 540logiczny, 116, 118pm, 540porówna, 116, 117relacji, 89sizeof, 111wy�uskania, Patrz operator *&
opó�nienie, 199, 217, 219, 235dost�pu, 193
optymalizacja, 545, 548, 554optymalizator, 543Output Compare Register, Patrz
rejestr OCROversampling, Patrz
nadpróbkowanie
Ppakiet danych, 456pami��, 34, 53, 74, 249
adres, 148adresowanie, 77dynamiczna alokacja, 163,
164, 165, 166, 167, 169,171, 173
EEPROM, 61, 67, 71, 72, 77,143, 151, 177, 178, 179,180, 181, 182, 183, 185,186, 250, 422, 458, 497,554
FLASH, 24, 60, 67, 71, 72,77, 94, 142, 146, 177, 189,190, 191, 483, 484, 488,496, 509, 554
FLASH >64 kB, 192fragmentacja, 163, 164, 171FRAM, 427kasowanie, 72, 180mikrokontrolera, Patrz
pami�� FLASHmodyfikowanie, 185NRWW, 483odczyt, 180, 183, 191, 192RAM, 142, 148, 197RWW, 483SRAM, 24, 77, 94, 149, 177,
189, 193, 194, 195, 198, 554szeregowa, 391wewn�trzna, 148, 195, 197,
198, 201wyciek, 163, 165, 169zapis, 180, 184
zewn�trzna, 29, 147, 148,193, 194, 195, 197, 198,199, 201, 208, 422, 427, 458
zwalnianie, 169p�tla, Patrz instrukcjap�tla synchronizacji fazowej, 307Phase Locked Loop, Patrz p�tla
synchronizacji fazowejPID, 456, 457, 463pin, Patrz sygna�platforma sprz�towa, 19plik
.S, 529, 536/avr-libc/trunk/avr-libc/crt1/
gcrt1.S, 495<avr/eeprom.h>, 181<avr/fuse.h>, 75<avr/io.h>, 74, 533, 538<avr\boot.h>, 483<avr\eeprom.h>, 185<avr\interrupt.h>, 249<avr\io.h>, 221, 393<avr\pgmspace.h>, 94, 190<avr\power.h>, 156, 159<avr\sleep.h>, 156<avr\wdt.h>, 145, 152<math.h>, 89<stdfix.h>, 83<stdio.h>, 92<stdlib.h>, 90, 91, 164<stdlib_private.h>, 171<util/crc16.h>, 512<util/twi.h>, 416<util\delay.h>, 217, 218<util\delay_basic.h>, 219defines.h, 336dodawanie, 25elf, 43, 65, 68, 75, 146, 178hd44780.c, 336Intel HEX, 45, 65, 68, 70,
178, 554macros.inc, 495Makefile, 26, 34, 36, 49, 93,
208, 218nag�ówkowy, 35, 47, 127, 134obiektowy, 33, 47, 128opisu sprz�tu, 20rozszerzenie, 25sectionname.h, 495skryptu linkera, 204string.h, 107usbconfig-prototype.h, 461wynikowy, 146�ród�owy, 128
podsekcja, Patrz sekcjapointer, Patrz typ danych
wska�nikpooling, 181, 268 Patrz technika
cz�stego próbkowaniaport, Patrz sygna�
IO, 221, 225, 533równoleg�y, 56, 57, 70RS232, 58szeregowy, 19, 58, 70, 447UART, 250USB, 57, 58wej�cia/wyj�cia, 221, Patrz
port IOwyj�ciowy, 309
potencja� masy, 56prawda, Patrz typ danych boolpreprocesor, 123PRESENCE PULSE, 466, 476,
478preskaler, 152, 153, 155, 159,
286, 306, 307, 308, 318, 321,324, 328, 417
procedura obs�ugi przerwa,249, 251, 252, 253, 254, 256,260, 262, 266, 445, 449
procesorarchitektura, 28, 203AT90USB, 464ATMega, 61, 128, 145, 464ATMega128, 13, 176, 195,
199, 203, 486, 520ATMega256, 502, 504ATMega64, 193ATMega8, 520ATMega8-32U2, 497ATMega88, 13, 69, 75, 250,
252, 397ATTiny, 58, 64, 151, 447ATTINY, 268ATTiny26, 70ATTiny44, 13AVR architektura, 204AVR XMega, 58AVR32, 58, 60, 62cz�stotliwo��, 21peryferia, 20programowanie, 55rdze, 20, 159rejestr, 136, 144resetowanie, 149, 253sygnatura, 146typ, 19, 74
564 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
procesoru�pienie, 157, 160, 161, 326,
327, 328Product ID, Patrz PIDprogram
alokator, 171alokatora pami�ci
dynamicznej, 164ar, 28AVR Simulator 2, 552AVR Studio, 19, 64, 94AVR Studio 5, 15AVRDude, 59, 67, 68avr-gcc, 536avr-nm, 32avr-objcopy, 33, 46avr-objdump, 43avr-size, 31dfu-programmer, 507FLIP, 65, 497, 507linker, 27, 47, 93make, 18, 27, 28, 30, 33, 34,
36, 46Makefile, 495, 514narz�dziowy, 27PonyProg, 70Programmer’s Notepad, 205RealTerm, 375srec_cat, 512Typer Terminal, 375WinAVR, 15, 59, 67, 82, 205wine, 18winetricks, 18
programator, 19AVR Dragon, 63, 64AVRICE, 68AVRICE mkII, 62, 68AVRISP, 58, 64, 68AVRISP mkII, 58, 64, 68HW, Patrz programator
wysokonapi�ciowyISP, 55, 56JTAG, 60JTAGICE, 61JTAGICE mkII, 62równoleg�y, 53, 64, 74STK500, 68STK600, 68szeregowy, 53, 72, 74USBASP, 59wysokonapi�ciowy, 54, 63,
72, 74prototyp funkcji, 47
przerwanie, 152, 153, 155, 156,157, 158, 170, 176, 180, 196,202, 219, 245, 249, 250, 251,252, 254, 257, 264, 328,371, 402, 410, 448, 449,452, 489, 505ADC, 289, 290komparatora, 301OCIE, 309SPI, 393, 402, 406, 407, 408TIMERn_COMPx_vect, 309TIMn_CAPT_vec, 311TIMn_CAPT_vect, 318TIMn_COMP_vect, 313, 318TIMn_OVF_vect, 312, 315,
318TWI, 417, 444USART, 408USARTn_, 375USI, 448
przetwornikADC, 127, 160, 285, 287,
303, 317, 391analogowo-cyfrowy, Patrz
przetwornik ADCcyfrowo-analogowy, Patrz
przetwornik DACDAC, 317, 318, 319
Pulse Width Modulation, Patrztryb PWM
pu�apka, 176, 556, 557, 558
Rramka, 371, 373, 374, 386, 498rdze, 73Read Only Memory, Patrz
pami�� ROMRead While Write, Patrz pami��
RWWReal-Time Clock, Patrz uk�ad
zegarowyReduction Register, Patrz rejestr
PRRrejestr
AC, 337ACSR, 302ADC, 284, 287, 288ADCH, 212ADCSRA, 160, 287, 288,
291, 303ADCSRB, 303ADMUX, 160, 212, 285, 287CLKPR, 159
DDR, 373DDRn, 247DDRx, 221, 222, 226, 229, 322DIDR0, 289DIDRx, 160, 302DT, 321EEAR, 177, 180EECR, 177, 180, 181EEDR, 177, 180GPIOR, Patrz rejestr IO
ogólnego przeznaczeniaICR, 311ICRn, 213indeksowy, 138IO, 159, 245, 246, 538IO ogólnego przeznaczenia,
245, 246kontrolny MCUCR, 194kontrolny XMCRA, 194kontrolny XMCRB, 194, 197liczników, 211MCUSR, 154OCR, 309, 318, 319OCRn, 213OCRx, 247PIN, 310PINx, 221, 223, 224, 228,
229, 259PLLCSR, 307PORT, 373PORTn, 247PORTx, 221, 222, 223, 226,
229, 322preskalera, 306procesora, 144, 554PRR, 158przesuwaj�cy, 403przesuwny, 405przetwornika ADC, 211R0, 538R1, 490, 538R18-R27, 538R25, 537R2-R17, 538SMCR, 157SPCR, 394SPDR, 396SPSR, 394SREG, 251stosu, 144szeregowy, 403, 405TCCR, 309, 321TCCRnB, 311TCNT, 309, 319
Skorowidz 565
TCNTn, 213TIFR, 308, 309, 311TWAMR, 437TWAR, 246, 437TWBR, 417, 438TWCR, 417TWSR, 416, 417, 438tymczasowy, 213, 535, 538UBRR, 371, 408UBRRH, 246UBRRL, 246UCSR0A, 476UCSRA, 371, 374, 387UCSRB, 373UDR, 374USICR, 448, 450USIDR, 447, 451USISR, 450WDTCSR, 153Y, 538zatrzaskowy, 194
repeter, 414reset, 54, 61, 67, 71, 73
Power-on Reset, 150zewntrzny, 151
RESET PULSE, 466, 476, 478rezonator kwarcowy, 22rezystor, 13, 231, 233, 239, 296
podci�gaj�cy, 413, 416, 465rozdzielczo��, 319rozdzielczo�� pomiaru, 306
Ssekcja, 43, 189, 198, 199
.bootloader, 146
.bs, 141
.bss, 143, 164, 197
.data, 141, 142, 197
.debug_, 141
.eeprom, 141, 143
.fini, 141, 145
.fuse, 146
.init, 141, 144, 194
.jumptables, 144
.lock, 146
.noinit, 141, 143, 144, 154
.progmem.gcc, 513
.signature, 146
.text, 141, 142, 144
.trampolines, 144
.vectors, 142adres, 142, 144, 146, 147danych, 141, 142
eeprom, 182krytyczna, 262specjalna, 146
Serial Peripheral Interface,Patrz interfejs szeregowy
signed char, Patrz typ danychznakowe
Single Conversion Mode, Patrztryb pojedynczej konwersji
skryptdomy�lny, 28linkera, 28Makefile, 27, 34, 37, 147
Sleep Mode Control Register,Patrz rejestr SMCR
s�owo kluczowe, 116, 123__attribute_, 254asm, 529, 530const, 549extern, 130static, 104, 129volatile, Patrz modyfikator
volatilestabilizator impulsowy, 317stabilizator liniowy, 317sta�a
__malloc_margin, 165sterowanie kluczy mocy, 320sterta, 164, 165, 171, 172, 197,
199, 202, 554fragmentacja, 166
stos, 165, 172, 194, 196, 197,199, 208, 249, 490, 537,538, 554rejestr, 144
suma kontrolna, 509sygna�
+Vcc, 56aktywuj�cy, Patrz sygna�
wyzwalaj�cyanalogowy, 160, 290asynchroniczny, 307CKOUT, 73cyfrowy, 321IO, 62, 72, 73, 74, 160MISO, 55, 59MOSI, 55, 59RESET, 54, 55, 59, 60, 63,
64, 74, 149, 151, 152,153, 157
SCK, 55, 58, 59, 63synchroniczny, 307taktuj�cy, 306, 308TCK, 60
TDI, 60, 62TDO, 60, 62TMS, 60TPICLK, 64TPIDATA, 64wyzwalaj�cy, 321XTAL1, 64, 73
sygnatura, 74symbol, 126
__heap_end, 164__heap_start, 164__stack, 208
symetryczny szyfr blokowyAES, 519
symulatorAVR Studio, 20programowy, 19
synchronizator, 228szablon, 127szeroko�� impulsu, 316szum, 311szyfrowanie, 518, 519, 526
Ttablica, 109
element, 110rozmiar, 109, 112skoków, 144typ, 109wektorów przerwa, 251,
490, 492, 493, 494, 501,502, 513, 519, 540
wielowymiarowa, 110technika cz�stego
próbkowania, 230template, Patrz szablontermometr analogowy, 293termometr cyfrowy DS1820, 480timer, 219, 305, 308, 309, 312,
321Timer/Counter Control
Register, Patrz rejestr TCCRTimestamp, Patrz marker
czasowytransceiver, 368transmisja
asynchroniczna, 371synchroniczna, 368
trybasynchroniczny, 329, 330, 371ci�g�ej konwersji, 283, 287,
288, 293CTC, 315
566 J�zyk C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
trybemulacji SPI, 409, Patrz tryb
MSPIMFast PWM, 318FAST PWM, 309, 310full-duplex, 391g��bokiego u�pienia, 328I2C, 417modulacji, 322MPCM, 386MSPIM, 408multimaster, 413, 416o wysokiej pr�dko�ci, 413pojedynczej konwersji, 283,
286, 287, 290power save, 328pracy timera, 312prosty, 312PWM, 310, 316, 317, 321PWM z korekcj� fazy, 319PWM z korekcj� fazy
i cz�stotliwo�ci, 319redukcji szumów, 290SLEEP_MODE_PWR_SAVE,
330synchroniczny, 371, 380szybki, 413wieloprocesorowy MPCM, 371
Two Wire Serial Interface,Patrz interfejs TWI
typ danych_Accum, 83, 84_Fract, 83_Sat, Patrz typ danych
z saturacj�binarne, 95bool, 78ca�kowite, 77, 96char, 537, 538double, 88, 90float, 88, 89, 90, 94int, 79, 80�acuch znakowy, 86, 90, 92,
94, 103, 107porz�dkowy, 121prosty, 77sta�opozycyjne, 83, 86, 96symbole, 85unsigned char, 538wielobajtowe, 533wska�nik, 104, 107, 108,
109, 111wyliczeniowe, 80z saturacj�, 84
z�oony, 77zmiennopozycyjne, 77, 87,
93, 96, 118znakowe, 78
typ rekordu, 45
Uuk�ad
analogowy, 316BOD, 71, 151, 157, 160,
161, 179cyfrowy, 316detekcji zboczy, 308ochronny, 321porównywania danych, 309redukcji zak�óce, 321synchronizuj�cy, 308uk�ad nadzoruj�cy zasilanie,
Patrz uk�ad BODzegarowy, 326, 327, 328, 329
Universal Serial Interface, Patrzinterfejs USI
Universal Synchronous andAsynchronous serial Receiverand Transmitter, Patrzinterfejs USART
unsigned char, Patrz typ danychznakowe
urz�dzenieDFU, 67
USART in Master SPI Mode,Patrz tryb MSPIM
USB DFU Bootloader Datasheet,508
u�pienie, 290u�rednianie, 292
VVendor ID, Patrz VIDVID, 456, 457, 463
WWatchdog, 72, 144, 145, 152, 161
reset, 156Watchdog Timer Control
Register, Patrz rejestrWDTCSR
Wear Leveling, 182, 186, 497wektor
obs�ugi przerwania, 252, 253przerwa, 142RESET, 496, 497, 499, 507
while, Patrz instrukcja p�tlawhile
WinAVR, 16wska�nik, 105, 196, Patrz typ
danych wska�nikbyteIO, 245dost�p, 534wordIO, 245
wspó�czynnik wype�nienia, 316,317, 318, 319, 323
wydajno�� pr�dowa, 57wyj�cie
równoleg�e, 68szeregowe, 68
wy�wietlaczalfanumeryczny, 331, 332graficzny, 331, 354LCD, 127, 331LED, 405monochromatyczny, 99, 332
wy�wietlacz 7-segmentowyLED, 230, 268, 269, 270,271, 272, 273, 275, 277, 279
Zzabezpieczenie kodu, 517zak�ócenia, 290zarz�dzanie energi�, 156, 158,
159, 160, 290, 327, 328zatrzask, 228zegar, 72, 73, 149, 152, 158,
159, 178, 199, 228, 286, 306,311, 371, 394, 396, 456, 462RTC, 431, Patrz uk�ad
zegarowySCL, 413
zmienna, 136__malloc_heap_end, 164__malloc_heap_start, 164alokowana dynamicznie,
199, 201globalna, 100, 101, 131, 143,
196, 199, 259, 505, 554LDFLAGS, 29LIBDIRS, 29LIBS, 29lokalna, 100, 102, 196, 266,
505�acuchowa, 103OBJECTS, 29statyczna, 102, 143, 199, 490wspó�dzielona, 146