Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

czwartek, 3 marca 2011

Tomasz Francuz: AVR - Praktyczne projekty (opis autora)

Autor: tmf
Redakcja: Dondu

O czym jest książka? To kontynuacja poprzedniej „Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji”. Język C już w mniejszym lub większym stopniu poznaliśmy, co będzie teraz? Będzie przede wszystkim o nowej rodzinie AVR – XMEGA, będą omówione najważniejsze peryferia, w tym peryferia zupełnie nowe, takie jak Event system, czy DMA.

Co ważne, książka nie powiela informacji, które możemy znaleźć w nocie katalogowej procesora.

Wszystko omówione jest na przykładach, często są to wręcz gotowe do użycia kompletne programy, jak np. program analizatora stanów logicznych, czy zegara RTC z wyświetlaniem na LEDach, lub makiety reklamowej zbudowanej na matrycach LEDowych. Ale po kolei.

Ponieważ wiele przykładów jest dosyć skomplikowanych, zakładam pewną podstawową znajomość języka C u czytelnika. Co prawda bardziej skomplikowane, czy specyficzne dla AVR konstrukcje języka są dokładnie wyjaśnione, niemniej, same podstawy języka C można zdobyć czytając jedną z doskonałych książek wydanych przez wydawnictwo Helion.

Ponieważ uważam, że nie ma sensu udawać Praty, czy Kinga, osobom zainteresowanym nauką C od początku z pewnością te książki mogę rekomendować. W „Język C dla mikrokontrolerów AVR...” i „AVR. Praktyczne projekty” pokazałem specyfikę C dla mikrokontrolerów, lecz myślę, że nawet osoby pobieżnie znające C/C++ sobie poradzą. Świetny kurs języka C (z kompilatorem online CManiak) można znaleźć też na niniejszej stronie.

Tym razem książka składa się „tylko” z 19 rozdziałów, czyli o 10 mniej niż poprzednia. Ale nie jest to powód do zmartwień – sama książka liczy „od deski do deski” 632 strony, z jak sądzę dużą ilością treści i konkretów. Łatwo się o tym przekonać czytając przykładowy rozdział książki – tu wydawnictwo chyba wybrało doskonale – rozdział o przerwaniach, czyli czymś co nie tylko początkującym sprawia kłopoty. Rozdział można pobrać ze strony wydawnictwa Helion – dostajemy za darmo cały rozdział, który warto przeczytać nawet jeśli nie zamierzasz kupić książki. Oczywiście jak zawsze dla każdego rozdziału dostępne są za darmo przykłady, które można pobrać z ftp.

Zobaczmy co można znaleźć w poszczególnych rozdziałach, a jest tego sporo – sam spis treści to 7 stron! No to lecimy:

Rozdział 1. Wstęp, czyli nowi członkowie rodziny AVR

Znajdziemy tu kilka stron poświęconych nowej rodzinie AVR, informacje dotyczące podrodzin XMEGA, wraz ze skrótowym opisem charakterystycznych dla nich układów peryferyjnych i środowiska. Warto przeczytać – pomaga opanować chaos związany z wieloma podrodzinami, modelami XMEGA i nowinkami w nich się znajdującymi.

Rozdział 2. Jak zacząć, czyli instalacja środowiska

Tak jak nazwa wskazuje – mamy tu podstawowe informacje jak zacząć z XMEGA. Wszystko podane na tacy, tak, że nawet osoba pierwszy raz mająca do czynienia z mikrokontrolerami da radę. W rozdziale opisana jest instalacja modułu Xplained w systemie operacyjnym. W książce wykorzystywany jest moduł Xplained (z procesorem XMEGA 128A1 lub XMEGA 256A3BU), jednak nie musimy się martwić jeśli takiego modułu nie posiadamy. Tam gdzie to jest potrzebne pokazane są schematy, w efekcie książka podobnie jak poprzednia nie przywiązuje czytelnika do konkretnego zestawu. Możemy kupić wspomniane Xplained, możemy sobie sami poskładać potrzebny zestaw, lub kupić gotowe minimoduły z XMEGA (do wyboru dwóch firm) i wykorzystać je w połączeniu z płytką stykową. To co wybierzemy zależy od naszych umiejętności, wybór Xplained jest pójściem na łatwiznę, ale umożliwia wykonanie prawie wszystkich przykładów bez dotykania lutownicy.

Co ważne, aby zacząć nie potrzebujemy programatora. W dalszej części rozdziału pokazane jest jak wykorzystać bootloader i program FLIP umożliwiający wgranie programu do mikrokontrolera przez np. interfejs USB. Osoby profesjonalnie lub półprofesjonalnie zajmujące się elektroniką docenią z pewnością opis programu batchisp, umożliwiającego automatyzację i oskryptowanie procesu programowania i weryfikacji – przydatne przy większej produkcji.

Dalej mamy opisy podłączenia i działania interfejsów JTAG i PDI, którymi posługuje się XMEGA. Opisane są też typowe programatory używane z XMEGA, z ich wadami i zaletami. Tu warto wspomnieć, że dla uzyskania możliwości debugowania XMEGA w układzie warto zaopatrzyć się w AVR Dragon – jego cena szybko się zwraca. Niemniej bez niego też można sobie poradzić – wiele przykładów świetnie działa w symulatorze – np. przykłady śledzenia transferu DMA. Dalej mamy opis podłączenia XMEGA, prowadzenia zasilania itd. Rozdział kończy opis podstawowych funkcji Atmel Studio – jak utworzyć nowy projekt, nawigować w nim, programować z poziomu IDE. Jest to przydatne, gdyż wszystkie przykłady i dalsze opisy bazują na tym IDE. A co ze zwolennikami Eclipse? Oczywiście mogą zostać przy swoim ulubionym środowisku, lecz po przeczytaniu książki z pewnością jeszcze raz przemyślą swój wybór.

Rozdział 3. Organizacja i zarządzanie projektem

Rozdział nie mający nic wspólnego z XMEGA, lecz godny polecenia nie tylko początkującym programistom, ale także tym całkiem doświadczonym. Jak pisać przejrzysty kod, stosować komentarze, dzielić duży projekt na fragmenty – wszystkiego dowiesz się z tego rozdziału. Omówione zostały też typowe problemy – dlaczego funkcja nie jest widoczna w innych modułach, jak zawęzić lub poszerzyć zakres widoczności zmiennych, pisać pliki nagłówkowe. W drugiej części rozdziału mamy coś na pozór niepozornego, co jednak znakomicie ułatwia pisanie programów – omówienie systemów wersjonowania (na przykładzie SVN) i ich integracji z Atmel Studio. Dowiesz się co to takiego, jak z wersjonowania poprawnie korzystać i co ono daje. Z pewnością twój następny projekt powstanie z wykorzystaniem jednego z systemów wersjonowania!

Rozdział 4. Jak tworzyć lepszy i efektywniejszy kod

W twoim komputerze masz wiele niedokończonych projektów? Często natrafiasz na problem nie do rozwiązania? Z tego rozdziału nauczysz się jak sobie radzić – jak tworzyć projekt, aby zwiększyć szanse na jego zakończenie oraz jak pisać program, aby wygenerowany kod był optymalny. Pokazany został wpływ różnych modyfikatorów języka C, stosowanych typów, czy form przekazywania danych na generowany kod. W rozdziale tym mamy przykłady kodu C i odpowiadającego im, wygenerowanego przez kompilator kodu asemblerowego z dokładnym wytłumaczeniem dlaczego jest on taki a nie inny. Wiele tricków pokazujących proste sposoby prowadzące do wygenerowania krótszego/szybszego kodu. Dużo gotowych przepisów na lepszy kod, szczególnie polecane osobom, które chcą wiedzieć jak radzi sobie kompilator. Oprócz informacji na temat optymalizacji kodu, optymalnych sposobów przekazywania argumentów funkcji, znajdziemy tu także opis rozszerzeń charakterystycznych dla kompilatora gcc, mających wpływ na kod wynikowy. W drugiej części dowiemy się jak automatycznie eliminować martwy kod i nieużywane funkcje z programu.

Rozdział 5. Jak uporządkować chaos, czyli złożone typy danych i listy

Rozdział pokazuje jak zrealizować podstawowe struktury danych i jak się nimi posługiwać. Od prostych struktur typu tablice, poprzez struktury i unie, aż do list. Jak zwykle wiele tricków i niuansów, które mogą nam przysporzyć problemów, np. kopiowanie płytkie i głębokie struktur. W drugiej części mamy omówione bufory, stosy i listy, jedno- oraz dwukierunkowe. Po co? Ano dlatego, że są to podstawowe elementy wykorzystywane przy programowaniu, są one też praktycznie wykorzystywane w dalszych rozdziałach. Np. opisywany bufor pierścieniowy przy realizacji nadawania/odbioru danych przez USART itd. Warto temu rozdziałowi poświęcić więcej uwagi, gdyż omówione w nim problemy będą się później przewijać dosyć często – można zaryzykować stwierdzenie, że na im wyższym poziomie będziemy programować, tym częściej z omówionych tu struktur będziemy korzystać.

Rozdział 6. Koniec bałaganu, czyli o nazwach rejestrów i układów peryferyjnych

W rozdziale tym wracamy do AVR i XMEGA – pokazane w nim zostały struktury danych opisujące peryferia XMEGA, zasady tworzenia ich nazw i dostępu. Znajdziemy tu wytłumaczenie dlaczego dane pole bitowe nazywa się tak a nie inaczej, co znaczą „magiczne” suffiksy _gm, _bp, _bm, czyli wszystko to co na pozór w XMEGA wydaje się skomplikowane i niezrozumiałe tu zostało wyjaśnione.

Rozdział 7. Lepiej i prościej, czyli porty IO procesora na sterydach

Ten rozdział zawiera coś i dla osób spragnionych wiedzy elektronicznej i coś dla programistów. W pierwszej części omówione są sposoby połączenia XMEGA ze światem zewnętrznym. Jak wykonać translację poziomów napięć do domen o wyższym lub niższym napięciu, dowiemy się co to takiego konfiguracja open drain, jak dostosować napięcie, jak działa dzielnik rezystorowy, czy też jak połączyć razem układy pracujące z różnymi napięciami na magistrali I2C.

Druga część rozdziału to opis pinów IO XMEGA – nowych funkcji, sposobów konfiguracji i podstawowych trybów pracy. Jest to o tyle istotne, że XMEGA ma znacznie większe możliwości konfiguracji pinów IO – mogą one pracować nie tylko jako wejście lub wyjście, ale także w konfiguracji open drain, z podciąganiem do Vcc, GND, w konfiguracji totem pole, czy wired-OR, lub wired-AND. Niewiele ci to mówi? Nie przejmuj się, po przeczytaniu tego rozdziału będziesz znał nie tylko te terminy, ale także nauczysz się praktycznie nową wiedzę wykorzystywać.

Na końcu dowiesz się o nowych funkcjach portów IO w XMEGA – o atomowym dostępie do portów, portach wirtualnych, czy też możliwości remapowania pinów IO.

Rozdział 8. Kontroler NVM — jak prosto i przyjemnie dobrać się do pamięci

W rozdziale tym pokazane są przykłady ilustrujące dostęp do pamięci EEPROM i FLASH przez nowy układ peryferyjny – NVM. Pokazane zostały przykłady dostępu do EEPROM w sposób klasyczny (tak jak to znamy z innych AVRów), oraz bezpośrednio poprzez kontroler NVM, dzięki czemu możemy zapisywać całe strony i przyśpieszyć zapis do EEPROM nawet ponad 30-krotnie.

W dalszej części znajdziemy przykłady mapowania EEPROM w obszar SRAM (kolejna unikalna cecha XMEGA), dostępu do zmiennych umieszczonych w EEPROM itd. Oczywiście nie zabrakło przykładów implementacji technik wear-leveling, dzięki czemu możemy wydłużyć ograniczoną żywotność komórki pamięci EEPROM. Dalej znajdziemy dwa bardziej zaawansowane przykłady, jednocześnie niezwykle przydatne w codziennym programowaniu. Pierwszy pokazuje jak umieścić dane w EEPROM przypisując im identyfikatory (tokeny), dzięki czemu nie musimy się do danych odwoływać przez adresy lecz przyjazne nazwy. Drugi przykład pokazuje jak zachować w pamięci nieulotnej dane programu po awarii/wyłączenia zasilania. Jak zwykle dostajemy gotowy, działający przykład, ze schematami, nic tylko wykorzystać we własnej aplikacji. Część rozdziału dotyczącą EEPROM kończą przykłady dostępu do tej pamięci z użyciem przerwań.

