Płytka Gertduino to połączenie dwóch środowisk. Jej największą zaletą jest możliwość zastosowania szerokiej gamy płytek rozszerzających dostępnych dla Arduino oraz użycia do programowania darmowego środowiska Arduino, co doskonale wpisuje się w filozofię systemów otwartych. Arduino od samego początku istnienia może pracować pod kontrolą różnych systemów operacyjnych, więc użytkowanie go w środowisku Linuksa, który jest "naturalnym" dla Raspberry, nie stanowi najmniejszego problemu.
Oprócz mikrokontrolera ATmega328, płytka Gertduino jest wyposażona w ATmega48, który jest procesorem pomocniczym, pełniącym funkcje zegara czasu rzeczywistego i odbiornika/ dekodera podczerwieni. Jeżeli jednak chcemy w pełni wykorzystać możliwości RTC, musimy dodatkowo zaopatrzyć się w baterię podtrzymującą zasilanie, której nie dołączono do zestawu. Co istotne, mikrokontroler ATmega48 jest na stałe dołączony do interfejsu I²C Raspberry PI, co może powodować różne niespodziewane sytuacje w przypadku błędów programowych. Niewykorzystane doprowadzenia wejścia/wyjścia ATmega48 wyprowadzone są na złącza szpilkowe i można je wykorzystać we własnych aplikacjach.
Nie potrafię zrozumieć intencji, dla której na płytce został umieszczony ten dodatkowy procesor. Jego funkcję doskonale spełniłby DS1307 obsługiwany domyślnie, a pobierający znacznie mniej prądu. Funkcję dekodera podczerwieni można by było powierzyć mikrokontrolerowi głównemu - ATmega328 - mającemu wystarczający zapas mocy obliczeniowej. Mikrokontroler ATmega48 - w przeciwieństwie do ATmega328 - jest wlutowany w płytkę, więc nieudane eksperymenty mogą zakończyć się koniecznością demontażu obudowy QFP, co nie należy do zadań łatwych.
Gertduino jest wyposażone także w nadajnik/ odbiornik w standardzie RS232 z możliwością użycia go z każdym mikrokontrolerem osadzonym na tej płytce lub z interfejsem UART Raspberry PI. Konfigurację sprzętową ustala się za pomocą zworek i łączników pomiędzy odpowiednimi wyprowadzeniami złącz. Niestety, nie jest to rozwiązanie przemyślane - aby nie pomylić się, każdorazowo trzeba sięgać do instrukcji. Można było to rozwiązać nieco lepiej, przynajmniej grupując sygnały w obrębie jednego złącza lub zastosować multiplekser czy klucze analogowe dla ułatwienia wyboru konfiguracji UART. Jest to tym bardziej irytujące, że w komplecie nie ma ani zworek, ani mostków i trzeba się w nie zaopatrzyć samodzielnie. Koszt tych elementów jest niewielki, więc nie ma uzasadnienia dla ich braku w zestawie.
Płytka ma też miejsce na komponenty zasilacza, ale w wersji dostarczonej do testowania jego elementy nie były wlutowane. Jeżeli zasilacz jest nam niezbędny, można je wlutować - kompletna dokumentacja i wykaz są załączone do opisu projektu Gertduino.
Przejdźmy do najciekawszego moim zdaniem elementu płytki, którym jest mikrokontroler ATmega328. Jego podstawową funkcją jest obsługa złączy rozszerzeń zgodnych rozstawem z Arduino UNO. Umożliwia to zastosowanie gotowych, popularnych modułów rozszerzeń, praktycznie dopasowanych do każdej możliwej aplikacji. Do programowania procesora możemy użyć kompilatora gcc dla procesorów Atmela lub środowiska Arduino. W odróżnieniu od Arduino UNO, do Gertduino ma zamontowane 6 diod LED oraz dwa przyciski. Diody są buforowane, więc nie ma problemu przeciążenia portów procesora.
W Arduino programowanie mikrokontrolera odbywa się za pomocą interfejsu ISP wykorzystującego SPI Raspberry PI oraz zmodyfikowaną wersję oprogramowania AVRdude. Wyboru programowanego układu (ATmega328/ ATmega48) dokonujemy poprzez odpowiednią konfigurację zwór interfejsu (podobnie jak poprzednio, musimy zaopatrzyć się w nie samodzielnie). Jest to nieco uciążliwe, bo każdorazowo, aby odłączyć się od PI, jest konieczny demontaż czterech zworek. Wybór programowania poprzez ISP blokuje także interfejs SPI Raspberry. Przypomnijmy, że nie mamy również możliwości użycia interfejsu I²C, a może także UART, więc najbardziej użyteczne interfejsy PI (pomijając USB) są niedostępne dla innych aplikacji. To istotna wada Gertduino, o której trzeba pamiętać tworząc własne urządzenia.
Zgodność z Arduino
Podstawową funkcją płytki jest zapewnienie zgodności z akcesoriami dla Arduino, więc w dalszej części artykułu skupię się tylko na tym aspekcie. W celu wypróbowania działania płytki i programu "blink.ino" jest konieczna instalacja środowiska Arduino. W tym celu, za pomocą konsoli wydajemy polecenie
sudo apt-get install arduino
Po pomyślnym zainstalowaniu jest konieczne pobranie zmodyfikowanego dla Raspberry PI AVRdude (dla Raspbiana). Służy do tego następująca sekwencja poleceń:
cd /tmp
wget http://projects-downloads.drogon.net/gertboard/avrdude_5.10-4_armhf.deb
sudo dpkg -i avrdude_5.10-4_armhf.deb
sudo chmod 4755 /usr/bin/avrdude
Konieczne są też drobne zmiany konfiguracji. Należy je wykonać za pomocą następujących poleceń:
cd /tmp
wget http://projects-downloads.drogon.net/gertboard/setup.sh
sudo chmod +x setup.sh
sudo ./ setup.sh
Teraz możemy wyłączyć PI, zamontować Gertuino. Płytka ma wymiary zgodne Raspberry PI. Niestety, zachowując zgodność wymiarów nie przewidziano otworu dla kołka montażowego i dlatego całość niepewnie trzyma się na złączu GPIO Raspberry PI. Konieczne jest zwrócenie uwagi na delikatne obchodzenie się z płytką i modułami rozszerzeń, bo w prosty sposób można powyginać piny lub wręcz wyłamać złącze GPIO.
Po włączeniu Raspberry PI, można uruchomić środowisko Arduino i wczytać przykładowy szkic blink.ino. Przed załadowaniem programu (rysunek 1) jest konieczny wybór płytki. Można to zrobić za pomocą menu Tools → Board → Gertboard with ATmega328. Następnie musimy dokonać wyboru programator (rysunek 2): Tools → Programmer → Raspberry Pi GPIO. Do programowania nie jest używany bootloader, lecz interfejs ISP. Z tego względu należy programować procesor nieco inaczej niż standardowo, tj. za pomocą skrótu Ctrl+U. W tym celu z menu wybieramy opcję File → Upload using programmer (rysunek 3).
Jeżeli wszystko przebiegło pomyślnie, to możemy cieszyć się migającą niebieską diodą LED... Nie obędzie się jednak przy tym bez rozwiązywania dalszych problemów, ponieważ nie wiedzieć dlaczego dioda LED miga zbyt wolno. Przyczyną jest fakt, że mikrokontroler ATmega328 ma domyślnie ustawione bity konfigurujące generator przebiegu taktującego rdzeń mikrokontrolera na częstotliwość 1 MHz, co jest niezgodne z Arduino. Konieczne jest poprawne ustawienie fusebitów za pomocą polecenia:
sudo avrdude -qq -c gpio -p
atmega328p -U lock:w:0x3F:m
-U efuse:w:0x07:m -
U lfuse:w:0xE7:m - U hfuse:w:0xD9:m
Teraz już powinno być dobrze. Należy bezwzględnie o tym pamiętać, aby nie stracić czasu na poszukiwanie błędów w działającym programie. Jest to moim zdaniem kolejny minus zestawu. Skoro zestaw ma być zgodny z Arduino, to mikrokontroler powinien być przygotowany i poprawnie skonfigurowany, aby nie sprawiać trudności zwłaszcza osobom początkującym.
Podsumowanie
Reasumując, zestaw działa, można za jego pomocą połączyć świat wbudowanego Linuksa i mikrokontrolerów AVR. Jest ciekawą propozycją dla użytkowników Raspbery PI, którzy nie znają Arduino, a chcą zapoznać się z mikrokontrolerami. Bez Raspberry PI lub zewnętrznego programatora płytka jest mało użyteczna i posiadaczy Arduino raczej nie przekona, bo przecież można je połączyć z komputerem bezpośrednio przez USB, bez zbędnych kombinacji i utraty możliwości programowania za pomocą PC. Produkt jest niszowy, a konkurencja rośnie w siłę, ponieważ już dzisiaj dostępne są płytki Chipkit PI z procesorem PIC32 oraz Embedded PI z STM32 mającymi większą wydajność przy zachowaniu zbliżonej ceny.
Adam Tatus, EP
Redakcja Elektroniki Praktycznej dziękuje firmie Farnell element 14 za udostępnienie płytki do testów.