Mikrokontrolery AVR XMEGA w praktyce, część 1. Co trzeba wiedzieć, by zacząć
Mikrokontrolery AVR firmy Atmel zdobyły bardzo dużą popularność na polskim rynku. Dotychczas producent oferował nam dwie rodziny: ATtiny oraz ATmega, które różniły się możliwościami i ceną, choć sposób ich programowania był identyczny. Wprowadzając rodzinę XMEGA, producent dokonał bardzo istotnych zmian, zarówno w budowie procesora, a także w sposobie pisania programów. Niniejszy cykl artykułów ma na celu pokazać różnice między tradycyjnymi ATmega a nowymi XMEGA oraz jak wykorzystać je w praktycznych rozwiązaniach. Mam nadzieję, że zachęcę Czytelników do używania tych fantastycznych procesorów.
Podstawowe informacje – zegar i zasilanie
Napięcie zasilania wynosi od 1,6 V do 3,6 V. Częstotliwość taktowania procesora wynosi maksymalnie 32 MHz już przy napięciu 2,7 V. Klasyczna ATmega8 mogła się rozpędzić tylko do 16 MHz i potrzebowała do tego wyższego napięcia. Obniżenie napięcia zasilania pozwala znacząco zmniejszyć pobór prądu przy zachowaniu wysokiej wydajności obliczeniowej. Na porty procesora można podać napięcie nie większe niż napięcie zasilania, więc należy uważać przy podłączaniu układów zasilanych napięciem 5 V.
Po włączeniu zasilania procesor uruchamia się, korzystając z wbudowanego generatora RC o częstotliwości 2 MHz. XMEGA oferuje dużo bardziej rozbudowany system dystrybucji sygnałów zegarowych niż tradycyjne AVR-y. Najważniejszą różnicą jest to, że już możemy zapomnieć o fusebitach! Cały system zegarowy możemy konfigurować z poziomu programu w dowolnym momencie. Na wypadek błędnej konfiguracji lub awarii, procesor jest w stanie wykryć nieprawidłowy sygnał zegarowy i przełączyć się samoczynnie na wbudowany generator 2 MHz, więc można eksperymentować bez obawy o zablokowanie procesora. Mamy do dyspozycji następujące generatory sygnału zegarowego:
- wbudowany RC 32 kHz, 2 MHz, 32 MHz,
- zewnętrzny kwarcowy od 32 kHz do 16 MHz.
Oprócz tego, mamy do dyspozycji układ PLL podwyższający częstotliwość źródła oraz szereg różnych preskalerów, obniżających częstotliwość. Co ciekawe, niektóre peryferia mogą pracować z częstotliwością wyższą niż rdzeń procesora (32 MHz). Nic nie stoi na przeszkodzie, by procesor pracował z częstotliwością nawet 1 kHz, aby zmniejszyć pobór mocy, a potem przełączyć go na 32 MHz, gdy użytkownik będzie potrzebował szybkiego przetwarzania programu.
Dodatkowymi dwoma cukiereczkami poprawiającymi wydajność procesora jest system zdarzeń oraz DMA. Układy te pozwalają przetwarzać dane oraz przenosić je między peryferiami lub pamięcią bez zaangażowania rdzenia. Taka możliwość świetnie poprawia np. wydajność układów pomiarowych – przetwornik ADC może ładować dane prosto do pamięci, podczas gdy rdzeń może je analizować w tym samym czasie.
Dokumentacje
Przyzwyczailiśmy się, że Atmel publikuje jedną dokumentację, w której znajdziemy wszystko na temat jednego lub kilku podobnych mikrokontrolerów. W przypadku XMEGA jest inaczej.
Poszukajmy na stronie Atmela dokumentacji procesowa ATxmega128A3U. Znajdziemy dwie dokumentacje. Dokument Atmel AVR XMEGA AU Manual zawiera opis poszczególnych peryferiów bez koncentrowania się na konkretnym modelu procesora. Natomiast ATxmega64A3U/128A3U/192A3U/256A3U Complete zawiera sprecyzowane informacje specyficzne dla danego modelu. Dlaczego te informacje zostały rozdzielone?
Procesory XMEGA zostały zaprojektowane z myślą o łatwym przenoszeniu kodu. Tak więc, kod z ATxmega128A3U możemy łatwo przenieść na ATxmega16A4U, gdyż peryferia w nim zawarte są identyczne. Różnią się tylko ilością tych peryferiów, rozmiarem pamięci oraz liczbą nóżek w obudowie. Oba należą do rodziny A z rozszerzeniem USB, czyli AU. Dlatego informacje o peryferiach, wspólne dla wszystkich mikrokontrolerów z tej rodziny, umieszczono w osobnej dokumentacji.
Warto zwrócić uwagę, że peryferia są wielokrotnie powielone oraz dostępne na wielu różnych portach procesora. Już nie ma problemów znanych z ATmega, kiedy np. wyjścia PWM wyprowadzone są na te same nóżki co jedyny interfejs SPI – w przypadku XMEGA po prostu wystarczy użyć SPI w jednym porcie, a PWM w drugim. Niektóre XMEGA mają nawet 8 interfejsów USART, 4 SPI, 4 I2C, 2 przetworniki ADC, 2 DAC oraz 8 timerów 16-bitowych!
Polecam też dokumenty z serii AVR1000, a przede wszystkim:
- AVR1000: Getting Started Writing C-code for XMEGA
- AVR1001: Getting Started With the XMEGA Event System
- AVR1003: Using the XMEGA™ Clock System
- AVR1005: Getting started with XMEGA
- AVR1305: XMEGA Interrupts
- AVR1306: Using the XMEGA Timer/Counter
- AVR1307: Using the XMEGA USART
- AVR1308: Using the XMEGA TWI
- AVR1309: Using the XMEGA SPI
Tych poradników jest cała masa, a wyżej wymienione to tylko wierzchołek góry lodowej. Zachęcam do poszperania na stronie Atmela, bo można tam znaleźć wiele przykładów i gotowych rozwiązań.
Skąd czerpać wiedzę
W polskim Internecie pojawiły się już dwa cykle artykułów na temat mikrokontrolerów XMEGA. To najlepszy sposób, by poznać podstawy ich działania i najszybciej nauczyć się je wykorzystywać. Zapraszam na kurs prowadzony na stronie Leon Instruments oraz na świetnym blogu.
Godna polecenia jest również książka Tomasza Francuza pt. AVR. Praktyczne projekty. Autor jest znawcą tematu, a także świetnym pisarzem – w książce znajdują się podstawowe informacje zrozumiałe dla początkujących oraz nieco bardziej skomplikowane rzeczy dla osób chcących zagłębić się w szczegóły. Niezmiernie przydane są również krótkie i czytelnie opisane fragmenty kodu, pozwalające od razu przetestować opisywane peryferia na jakimś zestawie testowym.
Zestawy rozwojowe
Producent przygotował kilka zestawów testowych o nazwie XMEGA XPLAINED. Dostępne są płytki z procesorami należącymi do różnych rodzin. W Internecie znajdziemy również sporo materiałów szkoleniowych przygotowanych przez firmę Atmel. Zestawy XPLAINED mają niewątpliwie największą wartość edukacyjną, jednak wadą jest ich stosunkowo wysoka cena.
Dobrym rozwiązaniem, będącym złotym środkiem pomiędzy kosztami a możliwościami jest płytka rozwojowa X3-DIL64 produkcji Leon Instruments z procesorem ATxmega128A3U. Zaprojektowano ją tak, by wyglądem przypominała układ scalony w obudowie DIL64 w celu łatwego budowania prototypów przy użyciu tanich i popularnych płytek stykowych. Wszystkie wyprowadzenia procesora są dostępne dla użytkownika, a ponadto dostępny jest kompletny układ zasilający z USB, złącze do karty SD oraz do programatora PDI. Ważne! Nie musisz kupować programatora PDI, bo procesor ma fabrycznie wgrany bootloader FLIP, dzięki któremu można przesyłać programy przez zwyczajny kabel USB! Warto też dodać, że przykłady opisane w książce „AVR. Praktyczne projekty” praktycznie bez zmian da się uruchomić na zestawie X3-DIL64, dzięki czemu stanowi on idealną pomoc dla osób wchodzących w XMEGA.
Programator
Mikrokontrolery XMEGA nie posiadają interfejsu do programowania pamięci, takiego jak w ATmega i ATtiny, więc niestety może nas czekać zmiana programatora. Polecam następujące trzy rozwiązania.
- FLIP – darmowy program do ściągnięcia ze strony producenta, umożliwiający wgrywanie programów przez zwyczajny kabel USB. Niestety nie integruje się z Atmel Studio i jest mało wygodny przy dużych projektach. Jednak na początek jest idealny, jako rozwiązanie najtańsze, bo kabelek USB każdy ma. Aby FLIP działał, procesor musi mieć wgrany bootloader FLIP – warto dodać, że procesor na płytce X3-DIL64 z Leon Instruments ma FLIP wgrany fabrycznie, a przycisk uruchamiający tryb programowania FLIP jest dostępny na płytce.
- AVR ISP mkII – programator, który interfejsy ISP, PDI i TPI, a więc umożliwiający zaprogramowanie wszystkich współczesnych mikrokontrolerów AVR. Znakomicie integruje się z Atmel Studio. Wystarczy nacisnąć F5, by program został przesłany do procesora. Na stronie AVT, Kamami i allegro jest dostępna cała masa różnorodnych klonów mkII za bardzo atrakcyjną cenę. Polecam ten programator wszystkim hobbystom.
- AVR Dragon – hit od wielu lat, gdyż jako jedyny za rozsądną cenę udostępnia interfejs JTAG. Dzięki niemu można zajrzeć do środka procesora i zobaczyć, co się z nim dzieje. Jest to nieoceniona pomoc przy większych projektach, gdyż pozwala szybko i skutecznie znajdywać błędy w programach. AVR Dragon polecam dla profesjonalistów i bardziej zaawansowanych hobbystów.
Dystrybutorem zestawu X3-DIL64 jest KAMAMI.pl. |
Dominik Leon Bieczyński