Dalej mamy oczywiście pamięć FLASH. Tu znajdziemy przykłady jak umieszczać dane w tej pamięci (jeśli myślisz, że wiesz jak to robić możesz być zaskoczony – nowy kompilator (gcc >4.7) udostępnia nowe możliwości i sposoby dostępu do FLASH), dowiemy się także jak uzyskać do nich dostęp z poziomu aplikacji (znane problemy związane z Harvardzką architekturą AVR). Na koniec – coś o czym zapewne większość nic nie wie – nazwane przestrzenie adresowe, czyli jak uzyskać dostęp do FLASH z pominięciem tych wszystkich makr pgm_XXX. No i przy okazji – nowe 24-bitowe typy danych.

Rozdział 9. Potrzebuję więcej mocy — słów kilka o konfiguracji zegara

Czasami brakuje nam mocy obliczeniowej, a XMEGA podobno można taktować częstotliwością aż 32 MHz! Jak to zrobić? Z tego rozdziału właśnie się tego dowiesz. Czyli wszystko jak konfigurować źródła zegara, jak zmieniać dynamicznie częstotliwość taktowania procesora, czy wybierać zegary taktujące poszczególne peryferia. Z rozdziału tego dowiesz się także, jak poprawnie podłączyć kwarc taktujący CPU lub RTC, jak dobrać kondensatory obciążające i jak poprowadzić ścieżki na płytce, aby to wszystko poprawnie działało. Dalej znajdziesz przykłady konfiguracji PLL (czyli jak zwiększać częstotliwość) i układu DFLL umożliwiającego stałą, sprzętową kalibrację zegara względem innego zegara. Czyli coś dla osób implementujących wszelakie RTC, czy po prostu osób którym wysoka stabilność częstotliwości jest potrzebna. Znajdziemy też przykłady jak sprzętowo monitorować zegar, poprawność jego działania i jak napisać aplikację potrafiącą zareagować np. na uszkodzenie kwarcu taktującego MCU.

Rodział 10. Przerwania i kontroler przerwań

Tego rozdziału nie będę opisywał, prościej po prostu ściągnąć go ze strony Helionu i przeczytać.

Rozdział 11. System zdarzeń

System zdarzeń to kolejny unikalny dla XMEGA układ peryferyjny dający naprawdę potężne możliwości. Dzięki jego wykorzystaniu procesor może sprzętowo reagować na wiele zdarzeń, a programista może powiązać określone zdarzenie ze skutkiem – np. upływ czasu z rozpoczęciem przetwarzania ADC. To jak ten system wykorzystać dowiesz się z tego rozdziału.

Korzystałeś kiedyś z enkodera (impulsatora), miałeś problem z jego obsługą? Tu znajdziesz gotowe rozwiązania sprzętowe i programowe. Dowiesz się jak prosto podłączyć enkodery mechaniczne lub optyczne, mierzyć ich położenie nie angażując CPU lecz właśnie system zdarzeń i timery. Przy okazji dowiesz się też jak podłączyć do XMEGA LCD alfanumeryczny.

Rozdział 12. Timery i liczniki

Timery i liczniki to podstawowe narzędzie każdego programisty systemów wbudowanych. Ponieważ liczniki w XMEGA znacząco ulepszonu, z tego rozdziału dowiesz się wszystkiego o ich działaniu i możliwych sposobach ich wykorzystania. Jak skonfigurować timer, jakie ma rejestry, jak wygenerować przebieg o zadanej częstotliwości, lub impuls o zadanym czasie trwania. A także jak przechwycić zdarzenie zewnętrzne i nadać mu marker czasowy, albo wygenerować przebieg PWM. Dowiesz się jak przy pomocy PWM wygenerować sygnał analogowy o dowolnym kształcie, jak obliczyć filtr potrzebny dla PWM. Mało tego, dowiesz się jak wygenerować dowolny przebieg korzystając z timera i przerwań, lub timera i DMA, czyli bez zaangażowania procesora. Jeśli do tej pory działanie liczników było dla ciebie niezrozumiałe i nie wiedziałeś jak z nich korzystać po przeczytaniu tego rozdziału będziesz licznikowym ekspertem. Jeśli dostępne 16-bitowe liczniki mają niewystarczającą długość, dowiesz się jak je połączyć uzyskując np. licznik 32-bitowy.

