Sterowanie diod WS2812 poprzez DMX

Sterowanie diod WS2812 poprzez DMX
Pobierz PDF Download icon

Sterowanie diodami WS2812 za pośrednictwem DMX nie jest pomysłem wyjątkowym, jednak zrealizowanie tego zadania z użyciem interfejsu UART i systemu przerwań na bazie mikrokontrolera AVR nie jest zadaniem łatwym. Natomiast praca w w tym samym czasie jako urządzenie DMX oraz odbiór sygnału z USB z prędkością 1Mb/s wydaje się niemożliwe. Opracowanie takiego systemu wymagało zastosowania nieszablonowych rozwiązań.

Spis treści

Test obciążenia CPU

Na rysunku 11 zostały pokazane pomiary czasów realizacji funkcji w trakcie działania pętli main. Przebiegi obrazują następujące funkcje:

  • żółty – linia danych WS2812,
  • błękitny – przerwanie TX UART obsługujące SPI,
  • fioletowy – linia UART DMX512 (bajt $FF),
  • niebieski – pętla main.
Rysunek 11. Pomiary czasów realizacji funkcji w trakcie działania pętli main

Widać tam bardzo silne obciążenie CPU (dochodzą jeszcze przerwania od timera0, ADC, których nie pokazano na oscylogramie), w pętli głównej wykonuje się po 12 czasem tylko 2 rozkazy pomiędzy przerwaniami. Wydaje się, że taki program nie ma prawa działać ale program główny „nadrabia” w dwu przypadkach:

  • pomiędzy transmisjami do LED występuje przerwa 50 ms,
  • sygnał DMX ma stosunkowo długą przerwę po wysłaniu ramki DMX.

Niestety w praktyce okazało się, że taki mechanizm czasami powoduje gubienie danych DMX. Problemu nie byłoby, gdyby UART mikrokontrolera miał np. 16 a nie 2 bajty FIFO. Na szczęście przewidziałem miejsce na zewnętrzny UART. Oczywiście możliwa jest próba dopracowania procedur obsługi DMX przez UART mikrokontrolera ponieważ linia DMX jest do niego doprowadzona. W kodzie źródłowym znajdują się linie #define DMX_IN i #define DMX_OUT umożliwiające wyłączenie zewnętrznego UART.

USB

Konwersję komunikacji USB zapewnia układ FT221. Jego zaletą jest szybka komunikacja po SPI oraz dostęp do pamięci konfiguracji. Możliwości układów były już opisywane na łamach EP (pierwszy odcinek kursu w EP 7/2017). Układ FT221 nie wymaga konwersji poziomów na liniach. Rezystory o wartości 0 Ω zastosowano w innym celu. Przy komunikacji z FT221 przez programowe SPI montujemy tylko rezystor 0 Ω pomiędzy pinami 8 i 9 drabinki RP1. Jeśli zaszłaby potrzeba komunikacji równoległej, należy zamontować wszystkie rezystory, a podczas komunikacji z układem odłączać klucze 4053 odczytujące stan joystick-ów (sygnał SEL), co z kolei spowoduje konieczność modyfikacji odczytu stanów joystick-ów i prawdopodobnie przeniesienie tej funkcjonalności z przerwań do pętli głównej.

Z układem można komunikować się, także przez sprzętowe SPI. W tym celu używa się bramki trój-stanowej realizującej funkcję bramki OC (U7C). Poza modyfikacją programu należy zamontować zworę JP3. Trzeba pamiętać, że SPI jest używane do komunikacji z kontrolerem UART, który może wykorzystywać mechanizm przerwań. Trzeba o tym pamiętać i zastosować mechanizm semaforów. Z tego właśnie powodu zdecydowano się na programowe SPI.

Dane DMX przychodzące przez RS485/422 mają większy priorytet niż DMX przez USB. Jeśli więc dane będą przychodzić po RS, informacja po USB będzie ignorowana.

Joystick-i

Aby zademonstrować możliwości diod, płytkę wyposażono w dwa joystick-i analogowe z przyciskiem. Można je odłączyć ustawiając linie SEL w stanie wysokim co zdezaktywuje klucze 4053. Jeśli opcja sterowania kluczami nie jest potrzebna, można zewrzeć piny 3-4 JP4, a port PD4 wykorzystać w innym celu. Przy braku transmisji DMX uruchamia się jedna z wybranych gier. Opcje tę można wyłączyć konfigurując urządzenie przez USB.

Praca jako konwerter USB-DMX

Urządzenie może pracować jako konwerter USB-DMX. Zdekodowany sygnał, poza sterowaniem diodami WS2812, dostępny jest na złączu J9. Niestety FT221 nie potrafi wykryć sygnału BREAK synchronizującego początek ramki DMX. Z tego powodu realizowane jest to programowo na zasadzie wykrycia długiego sygnału MARK. W konsekwencji, praca w tym trybie nie jest gwarantowana z każdym programem. Prototyp bez większych problemów działał z DMX512 Light Control ale współpraca z USB2DMX512DEMO napisanego w Delphi była niemożliwa. Dane na wyjście DMX są transmitowane zarówno w trybie konwerter DMX (odbiór danych z USB) jak i gdy są odbierane z RS485/422.

Artykuł ukazał się w
Elektronika Praktyczna
kwiecień 2021
DO POBRANIA
Pobierz PDF Download icon
Materiały dodatkowe
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik grudzień 2024

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio listopad - grudzień 2024

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka, Podzespoły, Aplikacje listopad - grudzień 2024

Automatyka, Podzespoły, Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna grudzień 2024

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich styczeń 2025

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów