Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji. Wydanie II - ebook
Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji. Wydanie II - ebook
Mikrokontroler pod kontrolą!
- Podstawy budowy mikrokontrolerów, czyli jakie możliwości dają środowisko Atmel Studio i platforma Xplained z ATmega168/328
- Architektura i zestaw instrukcji, czyli dlaczego mikrokontrolery warto programować w języku C
- Efektywne pisanie prostych i skomplikowanych programów na AVR, czyli jak wykorzystać różne triki
Mikrokontrolery AVR to grupa układów oferujących ogromne możliwości. Każdy amator elektroniki i programowania wie, że można wykorzystać je na tysiąc sposobów, a prostota budowy, szybkość działania, bogactwo peryferii i wiele darmowych narzędzi czynią je tym bardziej atrakcyjnymi gadżetami. Jeśli chciałbyś zgłębić tajniki programowania mikrokontrolerów albo podszkolić własne umiejętności w tej dziedzinie, czas zajrzeć do tej książki!
W nowym wydaniu uwzględniono zmiany, jakie zaszły w świecie AVR w ciągu ostatnich 3 lat, czyli np. zmianę AVR Studio na Atmel Studio. Znajdziesz tu podstawy posługiwania się nowym IDE, tworzenia oraz debugowania w nim projektów. Dowiesz się więcej o zmianach w kompilatorze avr-gcc, a szczególnie o tzw. nazwanych przestrzeniach adresowych, które ułatwiły dostęp do danych umieszczonych w pamięci FLASH mikrokontrolera. Odkryjesz, jak wykorzystać piloty telewizyjne do sterowania pisanym programem i jak połączyć program w C z asemblerem. Miłośnicy LED-ów zrozumieją, jak obsługiwać wielokolorowe matryce z wykorzystaniem peryferii dostępnych w AVR oraz jak sprzętowo realizować wymianę danych z popularnymi diodami ze sterownikiem WS2812B. Jeśli chcesz, by mikrokontroler stał się Twoim sprzymierzeńcem, musisz przeczytać tę książkę!
- Mikrokontroler i jego otoczenie, programatory
- Arytmetyka i operacje bitowe
- Zarządzanie projektem i preprocesor
- Kontrola rdzenia i zarządzanie poborem energii
- Dynamiczna alokacja pamięci i wbudowana pamięć EEPROM
- Dostęp do pamięci FLASH i portów IO mikrokontrolera
- Rejestry IO ogólnego przeznaczenia
- Przerwania i timery
- Komparator i przetwornik analogowo-cyfrowy
- Obsługa wyświetlaczy i interfejsy (USART, SPI, TWI, USI, 1-wire)
- Łączenie kodu C i asemblera
- Bootloader i debugowanie programu
Mikrokontroler wielkich możliwości do Twoich usług!
Spis treści
Wstęp do wydania drugiego (13)
Wstęp (15)
- Kody przykładów (16)
- Schematy (16)
- Wymagane części (16)
- Wsparcie (18)
Rozdział 1. Jak zacząć, czyli instalacja środowiska (19)
- Atmel Studio 6 - podstawy (20)
- Rozpoczynamy pracę - nowy projekt (20)
- Opcje projektu (22)
- Atmel Studio - dodatki (27)
- Naggy (28)
- MarginOfError (28)
- Data Size Viewer (29)
- Doxygen Integrator (29)
- AnkhSVN (30)
- AVR w systemie GNU/Linux (30)
Rozdział 2. Mikrokontroler i jego otoczenie (33)
- Podłączenie zasilania (33)
- Odsprzęganie zasilania (34)
- Filtrowanie zasilania dla części analogowej procesora (35)
- Zasilacz (36)
- Łączenie mikrokontrolera z układami pracującymi w innej domenie napięciowej (39)
- Konwersja poziomów logicznych pomiędzy układami pracującymi z różnymi napięciami zasilającymi (40)
- Piny wejściowe i wyjściowe (40)
- Łączenie wyjścia procesora z układem pracującym z napięciem 5 V (43)
- Zastosowanie aktywnego konwertera (45)
- Konwersja z napięcia wyższego na niższe (45)
- Dzielnik rezystorowy (46)
- Użycie do konwersji napięć buforów scalonych (47)
- Bufor dwukierunkowy stosowany w magistralach typu open drain (47)
- Oscylatory zegarowe (49)
- Zasady wykorzystania zewnętrznego kwarcu (50)
- Generator kwarcowy 32768 Hz (52)
Rozdział 3. Programatory (53)
- Podłączenie - uwagi ogólne (54)
- Problemy (56)
- Programowanie AVR (56)
- Programatory ISP (57)
- Programatory (59)
- Programator AVRISP mkII (59)
- Programator USBASP (60)
- Programatory JTAG (60)
- Programator JTAGICE mkII (62)
- JTAGICEIII (62)
- AVROne! (63)
- AVR Dragon (63)
- Interfejs debugWIRE (67)
- Programowanie z poziomu AS6 - dlaczego warto korzystać z plików w formacie elf (68)
- Kilka procesorów i interfejs ISP (69)
- Kilka procesorów w jednym układzie (70)
- Programatory HV i równoległe (71)
- Tryb TPI (71)
- Programator Atmel-ICE (72)
- Uaktualnianie firmware narzędzi (73)
- Czy nie da się taniej? (73)
- Programowanie przy pomocy narzędzi dostarczonych przez firmę Atmel (74)
- Program AVRDUDE (75)
Rozdział 4. Na czym pracujemy, czyli ATmega168/328 Xplained Mini w skrócie (77)
- Podłączenie modułu (78)
- Xplained Mini w Atmel Studio (78)
- Piny IO (79)
- Pierwszy program (80)
- Wgrywamy pierwszy program (83)
Rozdział 5. Bity konfiguracyjne (85)
- Co to takiego? (85)
- Lockbity (86)
- Fusebity (86)
- Sygnatura (90)
- Konfiguracja fuse- i lockbitów w AVR-libc (90)
- Lockbity w AVR-libc (91)
- Fusebity w AVR-libc (91)
- Konfiguracja w Atmel Studio (92)
Rozdział 6. Arytmetyka i operacje bitowe (95)
- Arytmetyka (95)
- Reprezentacja binarna liczb (95)
- Proste typy danych (97)
- Arytmetyka stałopozycyjna (102)
- Arytmetyka zmiennopozycyjna (108)
- Operacje bitowe (116)
- Operacja iloczynu bitowego (116)
- Operacja sumy bitowej (117)
- Operacja sumy wyłączającej (118)
- Operacja negacji bitowej (119)
- Operacje przesunięć bitowych (120)
Rozdział 7. Podstawy języka C na AVR (123)
- Zasięg zmiennych (123)
- Zmienne globalne (124)
- Zmienne lokalne (125)
- Wskaźniki (127)
- Tablice (133)
- Struktury (137)
- Wskaźniki i struktury (138)
- Struktury anonimowe (139)
- Inicjalizacja pól struktury (139)
- Unie (140)
- Pola bitowe (141)
- Definicja a deklaracja (142)
- Funkcje (143)
- Przekazywanie parametrów przez wartość i referencję (145)
- Rekurencyjne wywołania funkcji (145)
- Słowa kluczowe (146)
- Operatory (146)
- Instrukcje sterujące (150)
Rozdział 8. Zarządzanie projektem i preprocesor (155)
- Preprocesor (155)
- Dyrektywa #include (156)
- Dyrektywy kompilacji warunkowej (157)
- Dyrektywa #define (158)
- Komentarze (160)
- Nazewnictwo (161)
- Literały (163)
- Podział kodu na pliki (165)
- Widoczność funkcji (169)
- Widoczność zmiennych - słowo kluczowe extern (170)
- Podkatalogi (172)
- Modyfikator const (173)
- Słowo kluczowe static (175)
- Dyrektywa inline (175)
- inline funkcja(); (177)
- static inline funkcja(); (178)
- extern inline funkcja(); (179)
- Modyfikator register (180)
Rozdział 9. Sekcje programu (183)
- Sekcje danych (184)
- Sekcja .text (184)
- Sekcja .data (184)
- Sekcja .bss (185)
- Sekcja .eeprom (186)
- Sekcje zawierające kod programu (186)
- Podsekcje .init[0-9\ (187)
- Podsekcje .fini[0-9\ (188)
- Sekcje specjalne (188)
- Sekcje a opcje kompilacji (188)
- Sekcje tworzone przez programistę (190)
- Umieszczanie sekcji pod wskazanym adresem (191)
Rozdział 10. Kontrola rdzenia i zarządzanie poborem energii (193)
- Źródła sygnału RESET (193)
- Power-on Reset (195)
- Zewnętrzny sygnał RESET (195)
- Brown-out Detector (195)
- Układ watchdog (196)
- Zarządzanie poborem energii (201)
- Usypianie procesora (201)
- Wyłączanie układu BOD (202)
- Wyłączanie podsystemów procesora (203)
- Preskaler zegara (203)
- Inne sposoby minimalizowania poboru energii (204)
Rozdział 11. Dynamiczna alokacja pamięci (207)
- Alokacja pamięci w bibliotece AVR-libc (209)
- Funkcja malloc (212)
- Funkcja calloc (212)
- Funkcja realloc (212)
- Funkcja free (214)
- Wycieki pamięci i błędne użycie pamięci alokowanej dynamicznie (214)
- Wykrywanie kolizji sterty i stosu (216)
- Metoda I - własne funkcje alokujące pamięć (217)
- Metoda II - sprawdzanie ilości dostępnej pamięci (217)
- Metoda III - marker (217)
- Metoda IV - wykorzystanie interfejsu JTAG lub debugWire (217)
- Metoda V - wzór w pamięci (219)
Rozdział 12. Wbudowana pamięć EEPROM (223)
- Kilka słów, czym jest EEPROM (223)
- Dostęp do EEPROM w AVR (224)
- Zapobieganie uszkodzeniu zawartości pamięci EEPROM (225)
- Kontrola odczytu i zapisu do pamięci EEPROM (226)
- Odczyt zawartości komórki pamięci (226)
- Zapis do komórki pamięci (226)
- Dostęp do EEPROM z poziomu AVR-libc (228)
- Deklaracje danych w pamięci EEPROM (228)
- Funkcje realizujące dostęp do pamięci EEPROM (230)
- Inne funkcje operujące na EEPROM (232)
- Techniki wear leveling (233)
- EEPROM i awaria zasilania (235)
- Problem atomowości przy dostępie do EEPROM (241)
- Zapis do EEPROM z użyciem przerwań (241)
Rozdział 13. Dostęp do pamięci FLASH (245)
- Wskaźniki wykorzystujące przestrzenie adresowe (248)
- Jak to bywało dawniej... (252)
- Dostęp do pamięci FLASH > 64 kB (253)
- Typy 24-bitowe (254)
Rozdział 14. Dostęp do 16-bitowych rejestrów IO (255)
- Dostęp do 16-bitowego rejestru ADC (255)
- Dostęp do 16-bitowych rejestrów timerów (256)
Rozdział 15. Zwalniamy, czyli kiedy opóźnienia są konieczne (259)
- Opóźnienia przy zmiennym taktowaniu (263)
- Wykorzystanie timerów do realizacji opóźnień (265)
Rozdział 16. Pliki z danymi - jak je dodawać do projektu? (267)
- Kompilacja plików binarnych (268)
- Łączenie plików obiektowych z projektem (270)
- Dostęp do danych binarnych (273)
- Dostęp do danych z wykorzystaniem przestrzeni adresowych (275)
Rozdział 17. Dostęp do portów IO mikrokontrolera (277)
- Konfiguracja pinu IO (278)
- Manipulacje stanem pinów IO (282)
- Zmiana stanu portu na przeciwny (282)
- Ustawianie linii IO (283)
- Zerowanie linii IO (283)
- Makrodefinicja _BV() (283)
- Użycie pól bitowych (284)
- Synchronizator (285)
- Przekazywanie rejestru jako parametru funkcji (286)
- Przykłady praktyczne (287)
- Sterowanie wyświetlaczem 7-segmentowym (287)
- Podłączenie przycisków (290)
- Enkoder obrotowy (294)
- Klawiatura matrycowa (299)
Rozdział 18. Rejestry IO ogólnego przeznaczenia (303)
- Wykorzystanie innych rejestrów jako GPIOR (305)
Rozdział 19. Przerwania (307)
-
- Czym są przerwania? (307)
- Przerwania maskowalne (308)
- Źródła przerwań (309)
- Wektory przerwań (311)
- Obsługa przerwań (312)
- Puste wektory przerwań (314)
- Puste przerwania (314)
- Współdzielenie kodu przez przerwania (315)
- sei()/cli() (316)
- Atrybut naked i obsługa przerwań w asemblerze (317)
- Modyfikator volatile (319)
- Atomowość dostępu do danych (324)
- Funkcje reentrant (327)
- Przykłady praktyczne (328)
- Wyświetlanie multipleksowane (329)
- Wyświetlanie multipleksowane z regulacją jasności wyświetlacza (333)
- Obsługa przycisków (336)
- Obsługa enkodera (339)
- Klawiatura matrycowa (340)
Rozdział 20. Timery (343)
- Sygnał taktujący (344)
- Wewnętrzny sygnał taktujący (344)
- Zewnętrzny sygnał taktujący (345)
- Licznik (346)
- Układ porównujący (346)
- Wpływ na piny IO (347)
- Moduł przechwytywania zdarzeń zewnętrznych (348)
- Eliminacja szumów (349)
- Komparator jako wyzwalacz zdarzenia ICP (349)
- Tryby pracy timera (349)
- Tryb prosty (349)
- Tryb CTC (352)
- Tryby PWM (353)
- Układ ochronny (358)
- Modulator sygnału wyjściowego (359)
- Miernik częstotliwości i wypełnienia (360)
Rozdział 21. RTC - czyli trochę o zegarach (365)
-
- Realizacja sprzętowa (366)
- Realizacja programowa (366)
- Czas drogą radiową, czyli DCF77 (369)
- Trochę więcej o DCF77 (369)
- Dekodowanie danych (370)
- Funkcje konwersji czasu (372)
- Moduł odbiornika DCF77 (372)
Rozdział 22. Komparator (379)
- Funkcje dodatkowe (380)
- Blokowanie pinów (380)
- Wyzwalanie zdarzeń timera (380)
- Wybór wejścia komparatora (380)
- Wyzwalanie przetwornika ADC (381)
Rozdział 23. Przetwornik analogowo-cyfrowy (383)
- Wybór napięcia referencyjnego (384)
- Co to jest LSB? (385)
- Kalibracja ADC (386)
- Nadpróbkowanie (387)
- Uśrednianie (388)
- Decymacja i interpolacja (389)
- Jak zwiększyć precyzję pomiarów? (389)
- Multiplekser (390)
- Blokowanie pinów cyfrowych (391)
- Przetwornik ADC (392)
- Tryb pojedynczej konwersji (393)
- Tryb ciągłej konwersji (393)
- Wejścia pojedyncze i różnicowe (394)
- Wynik (395)
- Wyzwalacze (395)
- Przerwania ADC (396)
- Precyzyjne pomiary przy pomocy ADC (397)
- Przykłady (399)
- Termometr analogowy LM35 (399)
- Klawisze (401)
Rozdział 24. Obsługa alfanumerycznych wyświetlaczy LCD (407)
- Obsługa wyświetlaczy alfanumerycznych (408)
- Funkcje biblioteczne (413)
- Definiowanie własnych znaków (418)
- Transakcyjna obsługa LCD (420)
- Przykład - menu (430)
Rozdział 25. Monochromatyczne wyświetlacze graficzne (439)
- Wizyta w muzeum, czyli wyświetlacze wykorzystujące KS0108 (441)
- Moduły wykorzystujące kontroler ST7565R (450)
- Budowa i funkcje kontrolera ST7565R (451)
- Funkcje specjalne kontrolera (457)
- Obracanie obrazu (457)
- Regulacja kontrastu (458)
- Numer pierwszej wyświetlanej linii (459)
- Czcionki (460)
- Mała optymalizacja (465)
- Podwójne buforowanie (467)
- Adres początku wyświetlania obrazu (468)
- Menu (469)
- Menu oparte na piktogramach (471)
Rozdział 26. Interfejs USART (477)
- Interfejsy szeregowe (477)
- Interfejs USART (478)
- Format transmisji danych (480)
- Interfejs USART mikrokontrolera AVR (482)
- Szybkość transmisji (482)
- Dobór kwarcu (484)
- Formaty ramek danych (484)
- Nadajnik i odbiornik USART (485)
- Kontrola poprawności danych (486)
- USART z Xplained Mini (487)
- Terminal (487)
- Wykorzystanie przerwań (488)
- Równoczesny dostęp do USART z wielu "wątków" (493)
- Dostęp do USART z wykorzystaniem strumieni (495)
- Metoda get (496)
- Metoda put (496)
- Otwieranie strumienia (497)
- Połączenie mikrokontroler - mikrokontroler (498)
- Tryb synchroniczny pracy USART (499)
- RS485 (504)
- Tryb MPCM (506)
- Komputer w charakterze urządzenia master MPCM (509)
Rozdział 27. Interfejs SPI (511)
- Inicjalizacja interfejsu (513)
- Ustawienie pinów IO (514)
- Zegar taktujący (516)
- Procesor w trybie Master SPI (516)
- Procesor w trybie slave SPI (516)
- Przykłady (517)
- Połączenie AVR - AVR (517)
- Połączenie AVR - rejestr szeregowy (522)
- Interfejs USART w trybie SPI (526)
- Taktowanie magistrali SPI (527)
- Tryb pracy SPI (528)
- Format ramki danych (528)
- Konfiguracja interfejsu (528)
Rozdział 28. Interfejs TWI (531)
- Tryb multimaster (534)
- Inicjalizacja interfejsu (535)
- Mikrokontroler w trybie I2C master (535)
- Bity START i STOP (535)
- Podstawowe funkcje do współpracy z I2C (536)
- Współpraca z zewnętrzną pamięcią EEPROM (539)
- Współpraca z zewnętrzną pamięcią FRAM (544)
- Umieszczanie zmiennych w zewnętrznej pamięci EEPROM (545)
- Współpraca z zegarem RTC (547)
- Obsługa ekspandera IO PCF8574 (551)
- Procesor w trybie I2C slave (552)
- Przykład (555)
Rozdział 29. Interfejs USI (563)
- 4-bitowy licznik i zegar (563)
- Przerwania USI (564)
- Zmiana pozycji pinów (565)
- Wykorzystanie interfejsu USI w trybie SPI (566)
- Tryb SPI master (566)
- Tryb SPI slave (567)
Rozdział 30. Interfejs 1-wire (569)
- Realizacja master 1-wire na AVR (572)
- Realizacja master 1-wire przy pomocy pinów IO (573)
- Realizacja master 1-wire przy pomocy interfejsu UART (576)
- Wysokopoziomowe funkcje obsługi 1-wire (581)
- Termometr cyfrowy DS1820 (584)
Rozdział 31. Dużo LED-ów, dużo zabawy (587)
- Matryce LED (587)
- Projekt PCB i zasilanie (588)
- Układ z matrycą dwukolorową (590)
- Sterowanie matrycą (591)
- Sterownik WS2812B (593)
- Zasilanie (595)
- Bit banging (596)
- Wykorzystanie SPI (597)
Rozdział 32. Piloty TV (601)
- Część sprzętowa, czyli odbiornik IR (603)
- Część programowa, czyli standardy kodowania (604)
- Standard NEC i pokrewne (604)
- RC5 (610)
- Kod Manchester (610)
- Dekoder RC5 (611)
- Inne standardy kodowania (615)
Rozdział 33. Łączenie kodu C i asemblera (617)
- ABI (618)
- Słowo kluczowe asm (621)
- Typy operandów (623)
- Dostęp do portów IO (625)
- Dostęp do danych wielobajtowych (626)
- Dostęp do wskaźników (627)
- Lista modyfikowanych rejestrów (627)
- Wielokrotne użycie wstawki asemblerowej (628)
- Pliki .S (629)
- Definicje (630)
- Definicja symboli globalnych (630)
- Dyrektywy asemblera (635)
- Wywołanie funkcji języka C z asemblera (637)
Rozdział 34. Bootloader (639)
- Pamięć NRWW i RWW (640)
- Bity konfiguracyjne bootloadera (641)
- Konfiguracja lockbitów z poziomu aplikacji (642)
- Programowanie pamięci FLASH (643)
- Wykorzystanie przerwań w kodzie bootloadera (645)
- Usuwanie tablicy wektorów przerwań (645)
- Skrócenie tablicy wektorów przerwań (647)
- Start bootloadera (650)
- Wykorzystanie dodatkowego przycisku/zworki (650)
- Wykorzystanie markerów w pamięci EEPROM (651)
- Oczekiwanie na specjalny znak w wybranym kanale komunikacji (652)
- Start aplikacji (652)
- Współdzielenie kodu aplikacji i bootloadera (653)
- Wywoływanie funkcji bootloadera w procesorach ATMega256x (655)
- Wywoływanie funkcji obsługi przerwań zawartych w kodzie bootloadera (658)
- Współdzielenie zmiennych pomiędzy aplikacją a bootloaderem (658)
Rozdział 35. Debugowanie programu (661)
- Konfiguracja debuggera (663)
- Konfiguracja projektu do debugowania (664)
- Debugger sprzętowy (665)
- Debugger programowy (symulator) (667)
- Plik stymulacji (668)
- Pułapki (674)
- Pułapki na dane (678)
- Punkty śledzenia (679)
- Pułapki warunkowe (681)
- Podgląd pamięci (683)
- Podgląd stosu wywołań (684)
- Określenie czasu symulacji (684)
- Okno dezasemblera (685)
- Okno podglądu zmiennych (686)
- Łańcuchy formatujące (687)
- Makrodefinicja ASSERT (688)
- Przerwania w trakcie debugowania (692)
- _delay_xx i symulator (693)
Skorowidz (695)
Kategoria: | Hardware |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-0868-8 |
Rozmiar pliku: | 8,5 MB |