Rozdział 13. Kontroler DMA

To kolejny nowy podsystem w XMEGA. Osoby znające bliżej mikrokontrolery wiedzą jak potężnym DMA potrafi być narzędziem. Osoby początkujące często zniechęcają się bo DMA wydaje im się zbyt skomplikowany, a jego działanie niezrozumiałe. W rozdziale tym znajdziesz przykłady wykorzystania DMA do realizacji przesłań typu pamięć-pamięć, przesyłania bloków pamięci, odwracania kolejności danych itd.

Dowiesz się jak przesłać dane z pamięci np. do portu IO sterującego LED, uzyskując ciekawe efekty świetlne, jak sterować szybkością przesyłu danych przy pomocy timera, a także jak działają i czemu służą bardziej zaawansowane tryby działania DMA, np. praca buforowa, co przydaje się w systemach szybkiej akwizycji danych. Oczywiście wszystkie te zastosowania ilustrowane są bogatymi przykładami.

Rozdział 14. LED-y — co z nich można wycisnąć?

Wcześniej pokazane zostało jak korzystać z timerów, przerwań i DMA. Czas to połączyć razem i wykorzystać do czegoś praktycznego – sterowania LEDami. Na początku rozdziału znajdziemy trochę teorii na temat LED i sterowania nimi. Dla przykładu zamieszczone zostały schematy i programy sterujące taśmami LEDowymi RGB, dowiemy się jak zmieniać intensywność świecenia diod, ich kolor (dla diod RGB) tworząc efektowne oświetlenie. Oczywiście znajdziesz też schematy podłączenia taśm LED i informacje jak nimi sterować, czy jak dobrać potrzebny tranzystor sterujący.

Dalej oczywiście wyświetlacze 7-segmentowe i ich multipleksowanie. Czyli coś z czym zetknął się chyba każdy entuzjasta elektroniki. Dowiemy się jak multipleksować wyświetlacze, jak obliczyć prądy segmentów, a na końcu zbudujemy sobie licznik/timer zliczający od zadanej wartości do zera. Może się przydać w kuchni :)

Ale to nie wszystko. W trzeciej części rozdziału znajdziemy informacje na temat matryc LED, jak nimi sterować, jak je podłączyć do XMEGA i jak zrealizować w oparciu o nie animacje i banery reklamowe. Dowiesz się jak poprawnie zaprojektować takie banery, jak zaprojektować płytkę sterującą i prawidłowo je zasilić. Jak zwykle dostaniesz gotowe programy przykładowe, umożlwiające sterowanie matrycami jedno- lub dwukolorowymi, a także matrycami RGB. Myślisz, że sterowanie taką matrycą pochłania spore zasoby mikrokontrolera, który nie będzie w stanie nic więcej robić? Przeczytaj jak sterować taką matrycą z wykorzystaniem systemu zdarzeń, liczników i DMA. A twój procesor będzie sterował matrycą śpiąc! Bez problemu utworzysz m.in. atrakcyjny baner reklamowy:


Wyświetlanie napisu na matrycy LED.
Wyświetlanie napisu na matrycy LED.


który możemy też zobaczyć na animacji:




W rzeczywistości przewijanie tekstu jest płynne, a kolory są jaskrawe. Pewne niedoskonałości filmiku wynikają z niedoskonałości rejestracji obrazu przez kamerę oraz późniejszego przetwarzania przez system Youtube.

Ale to nie wszystko. Matryce to nie tylko możlwość sterowania on/off. Dowiesz się wiec jak uzyskać odcienie kolorów wykorzystując multipleksowanie i PWM, co daje szczególnie ładne efekty w przypadku matryc dwukolorowych i RGB:


Wyświetlanie odcieni kolorów na matrycy RG.
Wyświetlanie odcieni kolorów na matrycy RG.


Rozdział 15. Układy zegarowe w praktyce

