Wstęp 10
1. Zagadnienia ogólne 11
1.1. Rdzeń AVR 12
1.2. Rodzaje pamięci 13
1.2.1. Rejestry ogólnego przeznaczenia 14
1.2.2. Przestrzeń wejścia-wyjścia 15
1.2.3. Wewnętrzna pamięć SRAM 15
1.2.4. Stos w pamięci SRAM 15
1.2.5. Stos sprzętowy 15
1.2.6. Pamięć programu 16
1.3. Tryby adresowania 16
1.3.1. Pamięć danych, SRAM 17
1.3.2. Rejestry robocze 18
1.3.3. Przestrzeń wejścia-wyjścia 19
1.3.4. Pamięć programu – adresowanie stałych 20
1.3.5. Pamięć programu – adresowanie skoków 20
1.4. Podstawowe rejestry funkcyjne 21
1.4.1. Rejestr statusu – SREG 21
1.4.2. Wskaźnik stosu – SPH:SPL 23
1.4.3. Rejestry GPIOR (ang. General Purpose I/O Registers) 24
1.5. Bity sterujące 24
1.5.1. Bity konfiguracyjne (ang. fuse bits) 25
1.5.2. Bity zabezpieczające (ang. lock bits) 26
1.6. Zegar systemowy 26
1.6.1. Wewnętrzny, skalibrowany układ RC 26
1.6.2. Pętla fazowa PLL 28
1.6.3. Zewnętrzny układ RC 28
1.6.4. Rezonator kwarcowy i ceramiczny 29
1.6.5. Zewnętrzne źródło sygnału zegarowego 30
1.6.6. Zewnętrzne wykorzystanie zegara systemowego 30
1.6.7. Preskaler częstotliwości zegarowej 30
1.6.8. Czasy startu układu zegarowego 31
1.6.9. Kiedy nic nie działa 31
1.7. Układy zerujące 32
1.7.1. Układ POR 32
1.7.2. Zewnętrzne źródło zerujące 32
1.7.3. Układ BOD 33
1.7.4. Układ WDT 34
1.7.5. MCUSR i wszystko wiadomo 36
1.7.6. Do trzech razy sztuka 37
1.8. Zarządzanie energią 37
1.8.1. Wstrzymywanie systemu 38
1.8.2. Wstrzymywanie poszczególnych modułów 39
1.8.3. Porady dla szczególnie oszczędnych 39
1.9. System przerwań 40
1.9.1. Aktywność przerwań 40
1.9.2. Priorytety i wektory przerwań 40
1.9.3. Przerwanie inicjalizacyjne 41
1.9.4. Znaczniki przerwań 42
1.9.5. Obsługa przerwań 43
1.9.6. Podprogram obsługujący 44
1.10. Programowa modyfikacja pamięci flash 44
1.10.1. Rejestr sterujący SPMCSR 44
1.10.2. Adresowanie pamięci programu 45
1.10.3. Kasowanie strony pamięci programu 46
1.10.4. Ładowanie bufora tymczasowego 46
1.10.5. Zapis strony pamięci programu 47
1.10.6. Odczyt bitów sterujących 47
1.10.7. Bezpieczeństwo zapisu 48
1.11. Interfejsy programowania i uruchomieniowe 48
1.11.1. Równoległy interfejs programowania 49
1.11.2. Interfejs programowania SPI 49
1.11.3. Interfejs programowania HVS 51
1.11.4. Interfejs debugWire 51
2. Zintegrowane układy peryferyjne 53
2.1. Porty wejścia-wyjścia 54
2.1.1. Dedykowane rejestry funkcyjne 54
2.1.2. Tryb wejściowy 55
2.1.3. Tryb wyjściowy 56
2.1.4. Alternatywne funkcje wyprowadzeń 57
2.2. Moduł przerwań zewnętrznych 58
2.2.1. Typy przerwań zewnętrznych 58
2.2.2. Obsługa przerwań INTn 59
2.2.3. Obsługa przerwań PCIn 60
2.3. Pamięć EEPROM 60
2.3.1. Dedykowane rejestry funkcyjne 61
2.3.2. Zapis pamięci 62
2.3.3. Odczyt pamięci 63
2.3.4. Równomierne zużycie pamięci 64
2.3.5. Możliwe problemy 65
2.4. Układy licznikowe 65
2.4.1. Dedykowane rejestry funkcyjne 66
2.4.2. Mechanizm buforowy 67
2.4.3. Źródła impulsów zliczanych 68
2.4.4. PLL i praca asynchroniczna 69
2.4.5. Preskaler częstotliwości 70
2.4.6. Tryb pracy normalnej 71
2.4.7. Porównywanie 71
2.4.8. Przechwytywanie 73
2.4.9. Tryb CTC 74
2.4.10. Szybki tryb PWM 75
2.4.11. Zaawansowane tryby PWM 77
2.4.12. Dodatkowe funkcje PWM 78
2.4.13. Generacja przerwań 80
2.5. Moduł USART 81
2.5.1. Informacje podstawowe 81
2.5.2. Ramka transmisyjna 82
2.5.3. Dedykowane rejestry funkcyjne 83
2.5.4. Inicjalizacja i obsługa (tryb asynchroniczny) 87
2.5.5. Tryb synchroniczny 89
2.5.6. Tryb wieloprocesorowy 90
2.6. Moduł USI 91
2.6.1. Interfejs I2C - informacje wstępne 91
2.6.2. Interfejs SPI - informacje wstępne 96
2.6.3. Moduł USI - informacje podstawowe 98
2.6.4. Dedykowane rejestry funkcyjne 98
2.6.5. Tryb SPI 102
2.6.6. Tryb I2C 104
2.7. Komparator analogowy 107
2.7.1. Budowa i działanie 107
2.7.2. Dedykowane rejestry funkcyjne 108
2.8. Przetwornik A/C (ADC) 110
2.8.1. Informacje podstawowe 110
2.8.2. Część analogowa 111
2.8.3. Dedykowane rejestry funkcyjne 113
2.8.4. Działanie i obsługa modułu 117
2.8.5. Wynik przetwarzania 119
2.8.6. Przeciwdziałanie zakłóceniom 120
3. Asembler AVR 123
3.1. Język symboliczny 124
3.1.1. Translator 124
3.1.2. Składnia 124
3.1.3. Wyrażenia 125
3.1.4. Podstawowe dyrektywy asemblera 127
3.1.5. Definicje 129
3.1.6. Segmenty programu 129
3.1.7. Zmienne w pamięci danych 131
3.1.8. Stałe w pamięci programu i EEPROM 131
3.1.9. Makra 132
3.1.10. Translacja warunkowa 133
3.1.11. Preprocesor 135
3.1.12. Pliki nagłówkowe 135
3.2. Zbiór instrukcji 136
3.2.1. Rejestry robocze: formatowanie [CLR, SER] 138
3.2.2. Rejestry robocze: operacje na bitach [SBR, CBR] 138
3.2.3. Rejestry robocze: ładowanie wartością bezpośrednią [LDI] 139
3.2.4. Rejestry robocze: bitowa suma [OR, ORI] 139
3.2.5. Rejestry robocze: bitowy iloczyn [AND, ANDI] 140
3.2.6. Rejestry robocze: suma modulo 2 [EOR] 140
3.2.7. Rejestry robocze: logiczne przesuwanie [LSL, LSR, ROL, ROR] 140
3.2.8. Rejestry robocze: zamiana półbajtów [SWAP] 141
3.2.9. Rejestry robocze: zwiększanie i zmniejszanie [INC, DEC] 142
3.2.10. Rejestry robocze: arytmetyczne dodawanie [ADD, ADC, ADIW] 142
3.2.11. Rejestry robocze: arytmetyczne odejmowanie [SUB, SUBI, SBC, SBCI, SBIW] 143
3.2.12. Rejestry robocze: arytmetyczne przesuwanie [ASR] 144
3.2.13. Rejestry robocze: uzupełnienie jedynkowe [COM] 145
3.2.14. Rejestry robocze: uzupełnienie dwójkowe [NEG] 145
3.2.15. Rejestry robocze: kopiowanie [MOV, MOVW] 146
3.2.16. Rejestry robocze: kopiowanie i ładowanie bitów [BST, BLD] 146
3.2.17. Rejestry robocze: testowanie i porównywanie wartości [TST, CP, CPC, CPI] 147
3.2.18. Rejestr SREG: operacje na znacznikach [BSET, BCLR, SEC, CLC, SEN, CLN, SEZ, CLZ, SEI, CLI, SES, CLS, SEV, CLV, SET, CLT, SEH, CLH] 148
3.2.19. Pamięć danych: odczyt [IN, LDS, LD, LDD] 149
3.2.20. Pamięć danych: zapis [OUT, STS, ST, STD] 151
3.2.21. Pamięć danych: operacje na bitach [SBI, CBI] 152
3.2.22. Pamięć danych: operacje na stosie [PUSH, POP] 153
3.2.23. Pamięć programu: odczyt [LPM] 154
3.2.24. Pamięć programu: zapis [SPM] 154
3.2.25. Przebieg programu: skoki bezwarunkowe [IJMP, RJMP] 155
3.2.26. Przebieg programu: wywołania podprogramów [ICALL, RCALL] 156
3.2.27. Przebieg programu: powrót z podprogramów [RET, RETI] 156
3.2.28. Przebieg programu: testowanie rejestrów i pomijanie instrukcji [CPSE, SBRC, SBRS, SBIC, SBIS] 157
3.2.29. Przebieg programu: testowanie rejestru SREG i rozgałęzienia [BRBS, BRBC, BREQ, BRNE, BRCS, BRCC, BRSH, BRLO, BRMI, BRPL, BRGE, BRLT, BRHS, BRHC, BRTS, BRTC, BRVS, BRVC, BRIE, BRID] 159
3.2.30. Instrukcje specjalne [WDR, NOP, BREAK, SLEEP] 160
4. Środowisko rozwojowe 161
4.1. AV R Studio 162
4.1.1. Pierwsze spotkanie 163
4.1.2. Symulator 167
4.1.3. Programowanie 171
4.1.4. Emulacja ICE 172
4.1.5. Emulacja OCD 172
4.1.6. Uwagi 173
4.2. Programatory 173
4.2.1. Programator SPI 174
4.2.2. Programator HVS 175
4.2.3. Programator równoległy 177
4.2.4. Oprogramowanie PonyProg 177
4.2.5. Oprogramowanie ISP Programmer 179
4.2.6. Oprogramowanie AVRX 180
4.3. Projekt przykładowy 182
4.3.1. Założenia 182
4.3.2. Przedstawienie schematyczne 182
4.3.3. Tworzenie oprogramowania 182
4.3.4. Proces uruchomieniowy 185
4.3.5. Programowanie 186
5. Ćwiczenia i przykłady zastosowań 187
5.0. Wprowadzenie 188
5.0.1. Zestaw uruchomieniowy 188
5.0.2. Płyta uruchomieniowa ZL4AVR 188
5.0.3. Płyta uzupełniająca ZL4AVR-EB 192
5.0.4. Programy ćwiczeniowe i biblioteczne 197
5.1. Ćwiczenie 1. Podstawy programu asemblerowego; operacje na portach 197
5.1.1. Cel ćwiczenia 197
5.1.2. Obwód ćwiczeniowy 197
5.1.3. Opis ćwiczenia 198
5.1.4. Dla ambitnych 204
5.2. Ćwiczenie 2. Operacje arytmetyczno-logiczne; znaczniki rejestru SREG; pętle 204
5.2.1. Cel ćwiczenia 204
5.2.2. Obwód ćwiczeniowy 204
5.2.3. Kodowanie liczb 205
5.2.4. Operacje arytmetyczne na liczbach całkowitych 206
5.2.5. Operacje arytmetyczne na liczbach ułamkowych 213
5.2.6. Operacje logiczne 214
5.2.7. Dla ambitnych 215
5.3. Ćwiczenie 3. Podprogramy, przerwania i liczniki; sterowanie obciążeniami sieciowymi 216
5.3.1. Cel ćwiczenia 216
5.3.2. Obwód ćwiczeniowy 216
5.3.3. Wstęp do regulacji impulsowej 217
5.3.4. Opis ćwiczenia 220
5.3.5. Dla ambitnych 234
5.4. Ćwiczenie 4. Interfejsy równoległe; obsługa modułów alfanumerycznych LCD 234
5.4.1. Cel ćwiczenia 234
5.4.2. Obwód ćwiczeniowy 234
5.4.3. Opis ćwiczenia 235
5.4.4. Dla ambitnych 252
5.5. Ćwiczenie 5. Interfejsy szeregowe; obsługa układu RTC DS1307 poprzez magistralę I2C; zegar z datownikiem 252
5.5.1. Cel ćwiczenia 252
5.5.2. Obwód ćwiczeniowy 252
5.5.3. Opis ćwiczenia 253
5.5.4. Dla ambitnych 265
5.6. Ćwiczenie 6. Interfejsy szeregowe; odczyt telefonicznych kart chipowych 265
5.6.1. Cel ćwiczenia 265
5.6.2. Obwód ćwiczeniowy 265
5.6.3. Opis ćwiczenia 266
5.6.4. Dla ambitnych 273
5.7. Ćwiczenie 7. Interfejsy szeregowe; obsługa myszy PS/2 273
5.7.1. Cel ćwiczenia 273
5.7.2. Obwód ćwiczeniowy 273
5.7.3. Opis ćwiczenia 274
5.7.4. Dla ambitnych 291
5.8. Ćwiczenie 8. Interfejsy optyczne; regulator oświetlenia sterowany pilotem SIRC 291
5.8.1. Cel ćwiczenia 291
5.8.2. Obwód ćwiczeniowy 291
5.8.3. Opis ćwiczenia 293
5.8.4. Dla ambitnych 303
5.9. Ćwiczenie 9. Pamięć EEPROM i liczniki; prosty odtwarzacz melodii 304
5.9.1. Cel ćwiczenia 304
5.9.2. Obwód ćwiczeniowy 304
5.9.3. Opis ćwiczenia 305
5.9.4. Dla ambitnych 312
5.10. Ćwiczenie 10. Elementy czujnikowe; obsługa akcelerometru MXD2125 312
5.10.1. Cel ćwiczenia 312
5.10.2. Obwód ćwiczeniowy 312
5.10.3. Opis ćwiczenia 313
5.10.4. Dla ambitnych 324
5.11. Ćwiczenie 11. Przetwarzanie A/C; najprostszy oscyloskop cyfrowy 324
5.11.1. Cel ćwiczenia 324
5.11.2. Obwód ćwiczeniowy 324
5.11.3. Opis ćwiczenia 325
5.11.4. Dla ambitnych 331
5.12. Ćwiczenie 12. Przetwarzanie C/A; najprostszy generator funkcyjny 332
5.12.1. Cel ćwiczenia 332
5.12.2. Obwód ćwiczeniowy 332
5.12.3. Opis ćwiczenia 333
5.12.4. Dla ambitnych 338
5.13. Ćwiczenie 13. Przetwarzanie sygnałów (filtry IIR); iluminofonia 3-kanałowa 338
5.13.1. Cel ćwiczenia 338
5.13.2. Obwód ćwiczeniowy 338
5.13.3. Opis ćwiczenia 339
5.13.4. Dla ambitnych 350
Dodatki 351
Dodatek A. Zestawienie układów AVR 352
Dodatek B. Wybrane właściwości i charakterystyki elektryczne układu ATtiny26 355
B.1. Wartości graniczne 355
B.2. Wybrane wartości charakterystyczne 355
B.3. Wybrane charakterystyki 356
Dodatek C. Zestawienie rozkazów dla układu ATtiny26 361
Dodatek D. Zestawienie rejestrów funkcyjnych układu ATtiny26 365
Dodatek E. Słowo o kompilatorach i językach wyższego poziomu 366
Dodatek F. Przeciwdziałanie zakłóceniom 369
Dodatek G. Źródła informacji na temat układów AVR 371
Dodatek H. Tabela kodów ASCII 372
Dodatek I. Tabela kodów znakowych sterownika LCD HD44780 374
Literatura 376
Skorowidz 377