Nowa płytka Arduino NANO Every wykorzystuje mikrokontroler ATMega4809 AVR, w porównaniu z wcześniejszą wersją nano gdzie zastosowany był ATmega328. Na PCB wersji Every nie znajdziecie rezonatora kwarcowego, ze względu na wbudowany w mikrokontroler generator sygnału zegarowego do 20MHz. Otrzymujemy większą ilość pamięci flash - 48KB, więcej RAM - 6KB, oraz mniej EEPROM - 256B, zakres napięć zasilających płytkę 6-21V. Komunikację USB zapewnia ARM ATSAMD11D14A. Wersja NANO Every pracuje z poziomami napięć 5V podobnie jak w poprzedniej wersji nano. PCB umożliwia wlutowanie złącz glodpin, lub bezpośredni montaż powierzchniowy (SMT) na większej płytce (podobnie jak np. wiele modułów RF). Opisy wyprowadzeń dostępne są na spodniej stronie płytki, co może nie być wygodne np. na płytce stykowej. Do prób z modułem została wykorzysta wersja 1.8.9 środowiska Arduino.
Do rozpoczęcia pracy z NANO Every uruchamiamy menadżer płytek:
Narzędzia->Płytka->Menadżer Płytek
Wyszukujemy "every" i wybieramy pakiet: Arduino megaAVR Boards by Arduino.
W szkicu wybieramy płytkę Arduino NANO Every, oraz port COM (emulowany na USB), który pojawił się po podłączeniu płytki:
Znajdziemy także opcję emulacji rejestrów ATmega328P, czyżby była to zapowiedź możliwych problemów z kompatybilnością?
Na początek prosty test komunikacji z płytką i testowe miganie LED - test wypadł pomyślnie:
Wstępne próby pokazały problemy z uruchomieniem bibliotek typu TimerOne, MsTimer2, czy też próby ręcznej modyfikacji rejestrów timerów T0, T1, T2 znanych z wersji Arduino nano np. rejestru OCR1A itp. Osobiście w Arduino Nano przyzwyczaiłem się do timerów, które pozwalały na deterministyczne wyzwalanie przerwań, pomiar czasu, zliczanie impulsów lub generowanie przebiegów.
Jeżeli porównacie pliki iom328p.h i iom4809.h zlokalizowane w katalogu:
\arduino-1.8.9\hardware\tools\avr\avr\include\avr
to okaże się, że w ATMega4809 mamy do dyspozycji inny zestaw rejestrów, w tym rejestry RTC:
http://ww1.microchip.com/downloads/en/AppNotes/TB3213-Getting-Started-with-RTC-90003213A.pdf
Wersja NANO Every posiada 5 wyjść PWM ( w poprzedniej wersji nano dostępne było 6 wyjść PWM), różnica wstępuje dla wyjścia D11 - brak PWM w wersji Every.
W wersji NANO Every znajdziemy także więcej ustawień dotyczących napięcia odniesienia dla ADC:
https://www.arduino.cc/reference/en/language/functions/analog-io/analogreference/
Spróbujmy zrobić coś bardziej skomplikowanego, obsługa karty SD i zapis próbek z wejścia analogowego, zobaczymy czy nie wystąpi jakiś problem z kompatybilnością bibliotek. Do cyklicznego zbierania próbek z ADC wykorzystamy przerwania generowane przez RTC. Mamy do dyspozycji więcej pamięci RAM, więc wykorzystamy dwa bufory naprzemiennie wypełniane danymi z ADC, a następnie zapisywane do pliku na karcie SD. Tym sposobem powstanie rejestrator wartości napięcia na wejściu ADC, z zapisem danych do pliku na karcie SD. Napięcie będziemy próbkowali dość wolno, 256 razy na sekundę. Dla testu zostało wybrane jedno z dostępnych napięć odniesienia "INTERNAL4V3" więc możemy rejestrować napięcia z zakresu 0-4.3V, z teoretyczną rozdzielczością 10b.
Płytka pracuje z napięciem 5V, więc potrzebujemy adapter karty SD dopasowujący poziomy napięć i dostarczający zasilanie 3.3V dla karty.
Łączymy wyprowadzenia karty SD z wyprowadzeniami modułu:
CS z D10
DI z MOSI
DO z MISO
SLCK z SCK
Podajemy napięcie zmienne sinusoidalne 10Hz 4.3Vpp na wejście A0, a dane zapisane w pliku na karcie SD możemy zwizualizować np. w programie audio Audacity. Importujemy dane raw (16bit, big-endian, 1 kanał). Po znormalizowaniu widoczna jest sinusoida:
Prosty system rejestracji zmian napięcia działa:
Wbudowane RTC zachęciło mnie do podłączenia ENC28J60 oraz próby zsynchronizowania czasu przez Ethernet z wykorzystaniem NTP, niestety biblioteka UIPEthernet, nie chciała współpracować z płytką NANO Every.
Podsumowując: ciekawy i tani moduł wykorzystujący nowy mikrokontroler, który powstał po połączeniu Atmel i Microchip. Otrzymujemy nowe możliwości, ale także problemy z kompatybilnością z poprzednią wersją nano. Na PCB znajdziemy konwerter USB<->UART, który po zmianie firmware może stać się innym urządzeniem HID USB. Nowa forma płytki pozwala na montaż SMT bez wykorzystania złączy szpilkowych goldpin. Zobaczymy czy środowisko Arduino rozwinie się tak aby zapewnić kompatybilność NANO Every z poprzednim modelem nano, czy też muszą powstać nowe wersje bibliotek i nie przeniesiemy kodu z nano na NANO Every.
Co myślicie o Arduino NANO Every?