Dosyć często w projektach musimy znać dokładny czas. Zwykle do tego celu wykorzystujemy zewnętrzne układy zegarowe. Komplikuje to układ i generuje dodatkowe koszty. Z tego rozdziału dowiesz się jak wykorzystać układ RTC (RTC16 lub RTC32) dostępny w XMEGA. Jak go skonfigurować, oraz jak przeliczyć uzyskaną z RTC wartość na format daty i czasu. Jako przykład pokazany został program implementujący zegar. Ale to nie wszystko. Skąd pobrać czas? Można mozolnie go wprowadzać, można też pobrać go drogą radiową – tu kłania się DCF77.

W dalszej części rozdziału znajdziesz przykład obsługi odbiornika DCF77 i opis standardu. Oczywiście do tego przykład ilustrujący wykorzystanie DCF77 i synchronizację zegara XMEGA z atomowym wzorcem czasu dostępnym drogą radiową. Przy okazji powtórzysz sobie wykorzystanie timerów i przerwań. A dalej? Jak zegar to oczywiście trzeba jakoś podtrzymywać jego działanie pod nieobecność zasilania mikrokontrolera. Jak podtrzymywanie zegara zrealizować poznasz w kolejnej części rozdziału. Dowiesz się o wadach i zaletach wykorzystania w tym celu baterii, akumulatorów, czy superkondensatorów.

Rozdział 16. Budujemy zegar z budzikiem, czyli skończona maszyna stanów w praktyce

Jeśli już wiemy jak zbudować zegar to czas na praktyczny projekt – czyli zegar z budzikiem z wyświetlaczem LED. To dobry przykład, aby pokazać pewien styl programowania – oparty na realizacji tzw. skończonej maszyny stanów. W tym rozdziale dowiesz się co to takiego i jak można taką maszynę zrealizować, a na końcu poznasz przykład takiej implementacji w praktyce właśnie budując zegar. Zobaczysz jak prosto i przyjemnie wykorzystuje się maszynę stanów do implementacji różnych algorytmów, co zostanie szerzej wykorzystane w kolejnych rozdziałach.


Rozdział 17. Komunikacja na różne sposoby, czyli USART w praktyce
USART i RS232 stanowią ciągle dominujący interfejs wykorzystywany do komunikacji. Z tego rozdziału dowiesz się jak zrealizować komunikację z komputerem, lub innym mikrokontrolerem w trybie synchronicznym i asynchronicznym. Jak ustawić szybkość transmisji (tu XMEGA dysponuje o wiele większymi możliwościami niż wcześniejsze AVRy, nie musisz używać tzw. kwarców przyjaznych dla USART, ba, w ogóle nie musisz używać kwarcu) i wykorzystać dostępny generator frakcyjny. Dowiesz się jak podglądać port szeregowy i transmisję oraz jak skonfigurować USART. Ale to tylko wstęp do realizacji transmisji danych. W dalszej części poznasz jak nie należy i jak należy oprogramować transmisję UART z wykorzystaniem prostych metod (pooling), w oparciu o przerwania lub wykorzystując DMA. Do tego przyda się powtórka z wcześniejszego rozdziału o złożonych strukturach danych, gdyż poznasz jak zaimplementować obsługę UART z wykorzystaniem np. bufora pierścieniowego.

Ale to nie koniec. Chciałeś kiedyś wysłać dane przez USART z funkcji przerwania i programu głównego? Niech zgadnę, nie wyszło to tak jak chciałeś? W tym rozdziale nie tylko dowiesz się dlaczego to nie zadziałało poprawnie, ale także jak zrobić, aby takie sztuczki były możliwe. Nauczysz się wysyłać i odbierać dane z różnych „wątków”, tak aby żądania dostępu do USART się wzajemnie nie zakłócały. Nauczysz się także jak zrealizować w wygodny sposób dostęp do USART (czy ogólnie dowolnego zasobu) przy pomocy mechanizmów udostępnianych przez język C – strumieni. Oczywiście nie mogło też zabraknąć znanego z innych mikrokontrolerów opisu trybu wieloprocesorowego (MPCM), umożliwiającego sprzętową adresację urządzenia slave i tworzenie konfiguracji master-multiple slave.

Rozdział 18. Wizualizacja danych

