Katalog książek

Wydawnictwo Helion

Helion SA
ul. Kościuszki 1c
44-100 Gliwice
tel. (32) 230-98-63




© Helion 1991-2014

Lauret zaufanych opinii
Język C dla mikrokontrolerów AVR...

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

Autor: 

Ocena:
   5/6  Opinie  (0)
Stron: 568
Ksiazka drukowana Druk (oprawa: miękka) 3w1 w pakiecie: PdfPDF ePubePub MobiMobi
Cena:
89,00 zł
Cena:
69,90 zł
Dodaj do koszyka
Kup terazstrzalka

Druk
Książka drukowana
89,00 zł
eBook
Pdf ePub Mobi
69,90 zł

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!

Wstęp (11)
  • Kody przykładów (12)
  • Schematy (12)
  • Wymagane części (12)
Rozdział 1. Instalacja środowiska i potrzebnych narzędzi (15)
  • Instalacja WinAVR (16)
  • Instalacja AVR Studio (17)
  • Systemy GNU/Linux (18)
  • AVR Studio (19)
    • Pierwsza aplikacja (21)
    • Dodawanie plików do projektu (25)
  • Programy narzędziowe (27)
    • Linker (27)
    • Program avr-size (31)
    • Program avr-nm (32)
    • Program avr-objcopy (33)
    • Program make (36)
    • Pliki wynikowe (43)
  • Biblioteki (46)
    • Projekt biblioteki (47)
    • Tworzenie biblioteki (48)
    • Dołączanie biblioteki do programu (49)
    • Funkcje "przestarzałe" (50)
    • Nadpisywanie funkcji bibliotecznych (50)
    • Usuwanie niepotrzebnych funkcji i danych (51)
Rozdział 2. Programowanie mikrokontrolera (53)
  • Podłączenie - uwagi ogólne (53)
    • Problemy (55)
  • Programatory ISP (55)
    • Budowa programatora (56)
    • Programator USBASP (59)
    • Kilka procesorów w jednym układzie (59)
  • Programatory JTAG (60)
    • Programator JTAGICE (61)
    • Programator JTAGICE mkII (62)
    • Kilka procesorów w jednym układzie (62)
    • AVR Dragon (63)
  • Programatory HW i równoległe (63)
  • Tryb TPI (64)
  • Programowanie procesora w AVR Studio (64)
  • Programowanie przy pomocy narzędzi dostarczonych przez firmę Atmel (65)
  • Program AVRDUDE (67)
  • Program PonyProg (70)
  • Fusebity i lockbity w AVR-libc (70)
    • Lockbity (71)
    • Fusebity (71)
  • Sygnatura (74)
  • Lockbity w AVR-libc (74)
  • Fusebity w AVR-libc (75)
Rozdział 3. Podstawy języka C na AVR (77)
  • Arytmetyka (77)
    • Proste typy danych (77)
    • Arytmetyka stałopozycyjna (81)
    • Arytmetyka zmiennopozycyjna (87)
  • Operacje bitowe (95)
    • Reprezentacja binarna liczb (95)
    • Operacja iloczynu bitowego (96)
    • Operacja sumy bitowej (97)
    • Operacja sumy wyłączającej (98)
    • Operacja negacji bitowej (99)
    • Operacje przesunięć bitowych (100)
  • Zasięg zmiennych (100)
    • Zmienne globalne (101)
    • Zmienne lokalne (102)
    • Modyfikator const (103)
    • Wskaźniki (104)
    • Tablice (109)
  • Funkcje (112)
    • Przekazywanie parametrów przez wartość i referencję (114)
    • Wywołanie funkcji (114)
    • Rekurencyjne wywołania funkcji (115)
  • Słowa kluczowe (116)
    • Operatory (116)
    • Instrukcje sterujące (120)
  • Preprocesor (123)
    • Dyrektywa #include (124)
    • Dyrektywy kompilacji warunkowej (124)
    • Dyrektywa #define (126)
  • Pliki nagłówkowe i źródłowe (127)
    • Definicja a deklaracja (128)
    • Słowo kluczowe static (129)
    • Słowo kluczowe extern (130)
    • Dyrektywa inline (132)
    • Modyfikator register (136)