Do rozpoczęcia pracy z NANO Every uruchamiamy menadżer płytek:
Narzędzia->Płytka->Menadżer Płytek
Wyszukujemy "every" i wybieramy pakiet: Arduino megaAVR Boards by Arduino.
W szkicu wybieramy płytkę Arduino NANO Every, oraz port COM (emulowany na USB), który pojawił się po podłączeniu płytki:
Znajdziemy także opcję emulacji rejestrów ATmega328P, czyżby była to zapowiedź możliwych problemów z kompatybilnością?
Na początek prosty test komunikacji z płytką i testowe miganie LED - test wypadł pomyślnie:
Kod: C / C++
Wstępne próby pokazały problemy z uruchomieniem bibliotek typu TimerOne, MsTimer2, czy też próby ręcznej modyfikacji rejestrów timerów T0, T1, T2 znanych z wersji Arduino nano np. rejestru OCR1A itp. Osobiście w Arduino Nano przyzwyczaiłem się do timerów, które pozwalały na deterministyczne wyzwalanie przerwań, pomiar czasu, zliczanie impulsów lub generowanie przebiegów.
Jeżeli porównacie pliki iom328p.h i iom4809.h zlokalizowane w katalogu:
\arduino-1.8.9\hardware\tools\avr\avr\include\avr
to okaże się, że w ATMega4809 mamy do dyspozycji inny zestaw rejestrów, w tym rejestry RTC:
http://ww1.microchip.com/downloads/en/AppNotes/TB3213-Getting-Started-with-RTC-90003213A.pdf
Wersja NANO Every posiada 5 wyjść PWM ( w poprzedniej wersji nano dostępne było 6 wyjść PWM), różnica wstępuje dla wyjścia D11 - brak PWM w wersji Every.
W wersji NANO Every znajdziemy także więcej ustawień dotyczących napięcia odniesienia dla ADC:
https://www.arduino.cc/reference/en/language/functions/analog-io/analogreference/
Spróbujmy zrobić coś bardziej skomplikowanego, obsługa karty SD i zapis próbek z wejścia analogowego, zobaczymy czy nie wystąpi jakiś problem z kompatybilnością bibliotek. Do cyklicznego zbierania próbek z ADC wykorzystamy przerwania generowane przez RTC. Mamy do dyspozycji więcej pamięci RAM, więc wykorzystamy dwa bufory naprzemiennie wypełniane danymi z ADC, a następnie zapisywane do pliku na karcie SD. Tym sposobem powstanie rejestrator wartości napięcia na wejściu ADC, z zapisem danych do pliku na karcie SD. Napięcie będziemy próbkowali dość wolno, 256 razy na sekundę. Dla testu zostało wybrane jedno z dostępnych napięć odniesienia "INTERNAL4V3" więc możemy rejestrować napięcia z zakresu 0-4.3V, z teoretyczną rozdzielczością 10b.
Płytka pracuje z napięciem 5V, więc potrzebujemy adapter karty SD dopasowujący poziomy napięć i dostarczający zasilanie 3.3V dla karty.
Łączymy wyprowadzenia karty SD z wyprowadzeniami modułu:
CS z D10
DI z MOSI
DO z MISO
SLCK z SCK
Kod: C / C++
Podajemy napięcie zmienne sinusoidalne 10Hz 4.3Vpp na wejście A0, a dane zapisane w pliku na karcie SD możemy zwizualizować np. w programie audio Audacity. Importujemy dane raw (16bit, big-endian, 1 kanał). Po znormalizowaniu widoczna jest sinusoida:
Prosty system rejestracji zmian napięcia działa:
Wbudowane RTC zachęciło mnie do podłączenia ENC28J60 oraz próby zsynchronizowania czasu przez Ethernet z wykorzystaniem NTP, niestety biblioteka UIPEthernet, nie chciała współpracować z płytką NANO Every.
Podsumowując: ciekawy i tani moduł wykorzystujący nowy mikrokontroler, który powstał po połączeniu Atmel i Microchip. Otrzymujemy nowe możliwości, ale także problemy z kompatybilnością z poprzednią wersją nano. Na PCB znajdziemy konwerter USB<->UART, który po zmianie firmware może stać się innym urządzeniem HID USB. Nowa forma płytki pozwala na montaż SMT bez wykorzystania złączy szpilkowych goldpin. Zobaczymy czy środowisko Arduino rozwinie się tak aby zapewnić kompatybilność NANO Every z poprzednim modelem nano, czy też muszą powstać nowe wersje bibliotek i nie przeniesiemy kodu z nano na NANO Every.
Co myślicie o Arduino NANO Every?
