Problem pojawia się wtedy, gdy chcemy te układy zaprogramować w środowisku Arduino IDE. Jak to zrobić? W internecie znajdują się propozycje użycia płytki Arduino UNO lub NANO w roli wymaganego programatora UPDI. Wiąże się to z koniecznością uprzedniego zaprogramowania wybranej płytki oraz instalacją zewnętrznych bibliotek, a także wykonaniu kilku połączeń. Sądząc po komentarzach umieszczonych na listach dyskusyjnych, skuteczność powyższego rozwiązania jest wątpliwa – mi ani razu nie udało się w ten sposób zaprogramować żadnego mikrokontrolera.
Rozwiązanie problemu
Pomysłem na rozwiązanie problemu jest zakup płytki zgodnej z Arduino Every lub Arduino UNO Wi-Fi Rev2 koniecznie wyposażonej w jeden z tytułowych mikrokontrolerów, następnie wylutowanie tego mikrokontrolera i podłączenie własnego, który chcemy zaprogramować. Do połączenia wystarczą tylko trzy przewody – GND, VDD oraz UPDI. Pierwszą płytką, którą poddałem modyfikacji była płytka Seeeduino Crypto bazująca na układzie ATmega4809 i zgodna z Arduino UNO Wi-Fi Rev2. W celu ułatwienia wykonywania połączeń między płytką a programowanym układem, dostępny pad połączony z nóżką UPDI wylutowanego układu poprowadziłem do nieużywanego wolnego złącza Gold Pin (rysunek 1).
Kolejnym krokiem jest wybranie w menu Narzędzia → Płytka: Arduino UNO Wi-Fi Rev2. W menu Narzędzia → Register emulation wybrałem ATMEGA328. Tak, to nie pomyłka. Po wybraniu ATMEGA328 zamiast ATMEGA4809 uzyskujemy bezpośredni dostęp do portów, dzięki czemu możemy wyeliminować potrzebę korzystania z instrukcji digitalWrite a tym samym znacząco zwiększyć prędkość operacji na rejestrach. Wadą wyboru trybu emulacji ATMEGA328 jest całkowita zmiana numeracji pinów i konieczność odszukania tych których potrzebujemy.
Czy za pomocą płytki Seeeduino Crypto, która była wyposażona w ATmega4809 można programować również układy ATmega4808? Jest to możliwe. W tym celu należy dokonać drobnych zmian w pliku konfiguracyjnym avrdude.conf znajdującym się w katalogu podobnym do:
C:\Users\nazwa_uzytkownika\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf
Należy odszukać w sekcjach ATmega4808 oraz ATmega4809 linie zawierające sygnatury mikrokonrolerów odpowiednio:
Podsumowanie
Nagrodą za udaną przeróbkę jest kosztujący kilkadziesiąt złotych programator oraz wylutowany mikrokontroler do ponownego wykorzystania. Wymaga to jednak zachowania szczególnej ostrożności i oczyszczenia padów po wylutowanym układzie, tak aby nie pozostawić żadnych zwarć. Jednak zaznaczam, że modyfikacje z pewnością spowodują utratę gwarancji i są dokonywane na własne ryzyko.
Piotr Chodnicki
piotr@akademia.warszawa.pl