Rozdział 4. Sekcje programu (141)
  • Sekcje danych (142)
    • Sekcja .text (142)
    • Sekcja .data (142)
    • Sekcja .bss (143)
    • Sekcja .eeprom (143)
  • Sekcje zawierające kod programu (144)
    • Podsekcje .init[0-9] (144)
    • Podsekcje .fini[0-9] (145)
  • Sekcje specjalne (146)
  • Sekcje tworzone przez programistę (146)
  • Umieszczanie 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 (150)
    • Zewnętrzny sygnał RESET (151)
    • Brown-out Detector (151)
    • Układ Watchdog (152)
  • Zarządzanie poborem energii (156)
    • Usypianie procesora (157)
    • Wyłączanie układu BOD (157)
    • Wyłączanie podsystemów procesora (158)
    • Preskaler zegara (159)
    • Inne sposoby minimalizowania poboru energii (160)
Rozdział 6. Dynamiczna alokacja pamięci (163)
  • Alokacja pamięci w bibliotece AVR-libc (164)
    • Funkcja malloc (166)
    • Funkcja calloc (166)
    • Funkcja realloc (166)
    • Funkcja free (168)
  • Wycieki pamięci i błędne użycie pamięci alokowanej dynamicznie (169)
  • Jak działa alokator (171)
  • Wykrywanie kolizji sterty i stosu (172)
    • Metoda I - własne funkcje alokujące pamięć (173)
    • Metoda II - sprawdzanie ilości dostępnej pamięci (173)
    • Metoda III - marker (173)
    • Metoda IV - wzór w pamięci (173)
    • Metoda V - wykorzystanie interfejsu JTAG (176)
Rozdział 7. Wbudowana pamięć EEPROM (177)
  • Zapobieganie uszkodzeniu zawartości pamięci EEPROM (178)
  • Kontrola odczytu i zapisu do pamięci EEPROM (179)
    • Odczyt zawartości komórki pamięci (180)
    • Zapis do komórki pamięci (180)
  • Dostęp do EEPROM z poziomu AVR-libc (181)
    • Deklaracje danych w pamięci EEPROM (182)
    • Funkcje realizujące dostęp do pamięci EEPROM (183)
    • Inne funkcje operujące na EEPROM (185)
  • Techniki wear leveling (186)
Rozdział 8. Dostęp do pamięci FLASH (189)
  • Typy danych związane z pamięcią FLASH (190)
  • Odczyt danych z pamięci FLASH (191)
  • Dostęp do pamięci FLASH ᡸ kB (192)
Rozdział 9. Interfejs XMEM (193)
  • Wykorzystanie zewnętrznej pamięci SRAM w programie (197)
    • Konfiguracja I - w pamięci zewnętrznej jest tylko sekcja specjalna (198)
    • Konfiguracja II - wszystkie sekcje w pamięci zewnętrznej, stos w pamięci wewnętrznej (199)
    • Konfiguracja III - w pamięci zewnętrznej umieszczona jest tylko sterta (201)
    • Konfiguracja IV - w pamięci zewnętrznej sterta i segment zdefiniowany przez programistę (202)
    • Konfiguracja V - w pamięci zewnętrznej znajduje się stos (208)
    • Pamięć ROM jako pamięć zewnętrzna (208)
Rozdział 10. Dostęp do 16-bitowych rejestrów IO (211)
  • Dostęp do 16-bitowego rejestru ADC (211)
  • Dostęp do 16-bitowych rejestrów timerów (213)
