Serwisy partnerskie:
Close icon
Serwisy partnerskie

Ekscytacje Maxa. Migające diody LED i śliniący się inżynierowie (18)

Article Image
Jak zwykle, mam tak wiele rzeczy odbijających się w mojej biednej, starej głowie, że nie wiem, od czego zacząć, z których nie najmniej ważne jest to, że samo wypowiedzenie słowa „głowa” przypomniało mi o Noggin the Nog, który był kultowym klasykiem ze złotej ery brytyjskiej telewizji dla dzieci, kiedy byłem dzieckiem we wczesnych latach sześćdziesiątych.

Z wizytą u Wiktorianów 

Zacznijmy od przypomnienia, że w poprzednim odcinku (EdW 2/2025) przedstawiłem mój nowy projekt hobbystyczny, który polega na odtworzeniu 21-segmentowych wiktoriańskich wyświetlaczy przy użyciu nowoczesnych trójkolorowych diod LED. Szczerze mówiąc, mój kumpel Steve Manley z Wielkiej Brytanii wykonuje większość ciężkich prac związanych z tym projektem – na przykład projektuje płytki drukowane – a ja krzątam się w tle jak obłąkana surykatka, oferując pomocne (niektórzy mogą powiedzieć, że bezużyteczne) sugestie.

Steve rozpoczął od stworzenia jednoznakowego wyświetlacza o szerokości 50 mm i wysokości 64 mm. Siedem segmentów ma tylko jedną trójkolorową diodę LED, podczas gdy pozostałe czternaście segmentów ma po dwie diody LED, co daje w sumie 35 diod LED. Steve stworzył również wydrukowaną w 3D „powłokę” o głębokości 10 mm, która oddziela tablicę LED od dyfuzora.

Steve i ja tworzymy 10-znakowe wyświetlacze, które wykorzystują 10 płytek LED i 10 obudów. Właściwie byłby to idealny moment, aby obejrzeć film opublikowany przez Steve’a na YouTube, który pokazuje to wszystko w fantastycznych szczegółach.

Przejmij kontrolę

Kolejną rzeczą, o której rozmawialiśmy w ostatnim odcinku, jest fakt, że w poprzednich projektach Steve i ja poszliśmy własną drogą w odniesieniu do sprzętu (np. mikrokontrolerów) i oprogramowania (np. bibliotek), co skutkowało niemożnością dzielenia się naszym kodem. Aby rozwiązać ten problem, w przypadku naszych wiktoriańskich wyświetlaczy zdecydowaliśmy się zastosować wspólną platformę, co pozwoliło nam pracować nad kodem w sposób oparty na współpracy.

Pierwszym elementem tej platformy była płytka sterująca. Ponieważ zamierzamy wykorzystać tę płytkę w przyszłych projektach, dodaliśmy wszystko, o czym możemy pomyśleć w sposób uniwersalny. Nasza płytka zawiera zegar czasu rzeczywistego (RTC), kodek audio z wbudowanym mikrofonem, dzięki czemu możemy reagować na dźwięk, fotorezystor (LDR), dzięki czemu możemy reagować na światło otoczenia oraz sterowanie podczerwienią (IR). Może być „zasilany” przez moduł Teensy 3.2 lub Teensy 3.6 z PJRC: https://www.pjrc.com/teensy/techspecs.html.

Biblioteki Lucious

