[150] Arduino Q cz. 4

Jakoś przypadkiem znalazłem w sieci dyskusję: co w nowym Arduino jest cenniejsze: komputer czy mikrokontroler? Wydawałoby się oczywiste: komputer jest potężny, ma gigaherce i gigabajty, a kontroler to tylko kontroler. No i nie do końca, bo gdy przyjrzymy się mu z bliska, okazuje się, że to rzecz interesująca i cenna, nawet jeśli zapomnimy o całym tym Linuxie i App Labie. Dlatego postanowiłem go wziąć pod lupę i wskazać różnice względem tego co znamy, a także poszukać nowości.


Przypomnę, że jest to kostka firmy STM o symbolu STM32U585 w wersji maksymalnej, czyli ze 169 wyprowadzeniami. Na temat tego co tam wewnątrz siedzi, znajdziemy bardzo długą listę. Dużo tu wszystkiego, co jest charakterystyczne dla współczesnych, zaawansowanych kontrolerów. Mamy więc bloki związane z kryptografią, rozbudowane systemy oszczędzania energii startujące już od 160 nA, 17 timerów, 22 magistrale komunikacyjne, matematyczny koprocesor, a nawet akcelerator graficzny i interfejs kamery. I wiele innych dóbr, więc postanowiłem spojrzeć na rzecz z perspektywy arduinowicza, skupiając się na tym, co już znamy, a co się zmieniło albo ulepszyło.

Pomogą nam w tym klasyczne ściągi tworzone przez organizację Arduino, które od lat towarzyszą kolejnym płytkom. Jak widać, podstawy wciąż są takie same. Mamy więc rządek pinów cyfrowych, adresowanych jak zwykle, z alternatywnymi funkcjami. Po drugiej stronie siedzi mniejszy rządek – analogowy z opcją cyfrową, czyli po staremu. Jak już pisałem ostatnio – z jedną różnicą: to jest logika trzywoltowa. Ale na szczęście akceptuje poziomy pięciowoltowe, więc w praktyce dla pracy cyfrowej nic się nie zmieniło. Dla analogowej jednak już tak dobrze nie jest: wejścia mogą mierzyć napięcia nie wyższe od napięcia zasilającego, czyli 3,3 wolta. Przedział do pięciu woltów da przepełnienie, ale nie popsuje portów z wyjątkiem A0 i A1 – tym nie wolno podawać napięcia wyższego od 3,3 wolta i już.

Porty cyfrowe pracują jak to było w czasach ośmiobitowego Arduino. Nowością jednak są dwa nowe adresy, które dawniej były dublowane z dwoma ostatnimi pinami z grupy analogowej: można się do nich dostać za pomocą adresów 20 i 21. Przy czym na razie jest z tym problem: są one dublowane z adresami odpowiednio 18 i 19, tak jak gdyby były ze sobą zwarte parami – jak było w starym Uno. Mimo porad znalezionych w sieci, na razie nie udało mi się rozdzielić adresowania. Tak więc góra płytki, przynajmniej teoretycznie daje dostęp do 22 portów, z czego sześć może być portami wejść analogowych, a na sześć innych – jak dawniej – może wysyłać przebieg PWM, ale… o tym za chwilę. Pozostańmy jeszcze przy funkcji czysto cyfrowej. Skoro kontroler ma prawie 170 wyprowadzeń, ograniczenie do 22 portów byłyby marnotrawstwem.

Na szczęście po drugiej stronie płytki znajdziemy dwa nowe gniazda o dwukrotnie gęściejszym rastrze – niestety – ale dzięki temu zmieściło się tam dużo sygnałów. Prawe gniazdo na razie nie będzie nas interesować, bo jest związane z procesorem. Lewe natomiast dzieli się z nim i kontrolerem. Wystawiono tutaj kolejne 25 portów, które mogą być adresowane… No właśnie, znowu mamy bałagan wieku niemowlęcego. Nigdzie nie ma informacji o adresach! Zbudowałem więc prostą sondę z diody świecącej i kiloomowego rezystora, do których przylutowałem cienkie wyprowadzenia, wchodzące w te cieniutkie gniazda. Metodą prób i błędów ustaliłem, że zastosowano tu logiczny porządek: pin z numerem jeden ma adres 25 i tak dalej, aż do pinu dwudziestego piątego, który adresujemy liczbą 49. Jeśli zdobędziemy gdzieś wtyk pasujący tutaj, zyskamy kolejne 25 cyfrowych portów.