Rozdział 11. Opóźnienia (217)
Rozdział 12. Dostęp do portów IO procesora (221)
  • Konfiguracja pinu IO (221)
  • Manipulacje stanem pinów IO (225)
    • Zmiana stanu portu na przeciwny (225)
    • Ustawianie linii IO (226)
    • Zerowanie linii IO (226)
    • Makrodefinicja _BV() (227)
    • Użycie pól bitowych (227)
  • Synchronizator (228)
  • Przykłady praktyczne (230)
    • Sterowanie wyświetlaczem 7-segmentowym (230)
    • Podłączenie przycisków (232)
    • Enkoder obrotowy (237)
    • Klawiatura matrycowa (242)
Rozdział 13. Rejestry IO ogólnego przeznaczenia (245)
  • Wykorzystanie innych rejestrów jako GPIOR (246)
Rozdział 14. Przerwania (249)
  • Obsługa przerwań (251)
    • sei()/cli() (254)
    • Atrybut naked i obsługa przerwań w asemblerze (254)
    • Modyfikator volatile (257)
    • Atomowość dostępu do danych (263)
    • Funkcje reentrant (266)
  • Przykłady praktyczne (268)
    • Wyświetlanie multipleksowane (268)
    • Wyświetlanie multipleksowane z regulacją jasności wyświetlacza (272)
    • Obsługa przycisków (276)
    • Obsługa enkodera (279)
    • Klawiatura matrycowa (280)
Rozdział 15. Przetwornik analogowo-cyfrowy (283)
  • Wybór napięcia referencyjnego (284)
  • Multiplekser (285)
  • Przetwornik ADC (285)
    • Tryb pojedynczej konwersji (286)
    • Tryb ciągłej konwersji (287)
  • Wejścia pojedyncze i różnicowe (287)
  • Wynik (288)
  • Wyzwalacze (288)
  • Blokowanie wejść cyfrowych (289)
  • Przerwania ADC (289)
  • Precyzyjne pomiary przy pomocy ADC (290)
  • Nadpróbkowanie (291)
    • Uśrednianie (292)
    • Decymacja i interpolacja (292)
  • Przykłady (292)
    • Termometr analogowy LM35 (293)
    • Klawisze (295)
Rozdział 16. Komparator analogowy (301)
  • Funkcje dodatkowe (302)
    • Blokowanie pinów (302)
    • Wyzwalanie zdarzeń timera (302)
    • Wybór wejścia komparatora (302)
    • Wyzwalanie przetwornika ADC (303)
Rozdział 17. Timery (305)
  • Sygnał taktujący (306)
    • Wewnętrzny sygnał taktujący (306)
    • Zewnętrzny sygnał taktujący (308)
  • Licznik (308)
  • Układ porównywania danych (309)
    • Wpływ na piny IO (309)
  • Moduł przechwytywania zdarzeń zewnętrznych (310)
    • Eliminacja szumów (311)
    • Komparator jako wyzwalacz zdarzenia ICP (311)
  • Tryby pracy timera (312)
    • Tryb prosty (312)
    • Tryb CTC (315)
    • Tryby PWM (316)
    • Układ ochronny (321)
    • Modulator sygnału wyjściowego (322)
  • Miernik częstotliwości i wypełnienia (323)
  • Realizacja RTC przy pomocy timera (326)
    • Realizacja sprzętowa (327)
    • Realizacja programowa (328)
Rozdział 18. Obsługa wyświetlaczy LCD (331)
  • Obsługa wyświetlaczy alfanumerycznych (332)
    • Funkcje biblioteczne (337)
    • Definiowanie własnych znaków (342)
    • Przykład - menu (345)
  • Obsługa wyświetlaczy graficznych (354)
Rozdział 19. Interfejs USART (367)
  • Interfejsy szeregowe (367)
  • Interfejs USART (368)
    • Interfejs USART mikrokontrolera AVR (371)
  • Przykłady (375)
    • Połączenie mikrokontroler - komputer PC (375)
    • RS485 (383)
