Szczegóły ebooka

Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji. Wydanie II

Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji. Wydanie II

Tomasz Francuz

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!

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)

  • Tytuł: Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji. Wydanie II
  • Autor: Tomasz Francuz
  • ISBN: 978-83-283-0868-8, 9788328308688
  • Data wydania: 2015-01-09
  • Format: Ebook
  • Identyfikator pozycji: jcmika
  • Wydawca: Helion