Tak więc zasoby ilościowo odpowiadają połowie drogi między Uno, a Mega, które – przypomnę – ma 70 pinów do zagospodarowania. Czas na słówko o jakości. O ile funkcje cyfrowe są proste i niewiele się tu doda, z analogowymi jest dużo ciekawiej. Zacznijmy do PWM i klasycznego przebiegu pięćdziesięcioprocentowego.

const byte pwmPort = 3;  // Adres portu PWM
byte pwmValue = 128;     // Wartość wysyłana na port PWM
void setup() {
  analogWrite(pwmPort, pwmValue);  // Prześlij wartość deklarowaną na port PWM
}
void loop() {
}

Podłączę się na pin trzeci, wrzucę domyślne parametry i uruchomię mój programowy oscyloskop, o którym kiedyś już pisałem. Jak widać, wszystko jest zgodne z oczekiwaniami.

Zmieńmy wartość pwmValue na 1, co da najmniejsze możliwe wypełnienie. To jednak nie wszystko. O ile stare Arduino umożliwiało pod pewnymi warunkami generację szesnastobitowego przebiegu przy częstotliwości ledwo sięgającej kiloherca, w przypadku Q mamy możliwość wybrania rozdzielczości w szerokich granicach i przy częstotliwościach daleko wychodzących ponad akustykę. Spróbujmy więc zmodyfikować szkic.

const byte pwmPort = 3;  // Adres portu PWM
int pwmValue = 1;        // Wartość wysyłana na port PWM
void setup() {
  analogWriteResolution(14);       // Deklaracja głębokości bitowej PWM
  analogWrite(pwmPort, pwmValue);  // Prześlij wartość deklarowaną na port PWM
}
void loop() {
}

Nowym poleceniem analogWriteResolution() zwiększymy rozdzielczość do 14 bitów. Żeby zobaczyć impuls o szerokości jednej szesnastotysięcznej okresu, musiałem wzmocnić poziom stukrotnie, do tego stopnia, że szumy własne przetwornika karty audio uwydatniły się na przebiegu.

To otwiera zupełnie nowe możliwości, przede wszystkim w dziedzinie akustyki. Szesnastobitowe PWM z nadpróbkowaniem to już czyste HiFi, jeśli tylko zadbamy o dobre filtrowanie sygnału. Nie będzie z tym problemu, bo częstotliwość pracy możemy wysłać w dalekie ultradźwięki. Tak na marginesie, przy ośmiu bitach częstotliwości te mogą sięgać kilkudziesięciu megaherców, co daje potencjał zastosowań w dziedzinie radiowej. Tylko że na razie mamy jeden problem, a właściwie całą ich grupę. Mamy – jak pisałem – wiek niemowlęcy całego ekosystemu, a zerowe numery przy bibliotekach świadczą o tym najlepiej. I tak: jedenasty pin nie potrafi w ogóle wykrzesać z siebie przebiegu, a pozostałe pracują na razie poprawnie przy dziesięciobitowej rozdzielczości. Czternastobitowy eksperyment zadziała tylko w początkowej 1/16 zakresu. Cóż, tym którzy chcieliby skorzystać z nowych możliwości pozostaje czekać. Łatki schodzą każdego dnia, więc tempo napraw jest spore. W kolejnym artykule przyjrzymy się wejściom analogowym i nie tylko.

Płytka edukacyjna TME-EDU-ARD-2Płytka edukacyjna TME-EDU-ARD-2

Inne artykuły z tej kategorii

Nasi partnerzy

TMETech Master EventTME EducationPoweredby
Copyright © 2026 arduino.pl