W poprzednich rozdziałach pokazana została solidna porcja danych i wiedzy. Czas nowe wiadomości połączyć w większą całość. Na przykładzie programu Atmel Data Visualizer dowiemy się w jaki sposób przesyłać do komputera złożone struktury danych oraz jak tworzyć struktury danych i je dziedziczyć dzięki rozszerzeniu standardu języka C. Przy okazji dowiemy się jak obsługiwać popularne ultradźwiękowe mierniki odległości znane z platformy Arduino, a także jak taki miernik zbudować od podstaw. Przy okazji powtórzymy sobie tryb pracy timera polegający na przechwytywaniu i pomiarze szerokości impulsu, jak przetworzyć uzyskane dane i wysłać je do programu ADV w celu wizualizacji. Ale to nie wszystko.

W drugiej części rozdziału pokazany jest przykład o niezwykle praktycznym zastosowaniu. Każdy elektronik zmaga się z problemami transmisji danych, a pisząc własne protokoły komunikacyjne, czy próbując komunikować się z urządzeniami zewnętrznymi natrafiamy na problemy. Co gdyby posiadać analizator stanów logicznych, umożliwiający w dodatku interpretację protokołów (np. SPI, 1-wire, USART, I2C)? To drogie urządzenie? Nic bardziej mylnego, dowiedziałeś się o XMEGA już tyle, że potrafisz je zbudować sam. No może z drobną pomocą pod postacią tego rozdziału. Dowiesz się więcej o protokole OLS, klientach tego protokołu oraz najważniejsze – jak w oparciu o XMEGA sprzętowo przechwytywać wielokanałowy sygnał cyfrowy z możliwie wysoką częstotliwością próbkowania – a potem wysłać przechwycone dane do PC w celu dalszej analizy:


Przykładowy zrzut stanów logicznych z analizatora.
Przykładowy zrzut stanów logicznych z analizatora.

Przy okazji powtórzysz sobie połączone działanie timerów, systemu zdarzeń, DMA i USART oraz zbudujesz przydatne narzędzie. Na końcu dowiesz się też o problemach związanych z przechwytywaniem sygnałów cyfrowych, aliasingu, itd.

Rodział 19. Wykorzystanie podczerwieni do transmisji danych

Transmitujemy dane, czemu by nie wykorzystać do transmisji podczerwieni? Z tego rozdziału dowiesz się wszystkiego o wykorzystaniu podczerwieni do transmisji danych. Poznasz schematy modulacji danych, dowiesz się jak zbudować odbiornik podczerwieni (i przy okazji nadajnik), jak odebrać dane z pilota telewizyjnego, pracującego w dowolnym standardzie. Przy okazji nauczysz się używać zbudowanego w poprzednim rozdziale analizatora stanów logicznych – dzięki niemu przechwycisz sygnał pilota i zobaczysz go przedstawiony graficznie, dowiesz się jak przeprowadzić inżynierię odwrotną, w celu poznania tajników protokołu ukrywanych przez producentów. Dalej znajdziesz opis popularnych (i mniej popularnych) standardów przesyłania danych przez piloty TV, dowiesz się co to takiego kod Manchester i jakie są jego zalety, oraz jak łatwo go zdekodować.

W kolejnej części dowiesz się jak nadawać dane podczerwienią udając różne urządzenia, m. in. pilota do aparatu fotograficznego, czy pilota TV. Ale podczerwień to nie tylko piloty TV. To doskonały nośnik do taniej realizacji komunikacji bezprzewodowej. Dowiesz się jak zbudować własny protokół transmisji, jak zabezpieczyć integralność przesyłanych danych wykorzystując CRC i jak przesłać dane podczerwienią pomiędzy mikrokontrolerami, lub mikrokontrolerem a komputerem PC.

Przy okazji dowiesz się jak wykorzystać nowy układ peryferyjny XMEGA umożliwiający sprzętowe liczenie CRC16 i CRC32. Dowiesz się także jak automatycznie wyliczać CRC dla danych transmitowanych np. przez DMA i jak automatycznie „doklejać” wyliczoną wartość do transmitowanego pakietu danych. Umożliwi ci to realizację pakietowej transmisji danych, odpornej na zakłócenia.

