Mikrokontrolery AVR cieszą się niezmienną popularnością, ze względu na swoją prostotę, a jednocześnie spore możliwości. Co ciekawe, mimo, że od lat wszyscy wieszczą rychłą śmierć mikrokontrolerów 8-bitowych, mają się one ciągle dobrze, a kolejne, nowe rodziny są wprowadzane na rynek. Jakiś czas temu Microchip wprowadził na rynek nową rodzinę mikrokontrolerów ATMega. Przeszły one spory lifting, m.in. wzbogacono poczciwe ATMegi o nowe peryferia znane z serii XMEGA, jednocześnie upraszczając je nieco, co z pewnością ułatwi migrację.
Z kilku istotnych cech nowej serii ATMega wymieniłbym:
- płaska przestrzeń adresowa – jak pamiętamy AVRy od zawsze miały dwie, oddzielne przestrzenie adresowe – FLASH zawierający pamięć programu oraz SRAM zawierający modyfikowalne dane. Obie przestrzenie były rozdzielne, co przyprawiało programistów piszących w C/C++ o ból głowy – wszyscy pamiętamy słynne PROGMEM, pgm_raad_XX, __flash, __memx itd. Z tym już koniec – wspólna przestrzeń adresowa powoduje, że już nie musimy się przejmować gdzie co jest.
- event system – dla niezorientowanych jest to układ umożliwiający połączenie ze sobą różnych peryferii MCU, w efekcie mogą one współpracować, bez zaangażowania CPU. Np. zdarzenie na pinie może wyzwolić timer, ADC lub inny układ peryferyjny co nie tylko odbywa się bez udziału CPU, ale czas od zdarzenia do efektu jest stały.
- z peryferii mamy do pięciu 16-bitowych timerów, do 4 UART/USART, 10-bitowy ADC z 16-kanałowym multiplekserem analogowym no i pozostałe znane nam peryferia, czyli niestety nic nowego, ale za to mamy 5 wbudowanych źródeł nap. referencyjnego + Vcc.
- programowalny układ logiczny z 4 tablicami LUT umożliwiający realizację funkcji przerzutników typu D, JK lub zatrzasków typu D lub RS oraz oczywiście kombinatoryki opartej na LUT. To wszystko jest spięte przez event system z pozostałymi peryferiami, dając w efekcie elastyczne narzędzie, które można ciekawie wykorzystać.
- maksymalne taktowanie to tylko 20 MHZ – szkoda, bo jest to wyraźny krok wstecz, w stosunku do 32 MHz XMEGA.
- znany z XMEGA kontroler pamięci NVM, user i signature row do przechowywania danych konfiguracyjnych, unikalne numery seryjne i inne rzeczy znane z XMEGA.
- kontroler NVM umożliwia płynne ustawienia rozmiaru pamięci bootloadera, co może być pomocne – w jednym z projektów musiałem użyć MCU z dwukrotnie większym FLASH tylko dlatego, żeby zmieścić bootloader, w tej rodzinie, wystarczy zmienić ustawienia jednego z rejestrów.
- elastyczny system zegarów – mamy 5 zegarów + preskaler, dzięki czemu, każdy odnajdzie pożądaną przez siebie częstotliwość.
- rozbudowany zegar RTC.
Rodzina ta produkowana jest w obudowach od 28 do 48 pinów, posiada do 48 kB FLASH i do 6 kB SRAM. Dla początkujących hobbystów ważne jest, że procesory te produkowane są także w obudowie DIP, co umożliwia ich wykorzystanie z płytkami stykowymi i proste lutowanie (ja osobiście wolę SMD ale skoro mamy te MCU w DIP, TQFP, QFN i SSOP to każdy znajdzie coś dla siebie). Osoby znające XMEGA nie będą miały problemów z przesiadką na te MCU i odnajdą tu znany z XMEGA styl opisu peryferiów. Niestety, nie znajdą tu też nic nowego w stosunku do XMEGA, poza programowalną logiką znaną z rodziny E5 i zasilaniem do 5V. Z drugiej strony, to proste MCU i jeśli ktoś potrzebuje wodotrysków to przejście na ARM wydaje się być rozwiązaniem.
CURIOSITY NANO
Ale wróćmy do płytki ATMEGA4809 CURIOSITY NANO. Na samym początku – cena jest taka sobie, jakiś czas temu były różne promocje, niestety na dzisiaj kosztuje 16,37 Euro w sklepie Microchipa, w popularnych sklepach cena to ok. 92-100 zł. Trochę sporo, być może jest to związane z ogólnym szaleństwem na rynku półprzewodników. A co w tej cenie dostajemy?
W niewielkim pudełku (a raczej pudełeczku) znajdziemy niepozorną płytkę (ale o całkiem sporych możliwościach) oraz dwie listwy kołkowe. Zacznijmy od tych ostatnich – aby skorzystać z dobrodziejstw tej płytki musimy ją połączyć z resztą komponentów (sama płytka nie zawiera nic ciekawego – po prostu goły MCU z wyprowadzonymi pinami oraz debugger/programator). Stąd też wydaje mi się, że zabawę z modułem warto rozpocząć od przylutowania dołączonych listew kołkowych. Najprościej – włożyć je w płytkę stykową, wsunąć pomiędzy nie płytkę curiosity i przylutować – całość potrwa jakieś 2 minuty, a dzięki wstawieniu listew w płytkę stykową wszystko mamy ładnie unieruchomione podczas lutowania i co najważniejsze – mamy gwarancję, że listwy przylutujemy prosto.
Sama płytka jest niepozorna – zawiera procesor ATMega4809, przycisk, jednego LEDa i kwarc 32k do taktowania wbudowanego w MCU układu RTC. Ale to nie wszystko – zawiera jeszcze jeden komponent, bez którego w ogóle nie zadawałbym sobie trudu opisywania tej płytki – a jest nim programator/debugger. Co ciekawe jest on zbudowany w oparciu o znacznie potężniejszy procesor ARM – SAM D21 ze stajni Microchipa. Dzięki temu cały moduł możemy podłączyć do PC i od razu rozpocząć zabawę. Nie jest potrzebny żaden zewnętrzny programator. Co więcej, znajdujący się na pokładzie programator/debugger możemy użyć także do programowania innych układów. Poprzez to samo USB mamy też wirtualny port szeregowy (RS232), umożliwiający komunikację pomiędzy MCU (ATMega) a PC.
Aby rozpocząć zabawę potrzebujemy jeszcze jedno – musimy ściągnąć darmowe programy – Microchip Studio lub MPLAB X. Oba to kompletne środowiska zintegrowane, zawierające edytor, kompilator i wszystko co potrzebne, aby rozpocząć zabawę z MCU.
Microchip Studio można pobrać stąd – https://www.microchip.com/en-us/development-t...ware/microchip-studio-for-avr-and-sam-devices
A MPLAB X stąd – https://www.microchip.com/en-us/development-tools-tools-and-software/mplab-x-ide
Ja używam Microchip Studio i dalej pokażę wszystko na przykładzie tego IDE.
Pierwsze podłączenie
Przed podłączeniem Curiosity do PC warto odpalić Mictorchip Studio. Dzięki temu po podłączeniu płytki, zostanie ona automatycznie rozpoznana, a nam się ukaże strona zawierająca wszystkie informacje o naszej nowej płytce:
Dodatkowo Windows otworzy okno, w którym zobaczymy kilka plików:
Jest to pewna ciekawostka i nowość w stosunku do wcześniejszych płytek Microchipa, które również zawierały wbudowany debugger. Ponieważ w tym przypadku debuger/programator zbudowany jest w oparciu o w miarę „mocny” procesor, oferuje on kilka możliwości – m.in. programowania ATMegi poprzez proste przeciągnięcie pliku hex z PC do otwartego okna CURIOSITY. W ten sposób możemy programować płytkę metodą drag&drop, co może być przydatne jeśli nie korzystamy z firmowego IDE lub mamy gotowe pliki hex ściągnięte np. z Internetu – w takiej sytuacji nie musimy instalować IDE. Właściwie nic nie musimy mieć – po prostu upuszczamy wybrany plik na CURIOSITY i gotowe – MCU jest zaprogramowany i realizuje program. Niestety rozpoznawany jest wyłącznie format IntelHEX, nie są rozpoznawane pliki w formacie elf – szkoda, bo są one wygodne – zawierają wszystkie informacje potrzebne do zaprogramowania MCU – zawartość FLASH, EEPROM, fuse- i lockbitów.
Oczywiście jeśli korzystamy z IDE to programowanie odbywa się klasycznie, bezpośrednio z IDE.
Postanowiłem sprawdzić nowy sposób programowania układu, tworząc prosty programik, który przy okazji wykorzystuje jedną z niewielu wbudowanych w płytkę rzeczy – diodę LED, którą będzie cyklicznie migał:
Kod: C / C++
Przy okazji na powyższym przykładzie widać, że struktura definicji IO umożliwiających dostęp do peryferii MCU wygląda identycznie jak dla XMEGA. Dodatkowo widać, że tak jak w przypadku XMEGA możliwy jest atomowy dostęp do pinów IO oraz pewne dodatkowe bajery – realizujemy je przez rejestry SET, CLR i TGL przyporządkowane do portu IO.
Sama płytka ma wyprowadzone wszystkie piny IO procesora, przy czym trzeba pamiętać, że niektóre z nich (PF0-PF3 oraz PB0-PB1) wykorzystywane są do realizacji także innych funkcji – podłączenia oscylatora RTC lub komunikacji z PC poprzez wirtualny UART. Jeśli z jakiś powodów piny te chcemy wykorzystać to należy przeciąć przygotowane na płytce odpowiednie punkty.
Ogólne wrażenia
Co tu wiele pisać – wszystko działa od strzału, bez najmniejszych problemów. Z pewnością przydatne jest, że po podłączeniu modułu jest on automatycznie rozpoznawany przez IDE, dostajemy od razu linki do strony z opisem procesora, schematami modułu i innymi informacjami. Programowanie zarówno poprzez IDE, jak i metodą przeciągnij i upuść jest bezproblemowe. Po prostu wszystko działa jak należy i nie ma się do czego przyczepić. Na plus można potraktować także wyprowadzenie wszystkich pinów MCU, dzięki czemu płytkę można potraktować jako procesor z podłączonym na stałe programatorem/debugerem.
Czy warto?
Trudno odpowiedzieć na to pytanie. Z pewnością osoba początkująca będzie mogła łatwo wejść w świat mikrokontrolerów, po zainstalowaniu IDE właściwie wszystko dzieje się automatycznie, mamy dużo przykładów – ale te raczej przydadzą się bardziej zaawansowanym użytkownikom.
Osoby zaznajomione ze starymi AVRami będą musiały trochę się przestawić na nową składnię definicji IO – taką jaką spotkamy w przypadku XMEGA. Ogólnie warto bo moim zdaniem jest ona bardziej przejrzysta, poza tym jest ona spójna z innymi procesorami AVR – rodziną Dx (DA, DB, itd.), które oferują wiele ciekawych funkcji. Szkoda niestety, że obecnie mamy ceny raczej spore – jeszcze rok temu płytka ta kosztowała ok. 60 zł, co byłoby ceną w miarę ok. Jednak mimo wszystko, jeśli ktoś chce poznać te procesory, to z pewnością płytka ta jest warta swojej ceny.
Warto też dodać, że płytki w formacie nano można wykorzystywać w połączeniu z CURIOSITY NANO BASE – czymś w rodzaju płyty głównej, w którą można wtykać inne moduły. Jest to ciekawa platforma do prototypowania, umożliwiająca uniknięcie plątaniny połączeń znanej z płytek stykowych.
Mo i jak zawsze – dostępny na płytce programator, a szczególnie debugger jest nie do przecenienia. Osoby, które z tego skorzystają z pewnością nie wrócą już do starych rozwiązań w których o debugowaniu można było pomarzyć, a programowanie odbywało się za pomocą USBAsp.
Fajne? Ranking DIY