Rozdział 20. Interfejs SPI (391)
  • Inicjalizacja interfejsu (394)
    • Ustawienie pinów IO (395)
    • Zegar taktujący (396)
    • Procesor w trybie Master SPI (396)
    • Procesor w trybie slave SPI (397)
  • Przykłady (397)
    • Połączenie AVR-AVR (397)
    • Połączenie AVR - rejestr szeregowy (403)
  • Interfejs USART w trybie SPI (408)
    • Taktowanie magistrali SPI (409)
    • Tryb pracy SPI (409)
    • Format ramki danych (409)
    • Konfiguracja interfejsu (410)
Rozdział 21. Interfejs TWI (413)
  • Tryb multimaster (416)
  • Inicjalizacja interfejsu (417)
  • Procesor w trybie I2C master (417)
    • Bity START i STOP (417)
    • Podstawowe funkcje do współpracy z I2C (418)
    • Współpraca z zewnętrzną pamięcią EEPROM (422)
    • Współpraca z zewnętrzną pamięcią FRAM (427)
    • Umieszczanie zmiennych w zewnętrznej pamięci EEPROM (427)
    • Współpraca z zegarem RTC (431)
    • Obsługa ekspandera IO PCF8574 (436)
  • Procesor w trybie I2C slave (437)
    • Przykład (440)
Rozdział 22. Interfejs USI (447)
  • 4-bitowy licznik i zegar (447)
  • Przerwania USI (448)
  • Zmiana pozycji pinów (449)
  • Wykorzystanie interfejsu USI w trybie SPI (449)
    • Tryb SPI master (451)
    • Tryb SPI slave (452)
Rozdział 23. Interfejs USB (453)
  • Zasilanie (454)
  • Sygnały danych (455)
  • VID i PID (456)
  • Interfejs USB realizowany przy pomocy konwertera (458)
  • Interfejs USB realizowany programowo (459)
    • Połączenie elektryczne (460)
    • Dostęp na PC (460)
    • Programowy interfejs USB na AVR (461)
  • Sprzętowy interfejs USB (464)
Rozdział 24. Interfejs 1-wire (465)
  • Realizacja master 1-wire na AVR (469)
    • Realizacja master 1-wire przy pomocy pinów IO (469)
    • Realizacja master 1-wire przy pomocy interfejsu USART (472)
    • Wysokopoziomowe funkcje obsługi 1-wire (477)
  • Termometr cyfrowy DS1820 (480)
Rozdział 25. Bootloader (483)
  • Pamięć NRWW i RWW (483)
  • Bity konfiguracyjne bootloadera (485)
    • Konfiguracja lockbitów z poziomu aplikacji (486)
  • Programowanie pamięci FLASH (487)
  • Wykorzystanie przerwań w kodzie bootloadera (489)
    • Usuwanie tablicy wektorów przerwań (490)
    • Skrócenie tablicy wektorów przerwań (491)
  • Start bootloadera (496)
    • Wykorzystanie dodatkowego przycisku/zworki (496)
    • Wykorzystanie markerów w pamięci EEPROM (497)
    • Oczekiwanie na specjalny znak w wybranym kanale komunikacji (498)
    • Start aplikacji (499)
  • Współdzielenie kodu aplikacji i bootloadera (499)
    • Wywoływanie funkcji bootloadera w procesorach ATMega256x (501)
    • Wywoływanie funkcji obsługi przerwań zawartych w kodzie bootloadera (505)
    • Współdzielenie zmiennych pomiędzy aplikacją a bootloaderem (505)
  • Mikrokontrolery AVR z wbudowanym bootloaderem (507)
Rozdział 26. Kontrola integralności programu (509)
  • Suma kontrolna (509)
  • CRC (511)
  • Automatyczne generowanie CRC (514)
Rozdział 27. Bezpieczeństwo kodu (517)
  • Metody łamania zabezpieczeń (517)
  • Bezpieczne uaktualnianie aplikacji (518)
  • Nota AVR231 - AES Bootloader (519)
    • Ustawienie bitów konfiguracyjnych (524)
    • Przygotowanie aplikacji (526)
    • Wczytywanie uaktualnienia (527)