Pamiętaj, że każdy z naszych 21-segmentowych znaków ma 35 trójkolorowych diod LED. Są to elementy WS2812, które w społeczności Adafruit są znane pod nazwą „NeoPixele”. Jedną z dostępnych opcji jest użycie biblioteki Adafruit NeoPixel (https://learn.adafruit.com/adafruit-neopixel-uberguide/arduino-library-installation) do sterowania naszymi diodami LED. Osobiście uwielbiam tę bibliotekę, ale to prawdopodobnie dlatego, że po raz pierwszy użyłem jej bardzo dawno temu.

Problem polega na tym, że mamy 35×10=350 diod LED, z których każda wymaga 24 bitów danych (po 8 bitów dla kanałów czerwonego, zielonego i niebieskiego). Biblioteka Adafruit wykorzystuje częstotliwość taktowania 800 kHz, co oznacza, że przesłanie wszystkich danych zajmuje (350×24)/800 000=0,0105 sekundy (s) lub 10,5 milisekundy (ms). Zaokrąglijmy to do 11 ms.

Należy tutaj zwrócić uwagę na fakt, że podczas gdy biblioteka Adafruit przesyła dane do diod LED, zużywa ona 100% zasobów jednostki centralnej mikrokontrolera (CPU), co oznacza, że procesor nie może w tym czasie robić nic innego.

Jestem przekonany, że będziemy wykonywać ogromną liczbę obliczeń, aby zaimplementować zaplanowane efekty specjalne. Jeśli założymy, że możemy wykonać wszystkie te obliczenia w 9 ms, oznacza to, że całkowity czas cyklu wynosi 11+9=20 ms. To z kolei oznacza, że maksymalna częstotliwość odświeżania naszego wyświetlacza wynosi 1000/20=50 Hz. Szczerze mówiąc, jest to prawdopodobnie więcej niż wystarczające dla tego konkretnego zastosowania, ale – mając wybór – wolelibyśmy zrobić to lepiej.

Ponieważ używamy mikrokontrolera Teensy 3.2 lub 3.6, inną alternatywą jest użycie biblioteki OctoWS2811 firmy PJRC (https://www.pjrc.com/teensy/td_libs_OctoWS2811.html). Ta biblioteka ma ograniczony zestaw wbudowanych funkcji, co oznacza, że musisz samodzielnie wykonywać takie czynności, jak zanikanie z jednego koloru do drugiego (dotyczy to również biblioteki Adafruit). Jednak jej główną zaletą jest to, że wykorzystuje wbudowany w mikrokontroler silnik bezpośredniego dostępu do pamięci (DMA) do jednoczesnego przesyłania ośmiu pasm diod LED. Co więcej, silnik DMA działa w tle, pozostawiając główny procesor wolny do pracy nad kolejnym zestawem obliczeń. Istnieje nawet funkcja busy(), którą można wywołać, aby określić, czy poprzednie przesyłanie zostało zakończone przed rozpoczęciem nowego.

Ale czekaj, to nie wszystko, ponieważ istnieje również biblioteka FastLED (fastled.io), którą preferuje Steve. Oprócz tego, że jest rozwijana dla mikrokontrolerów o niższej wydajności (8-bitowych), biblioteka FastLED oferuje wszelkiego rodzaju smaczne funkcje, w tym obsługę HSV oprócz RGB, gdzie HSV oznacza „odcień, nasycenie i wartość” (inna nazwa „wartości” to „jasność”). Dostępnych jest kilka niesamowitych filmów FastLED, które szczegółowo wyjaśniają to wszystko – wystarczy przejść do YouTube i wyszukać „FastLED Basics”.

Naprawdę fajną rzeczą jest to, że biblioteka FastLED może być używana w połączeniu z biblioteką OctoWS2811. Niestety, nie udało nam się jeszcze ustalić, jak ustawić silnik DMA działający w tle podczas korzystania z tej kombinacji bibliotek; jednak nadal możemy przesyłać wiele ciągów diod LED jednocześnie. Ponieważ nasze wiktoriańskie wyświetlacze mają 10 znaków, traktujemy je jako pięć dwuznakowych par, a ponieważ każda para składa się z 70 diod LED, oznacza to, że nasz czas przesyłania jest teraz skrócony do (70×24)/800 000=2,1 ms, co odpowiednio zwiększa naszą maksymalną możliwą częstotliwość odświeżania.

Aby przeczytać ten artykuł kup e-wydanie
Kup teraz
Firma:
AUTOR
Źródło
Elektronika dla Wszystkich luty 2025
Udostępnij
Zobacz wszystkie quizy
Quiz weekendowy
Generatory wysokiego napięcia
1/10 Dlaczego nie powinno się pracować z generatorami wysokiego napięcia w pobliżu sprzętu pomiarowego?
UK Logo
Elektronika dla Wszystkich
Zapisując się na nasz newsletter możesz otrzymać GRATIS
najnowsze e-wydanie magazynu "Elektronika dla Wszystkich"