poniedziałek, 14 marca 2011

Kurs XMega (01): Co trzeba wiedzieć, by zacząć?

Autor: Dominik Leon Bieczyński
Redakcja: Dondu

Artykuł jest fragmentem cyklu: Kurs mikrokontrolerów XMega by Leon-Instruments

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 najnowszą 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.



Mikrokontroler XMEGA


Zegar i zasilanie

Napięcie zasilania wynosi od 1,6V do 3,6V. Częstotliwość taktowania procesora wynosi maksymalnie 32MHz już przy napięciu 2,7V. Klasyczna ATmega8 mogła się rozpędzić tylko do 16MHz 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 5V.

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 tam dwa dokumenty:
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 osiem interfejsów USART, cztery SPI, cztery I2C, dwa przetworniki ADC, dwa przetworniki DAC oraz osiem timerów 16-bitowych!


Zestawienie modeli XMEGA


Polecam też dokumenty z serii AVR1000, a przede wszystkim:
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ę?

Na blogu oprócz niniejszego kursu także artykuły Tomasza Francuza pt. Wstęp do XMega. Zapraszam także na moją stronę Leon Instruments, gdzie także sporo informacji znajdziesz.

Godna polecenia jest również najnowsza 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.

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.


Moduł prototypowy X3-DIL64


Programatory

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 obsługuje 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. W sklepach internetowych i na portalach aukcyjnych 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.

Dominik Leon Bieczyński
leon-instruments.pl

2 komentarze:

  1. Witam, ostatnio postanowiłem nauczyć się programować xmegi lecz tak mnie zastanawia jak podłączyć programator AVRISP MKII do xmegi skoro nie ma dedykowanych pinów MOSI, MISO itd.? :)

    OdpowiedzUsuń
  2. xmege się podłącza do PDI a nie MOSI, MISO... :)

    OdpowiedzUsuń