Prędkość transmisji Arduino

0 głosów
84 wizyt
pytanie zadane 3 stycznia 2017 przez użytkownika czesiu (2)
Cześć,

chcę zrobić kontroler diód WS2812B na Arduino/AVR (obojętnie jakie z 16 Mhz zegarem) gdzie animacja będzie przesyłana kablem po RS485 (SN75176) z Raspberry Pi (konwerter USB na RS485). Dzięki takiej konfiguracji będę mógł dodawać nowe animacje na RPi bez wgrywania nowego firmware do Arduino.

Z dokumentacji RS485 dowiedziałem się, że komunikacja może się odbywać z prędkością do 100 Kbit/s przy długości przewodów do 1200 m (u mnie będzie to jakieś 15 m).

Prędkość transmisji jakiej potrzebuje to około:
30 diód * 5 metrów * 3 bajty * 30 odświeżeń na sekundę = 13 500 bajtów / s

Testowałem takie połączenie i największa prędkość jaką udawało mi się uzyskać to 74880 baud. Większe prędkości przesyłały tylko śmieci.

W związku z tym mam pytania:
Jaka jest maksymalna prędkość transmisji możliwa do osiągnięcia po RS485/Ethernet/Inne dla Arduino?
Jakie układy byłyby lepsze do tego zastosowania? (sterowanie diodami + szybka transmisja)

1 odpowiedź

0 głosów
odpowiedź 3 stycznia 2017 przez użytkownika Flawel (206)
Witam, polecam zrobić to tak

Malina[Wi-Fi] --------dane po wi-fi bez kabla----------> ESP8266 ----- (rs232) -----------> Arduino

Arduino jako sterownik, a animacje polecam przesyłać po wi-fi. Prędkość spokojnie ci wystarczy, gdy animacje będziesz wgrywał np max co 1s. Czyli z Maliny wysyłasz animację po wi-fi, a np moduł ESP8266 z specjalnym softem, będzie odbierał tą animację, i ją przetwarzał na protokół RS232 które arduino bez problemu obsłuży. A animację odebraną z rs232 polecam zapisywać w arduino tylko do pamięci FRAM, ponieważ gdy będziesz zapisywał do eepromu/flasha to ci szybko arduino padnie. A przy okazji zamiast Maliny możesz wykorzystać telefon/tablet/pc. Wi-Fi daje sporo możliwości. Co do rs485 nie polecam ze względu na przewody które są stosunkowo długie (15 m). A animację wysyłasz raz co jakiś czas a arduino w pętli ją odtwarza w nieskończoność :) czyli do wgrania nowej animacji. Co do protokołu wysyłania tej animacji to wystarczy zwykły UDP który w prosty sposób obsłużysz.

Co o tym myślisz ?
komentarz 3 stycznia 2017 przez użytkownika Flawel (206)
W razie co mogę pomóc w pisaniu oprogramowania do obsługi wi-fi na ESP8266 czy na telefon, pc apk, pc www, bo na Maline nie zabardzo się znam ale może będę wiedział to pomogę :)
komentarz 3 stycznia 2017 przez użytkownika czesiu (2)
Jako animację miałem na myśli wysyłany ciąg bajtów po 3 dla każdej diody (np. dla listwy 150 diód będzie to 450 bajtów) i tak X razy w ciągu sekundy (załóżmy tyle co klatek w filmach - 25). Zadaniem Arduino tutaj jest tylko odebranie niego i przesłanie do listwy LED w celu wyświetlenia.

Więc animacja nie jest nigdzie zapisywana, tylko tworzy się na podstawie wiadomości wysyłanych z RPi kilka razy w ciągu sekundy.

Dzięki temu podejściu rodzaj animacji nie jest ograniczony np. mogę tworzyć animacje do dźwięku który jest odtwarzany z maliny.

A co do ESP8266 to testowałem podobną komunikację i prędkość jest za słaba do tak częstych aktualizacji.
komentarz 4 stycznia 2017 przez użytkownika Flawel (206)
To lepiej sygnały wysyłaj bezpośrednio z Maliny. Ona sobie bez problemu poradzi, z obsługą diod na WS2812B, a przy taśmie możesz dać prosty wzmacniacz operacyjny. Dzięki temu pozbędziesz się problemów, z  prędkością transmisji, bo na takim odcinku przy przewodach gdybyś na przykład użył skrętki UDP i wykorzystał 4 przewody do danych a 4 do masy, to spokojne bez zakłóceń to zadziała.  Nie dawaj dzielników napięć, ponieważ wprowadzi to zbędne zakłócenia, są one zbędne z uwagi że diody na WS2812B są zasilane z 5 a i Malina toleruje 5v. Co do wzmacniacza polecam go jednak zastosować. Program na Malinę do obsługi bardzo szybko napiszesz. Niema potrzeby dawać arduino jak sygnał będzie tworzony na bieżąco  a i tak jakiś kabel musisz dać np gdybyś skorzystał z RS485.

Co o tym myślisz ?
komentarz 7 stycznia 2017 przez użytkownika czesiu (2)
edycja 7 stycznia 2017 przez użytkownika czesiu
Jakiś konkretny model wzmacniacza masz na myśli?

W międzyczasie udało mi się znaleźć 2 inne rozwiązania, które działają.

Jedno to zoptymalizowana biblioteka Ethernet (https://github.com/PaulStoffregen/Ethernet) gdzie udało mi się osiągnąć 56 fps dla 3 metrowej listwy (150 diód).

Drugie to firmare do ESP8266 (https://github.com/forkineye/ESPixelStick), gdzie autorowi udało się osiągnąć 40 fps dla 680 diód. To będę niedługo testował. Chyba użył on tam zoptymalizowanej biblioteki do komunikacji i dlatego udało mu się osiągnąć takie czasy odświeżania.
...