Rozdział 28. Łączenie kodu w C i asemblerze (529)
  • Słowo kluczowe asm (530)
    • Typy operandów (531)
    • Dostęp do portów IO (533)
    • Dostęp do danych wielobajtowych (533)
    • Dostęp do wskaźników (534)
    • Lista modyfikowanych rejestrów (535)
    • Wielokrotne użycie wstawki asemblerowej (535)
  • Pliki .S (536)
    • Wykorzystanie rejestrów w asemblerze (537)
    • Przykłady (541)
Rozdział 29. Optymalizacja i debugowanie programu (543)
  • Optymalizacja programu (543)
    • Opcje kompilatora związane z optymalizacją (545)
    • Atrybuty optymalizacji (548)
  • Debugowanie programu (551)
    • Rozpoczęcie sesji debugera (553)
    • Zaawansowane sterowanie przebiegiem wykonywanej aplikacji (556)
Skorowidz (559)
Najczęściej kupowane razem:
Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji plus Java. Podstawy. Wydanie IX plus Turcja. Kraj czterech mórz. Wydanie 4
Cena zestawu: 210.71 zł 247.90 zł
Oszczędzasz: 37.19 zł (15%)
Dodaj do koszyka
zestaw0 Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
Najczęściej kupowane razem:
Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji plus C# 5.0. Leksykon kieszonkowy. Wydanie III plus Raspberry Pi. Przewodnik użytkownika
Cena zestawu: 109.47 zł 128.79 zł
Oszczędzasz: 19.32 zł (15%)
Dodaj do koszyka
zestaw0 Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji
Osoby, które kupowały książkę, często kupowały też:
Java. Podstawy. Wydanie IX
Cay S. Horstmann, Gary Cornell
Cena: 99.00 zł
Cena: 149.00 zł
C# 5.0. Leksykon kieszonkowy. Wydanie III
Joseph Albahari, Ben Albahari
Cena: 32.90 zł
Cena: 59.00 zł
Cena: 149.00 zł
Osoby, które kupowały książkę, często kupowały też:
C#. Rusz głową! Wydanie III
Jennifer Greene, Andrew Stellman
Cena: 79.00 zł
Cena: 47.00 zł
Monitorowanie otoczenia z Arduino
Emily Gertz, Patrick Di Justo
Cena: 21.99 zł
Książka wydawnictwa www.helion.pl podzielona jest, aż na 29 rozdziałów. Biorąc pod uwagę ogrom informacji jakie autor chciał przekazać czytelnikowi nie jest to nic dziwnego, a pozwala łatwo znaleźć w niej wszystkie niezbędne informacje. Książka na swoich 658 stronach porusza wszystkie najważniejsze aspekty programowania mikrokontrolerów AVR firmy Atmel w języku wysokiego poziomu jakim jest język C.

Pierwszy z rozdziałów omawia kwestię często pomijaną w innych kursach czy książkach tego typu, a mianowicie środowisko programistyczne oraz właściwe jego przystosowanie do własnych potrzeb. Na każdym kroku można powiedzieć, że książka jest uniwersalna, ponieważ opisany został program WinAVR oraz AVR Studio dla Windows'a i Linux'a. Daje to czytelnikowi możliwość wyboru i nie ogranicza go do pojedynczych rozwiązań. Dość dokładnie opisane są programy narzędziowe jak „linkier” czy program „make”. Wiedza ta nie jest potrzebna dla początkującego programisty, ale przydaje się już dla osób średnio zaawansowanych by zrozumieć jakie operacje są wykonywane przed i podczas kompilowania programów.

