Kurs XMEGA: co trzeba wiedzieć, by zacząć (01)

|

Kurs XMEGA
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.



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 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:

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 mikrokontrolery.blogspot.com.

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


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. 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.
Kurs XMEGA:Moduły prototypowe:

17 komentarze :

Anonimowy pisze...

Wspaniały kurs. Już zakupiłem sobie X3-DIL64. Jednak ciekawi mnie jedna rzecz. Jak wgrać bootloader FLIP do pustej XMEGI ? Czy taki bootloader jest gdzieś ogónie dostępny czy trzeba go kupić ?

Dominik Leon Bieczyński pisze...

Bootloader już jest wgrany na płytkę X3-DIL64 i nic więcej nie musisz robić. Podłącz kabel USB, uruchom bootloader i działaj. Jak wgrać programy przy pomocy bootloadera FLIP opisałem w 2 części kursu.

B&W pisze...
Ten komentarz został usunięty przez autora.
B&W pisze...

Do tej pory pisałem programy w assemblerze (i nie chcę tego zmieniać) na kontrolery tiny i mega. Mam programator, który teoretycznie potrafi obsłużyć również PDI i TPI (taki jak na tu: Allegro 3810121836), ale nie wiem jak podłączyć jego wyjście ISP do gniazda PDI w oferowanym urządzeniu, a instrukcja programatora na powyższy temat milczy. Proszę zatem o jakieś wskazówki.

Dominik Leon Bieczyński pisze...

Na aukcji jest zdjęcie, na którym widać linie oznaczone przez DATA i RESET. Obstawiam, że te dwie będą wykorzystywane przez PDI, jednak proponuję zapytać producenta programatora jak podłączyć PDI, skoro w instrukcji obsługi nie napisał. Tak czy inaczej, można płytkę X3-DIL64 programować przez FLIP, chociaż programator PDI jest zdecydowanie wygodniejszy i bardzo polecam programator zgodny z tym standardem i koniecznie integrujący się z Atmel Studio.

Ertew pisze...

Witam. Jeszcze jedno pytanie odnośnie bootloadera.
Jeśli kupię procesor ATXmega z USB prosto ze sklepu (np. ATxmega128A1U ze względu na więcej we/wy) to muszę kupić/wypożyczyć programator by wgrać bootloader, czy FLIP będzie już w procesorze wgrany w fabryce Atmela?

Anonimowy pisze...

Jak podłączyć to TPI do AVR Dragona ? On ma tylko JTAG i ISP. Jak podłączyć zasilanie ?

Dominik Leon Bieczyński pisze...

Fabrycznie XMEGA mają pamięć czystą jak tabula raza. Bootloader trzeba wgrać programatorem PDI lub JTAG.

Dominik Leon Bieczyński pisze...

Dragon współpracuje z XMEGA przez JTAG. Na płytce Dragona są piny, na których jest wyprowadzone zasilanie 5V. Podłącz to do złącza 5V/GND, które jest obok gniazda USB.

Mick g pisze...

Spotkałem się ze stwierdzeniem ze ASF dedykowany dla Xplain drastycznie zwiększa objętość kodu, czy to prawda?

Dominik Leon Bieczyński pisze...

Możliwe, że ktoś się pomylił i kompilował programy przy włączonej optymalizacji O1, co generuje kod łatwy do debugowania, ale duży. Aby wygenerować bardziej zwarty kod, trzeba wybrać optymalizację Os. Wtedy program będzie zabierał zdecydowanie mniej miejsca. Szczegóły są opisane na stronie http://mikrokontrolery.blogspot.com/2011/04/atmel-studio-pelne-ide-avr-arm-cz1.html

Mick g pisze...

Czy jest możliwość puszcenia timera z pełną szybkością PLL, do zliczania długości impulsu w połączeniu z komparatorem? Wiem ze istnieje modul HI-RES ale dla PWM a tu chodzi mi o pomiar a nie generowanie.

Dominik Leon Bieczyński pisze...

Witam. W XMEGA komparator może wywoływać przechwytywanie wartości timera, poprzez połączenie systemem zdarzeń. Wydaje mi się, że maksymalna częstotliwość pracy timera w takim przypadku to 32MHz.

Anonimowy pisze...

Czy to prawda, że w XMegach bootloader jest umieszczany w specjalnym obszarze pamięci i nie zajmuje "głównego" flasha ? Czy aby uruchomić bootloader zawsze trzeba użyć dedykowanego pinu czy można zrobić to tak jak w atmedze, że ładuje się bootloader robi swoje i za nim ładuje się program główny i tak po każdym resecie ?

Anonimowy pisze...

Piszesz tak:
"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."
Ale z tego, co zdążyłem już gdzieś przeczytać "AU" to nie to samo, co AxU, gdzie "U" oznacza po prostu USB. Dla ATxmega128A3U powinniśmy szukać raczej dokumentu "AVR XMEGA A Manual". Czy się mylę?

Dominik Leon Bieczyński pisze...

Seria AU zawiera procesory A1U, A3U, A4U. U to nie tylko USB tylko też wiele innych usprawnień, a co najlepsze - są tańsze niż A :)

Artut B pisze...

Bedzie odcinek o komunikacji RS232?

Prześlij komentarz

Skomentuj!

Sklep Leon Instruments