Na koniec rozdziału zbudujesz jeszcze jedno przydatne urządzenie – dosyć nietypowy magnetofon. Masz pilota nadającego w dziwnym standardzie, nie potrafisz się z nim dogadać, masz kilka różnych pilotów w różnych standardach, a chciałbyś móc sterować urządzeniami w domu przy pomocy tylko jednego? A co jeśli by nagrać sygnał generowany przez inne piloty i go potem odtwarzać? Takie urządzenie to doskonała okazja, aby nabrać perfekcji w posługiwaniu się timerami, systemem zdarzeń i DMA, a także... maszyną stanów.

No i zupełnie na koniec jeszcze jeden podsystem XMEGA – kontroler IrDA, czyli jak naprawdę szybko przesyłać dane podczerwienią.


I to niestety koniec. Zapytasz zapewne, a gdzie ADC, DAC, SPI, I2C itd.? No cóż, książka nie jest z gumy, a ta liczy sobie 632 strony. Te i wiele innych, jeszcze ciekawszych przykładów i projektów znajdzie się miejmy nadzieję w kolejnym tomie.

Pozdrawiam,
Tomasz Francuz


Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

6 komentarzy:

  1. Także uważam, że jest bardzo dobrą książką, ale tak jak pisał dondu w swojej recenzji, to jest rozwinięcie pierwszej książki autora. Na prawdę bardzo dużo wiedzy zawarł autor w tej książce. Tą drogą chcę podziękować i powiedzieć, że mam teraz zajęcie na najbliższy rok. Pozdrawiam!

    OdpowiedzUsuń
  2. Zastanawiam się nad zakupem tej pozycji razem z wcześniejszą częścią. Nie mam żadnego zestawu z mikrokontrolerem XMEGA, mam natomiast z ATMega8. Nie planuję kupować nic z XMEGA. Czy książka ta pomoże mi dużo z innymi AVRami czy tylko z XMEGA?

    OdpowiedzUsuń
    Odpowiedzi
    1. W zabawie ze zwykłymi AVRami ci za wiele nie pomoże, tylko tyle, że zachęci cię do korzystania także z nowszych rozwiązań. BTW, wskazana ATMega8 jest od wielu lat oznaczona jako niezalecana w nowych konstrukcjach. Ludzie ciągle ją wybierają bo w necie jest wiele przykładów, ale nie ma żadnego problemu z przesiadką na coś nowszego. Obecnie nie ma uzasadnienia dla używania AVR z rodziny ATMega, gdyż pod każdym względem lepsze są XMEGA (są ich rozwinięciem), ale nawet w rodzinie ATMega lepiej wybrać coś nowszego. Absolutne minimum to ATMega88.

      Usuń
    2. Dziękuję za szybką i rzeczową odpowiedź. Kupiłem obie książki.
      W związku z tym, co Pan napisał o używaniu ATMegi mam pytanie. Jaki mikrokontroler Pan poleca do sterowania silnikiem krokowym napędzającym generator linii laserowej? Planowałem w tym celu wykorzystać jakiś AVR, jednak nie potrafię ocenić potrzeb projektu w kontekście możliwości mikroprocesora.

      Usuń
    3. Nie wiem jak takie urządzenie działa. Silnik krokowy można sterować z dowolnego mikrokontrolera, w tym z ATMega8. Pytanie jaki to silnik (moc), ile kroków na minutę jest potrzebne, czy jest potrzebna praca mikrokrokowa i zwrotna informacja o położeniu. Seria ATMega nie ma żadnego wsparcia dla silników krokowych, wszystko jest realizowane na zewnętrznych układach kontrolerów silnika. Seria XMEGA ma wsparcie dla sterowania silnikami w postaci układu AWeX umożliwiającego sprzętowe generowanie impulsów sterujących mostek, włącznie ze sprzętowym generowaniem czasów martwych + układ fault condition. W okrojonej wersji (tylko dead time + fault condition) wsparcie mają niektóre nowsze ATTiny. Niestety z braku miejsca w książce nie umieściłem informacji o tym, może pojawią się na blogu, jeśli będzie takie zapotrzebowanie. Aczkolwiek o sterowaniu krokowcami przy pomocy ATMega znajdziesz na tym blogu sporo informacji. Proponuję też przenieść dyskusję na elektroda.pl, co jest wygodniejsze, a i więcej potencjalnie pomocnych osób to przeczyta.

      Usuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.