Wszystkie najważniejsze informacje dotyczące programatorów i programowania mikrokontrolerów AVR znalazł się w rozdziale 2. W tym przypadku autor również podszedł do sprawy profesjonalnie i opisał właściwie wszystkie interfejsy programowania począwszy od ISP przez JTAG, aż po TPI i programatory wysokonapięciowe. W każdym z przypadków opisany został sposób programowania i budowa elektroniczna programatora. Liczne rysunki i schematy uzupełniają ten rozdział. Szczegółowo zostały opisane również Fusebity i Lockbity spędzające sen z powiek początkującym programistom.

Następny z kolei rozdział 3 zajmuje w książce najwięcej miejsca i nie ma się czemu dziwić, ponieważ można powiedzieć, że streszczono w nim podstawy programowania w język C. Niestety rozdział ten nie tłumaczy od podstaw sposobów programowania i kierowany jest do osób, które miały już styczność z językiem C, na przykład w komputerach PC. Zaprezentowano tutaj głównie różnice między językiem C dla mikrokontrolerów i dla komputerów PC. Dla osób, które nie miały styczności wcześniej z językiem C polecana jest lektura innych pozycji dotyczących stricte języka C dostępne na stronie www.helion.pl.

W rozdziale 4 wytłumaczono sposoby dzielenia pisanego programu na sekcje takie jak .text, .data czy .eeprom. Rozdział ten może wydawać się trudny i niepotrzebny dla początkującego użytkownika, ale nie ulega wątpliwości, że warto było wspomnieć o sekcjach programu.

Często poruszany na wszelakich forach problem kontroli rdzenia został wyjaśniony w rozdziale 5. Zaprezentowano w nim różne sposoby na ograniczenie poboru energii elektrycznej przez mikrokontroler oraz na zabezpieczenie go przed zawieszeniem się podczas pracy i podczas chwilowego obniżenia napięcia zasilania.

Dynamiczna alokacja pamięci jest tematem rozdziału 6. Informacje w niej zawarte są ciekawe i potrzebne, ale z punktu widzenia bardziej zaawansowanych programistów, pisząc pierwsze proste programy nie ma potrzeby jej wykorzystywania.

Rozdziały 7 i 8 opisujące pamięci EEPROM oraz FLASH wbudowane w mikrokontrolery AVR. Zaprezentowano sposoby dostęp do tych pamięci zapisu i odczytu danych.

Rozdział 9 w całości poświęcony został interfejsowi XMEM, który umożliwia podłączenie dotykowej pamięci SRAM do mikrokontrolera. Z racji tego, że interfejs XMEM znaleźć można tylko w bardziej rozbudowanych mikrokontrolerach AVR, wiedza o nim nie jest niezbędna dla początkującego programisty.

Interesujący dla początkujących sposób odczytu wartości 16-biotwych przedstawiono w rozdziale 10. Mikrokontrolery AVR opisywane w książce są 8-bitowe, odczyt i zapis wartości 16-biotwych należy przeprowadzić w kilku etapach. Jest to częsty błąd początkujących użytkowników.

Sposoby wprowadzania opóźnień programowych poprzez pętle i funkcje „delay” prezentuje krótki rozdział 11. Warto było umieścić te informacje w odzielnym rozdziale, ponieważ są one wykorzystywane najwet w najprostrzych programach.

Można powiedzieć, że od rozdziału 12 książka opisuje operacje na peryferiach mikrokontrolerów AVR. Począwszy od rozdziału 12, aż do 17 opisano często spotykane w innych publikacjach sposoby kontrolowania portów I/O, przerwań, przetworników A/C, komparatora analogowego i liczników. Każdy z rozdziałów zawiera kompletne informacje o sposobie uruchomienia i wykorzystania każdego z wymienionych peryferii. Dodatkowo warto zwrócić uwagę na przykłady praktyczne pokazujące jak wykonać i oprogramować klawiatury matrycowe, enkodery, termometry analogowe, mierniki częstotliwości czy wyświetlanie multipleksowane.

