42

Język C dla mikrokontrolerów AVR. Od podstaw do

  • Upload
    lamtram

  • View
    233

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Język C dla mikrokontrolerów AVR. Od podstaw do
Page 2: Język C dla mikrokontrolerów AVR. Od podstaw do

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!

Page 3: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 4: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 5: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 6: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 7: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 8: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 9: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 10: Język C dla mikrokontrolerów AVR. Od podstaw do

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.

Page 11: Język C dla mikrokontrolerów AVR. Od podstaw do

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�

Page 12: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 13: Język C dla mikrokontrolerów AVR. Od podstaw do

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,

Page 14: Język C dla mikrokontrolerów AVR. Od podstaw do

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).

Page 15: Język C dla mikrokontrolerów AVR. Od podstaw do

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.

Page 16: Język C dla mikrokontrolerów AVR. Od podstaw do

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�

Page 17: Język C dla mikrokontrolerów AVR. Od podstaw do

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�

Page 18: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 19: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 20: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 21: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 22: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 23: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 24: Język C dla mikrokontrolerów AVR. Od podstaw do

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.

Page 25: Język C dla mikrokontrolerów AVR. Od podstaw do

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.

Page 26: Język C dla mikrokontrolerów AVR. Od podstaw do

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:

Page 27: Język C dla mikrokontrolerów AVR. Od podstaw do

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.

Page 28: Język C dla mikrokontrolerów AVR. Od podstaw do

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.

Page 29: Język C dla mikrokontrolerów AVR. Od podstaw do

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.

Page 30: Język C dla mikrokontrolerów AVR. Od podstaw do

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.

Page 31: Język C dla mikrokontrolerów AVR. Od podstaw do

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.

Page 32: Język C dla mikrokontrolerów AVR. Od podstaw do

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.

Page 33: Język C dla mikrokontrolerów AVR. Od podstaw do

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.

Page 34: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 35: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 36: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 37: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 38: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 39: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 40: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 41: Język C dla mikrokontrolerów AVR. Od podstaw do

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

Page 42: Język C dla mikrokontrolerów AVR. Od podstaw do