Rozdział 18 bardzo zainteresuje wielu użytkowników, ponieważ opisuje sposoby podłączenia i sterowania wyświetlaczem LCD alfanumerycznych i graficznych. Dzięki przedstawieniu różnych sposobów przesyłania danych do wyświeltaczy (4-bitowe i 8-bitowe) po raz kolejny można powiedzieć, że książka jest uniwersalna i opisuje wiele możliwych rozwiązań wskazując na ich zalety i wady.

Interfejsy komunikacyjne stanowią można by powiedzieć odrębny rozdział w dziedzinie mikrokontrolerów, ponieważ często są ustandaryzowane dla wielu urządzeń to ich obsługa jest zupełnie inna w każdym przypadku. Bardzo dobrze, że w książce poświęcono, aż 98 podzielonych na 6 rozdziałów dla opisania interfejsów takich jak: USART, SPI, TWI (I2C), USI, USB i 1-wire. Warto wspomnieć o opisie interfejsu USB, który jest bardzo szczegółowy i pokazuje możliwości podłączenia układu mikroprocesorowego do komputera PC przez konwertery FTDI lub bezpośrednio przy wykorzystaniu programowego interfejsu. Można powiedzieć, że rozdział ten będzie zapewne chętnie przeglądany ze względu na popularność komunikacji USB.

To czego brakuje w wielu opisach i książkach to coraz częściej wykorzystywane, szczególnie w zestawach ewaluacyjnych bootloadery opisane w rozdziale 25. Stanowią one wygodną alternatywę dla programowania poprzez interfejs ISP czy JTAG. Dzięki bootloaderom można programować mikrokontroler i uaktualniać oprogramowania za pomocą wgranego wcześniej prostego programu nazywanego właśnie bootloaderem. Daje to przede wszystkim dużą wygodę użytkowania co w obecnych czasach jest wyznacznikiem dobrze zaprojektowanego urządzenia.

Kolejne 3 rozdziały po raz kolejny mogą nie być przydatne początkującym użytkownikom chcącym napisać prosty program i uzyskać prawie natychmiastowe efekty. Rozdziały 26, 27 i 28 opisują odpowiednio kontrolę integralności programu, bezpieczeństwo kodu oraz łączenie języka C i asemblera w jednym programie. Dla bardziej wprawionych programistów przyda się zapewne rozdział o tym jak używać „wstawek” asemblerowych w język C dla uzyskania lepszych efektów działania programu.

Ostatni rozdział książki o numerze 29 opisuje sposoby optymalizacji i debugowania napisanego programu. Informacje w nim zawarte mogą być pomocne w przypadku gdy skompilowany program jest niewiele większy od dostępnej pamięci mikrokontrolera lub gdy musimy mieć większą kontrolę nad tym co dzieje się podczas kompilacji, ponieważ C jest językiem wysokiego poziomu.

Podsumowując recenzowaną książkę, należy z pewnością stwierdzić, że wyczerpuje ona wiele kwestii dotyczących programowania mikrokontrolerów AVR w język C. Niestety książka w całości nie jest przewidziana dla zupełnego laika w tej dziedzinie. Część rozdziałów przyda się osobom, które dopiero co zaczęły zabawę w świecie języka C i mikrokontrolerów AVR, ale niektóre przeznaczone są dla bardziej zaawansowanych programistów znających już podstawy programowania w języku C, czego zabrakło w książce. W tym przypadku jednak brak absolutnych podstaw, w którymś z rozdziałów książki nie jest jej wadą, ponieważ na rynku dostępnych jest wiele tytułów opisujących od podstaw język C.

Dzięki zachowaniu inżynierskiego porządku w książce oraz poprzez podzielenie jej na wiele rozdziałów można ją traktować jak poradnik podczas pisania własnego kodu. Wystarczy znaleźć interesujący nas rozdział i od razu korzystać z gotowych rozwiązań programowych i sprzętowych lub zrozumieć zasadę działania i tworzyć własne biblioteki i rozwiązania.

Ocena według www.mikrokontrolery.org 5/5

mikrokontrolery.blogspot.com 2011-12-19

pokaż wszystkie