• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Sterowanie paskiem led Ws2812B
#2
Niezbyt dobra kombinacja, WS2812, które w przypadku Arduino, obciążają CPU w 100% i dekodowanie pilota IR. Jesteś świadom, że w czasie transmisji do LED dane z pilota nie będą dekodowane?
Na szczęście masz tylko 148 led, gdyby było 1400 i chciałbyś generować efekty, to nie byłoby czasu na obsługę pilota. Weź kalkulator i policz ile trwa transmisja do LED. Tak dobierz czas pomiędzy transmisjami aby animacje były płynne. Czy starczy czasu na dekodowanie sygnału z pilota? Jak biblioteka będzie obsługiwać dekodowanie w przerwaniu od wejścia INT, to na 90% starczy czasu, jak przez przerwanie 10..15kHz i sprawdzanie stanu dowolnego wejścia, pewnie nie. Jak nie wyrobi, to transmisję do WS2812 zrób przez USART, ale UNO ubogi jest w USARTy. Ostatecznie może to być SPI. Usart, SPI w czasie transmisji obciążają CPU w 80..90%. Warto byłoby taktować CPU 20MHz. Swoją droga, co za kretyn, taktuje powolny, bądź co bądź AVR z Fmax20MHz zegarem 16MHz? Może najlepiej dać 1MHz? Pomijając tą bzdurę z zegarem, która wzięła się z tego, ze pierwsze Arduino było na procku o Fmax16MHz, pytanie, czy starczy RAM? W przypadku SPI 148*9=1`332, zostaje niecałe 700bajtów, USART, jak użyjesz do pseudodebugowania pochłonie kolejne 64 bajty. Jak WS obsłużysz przez USART to potrzeba 148*8=1`184. Wygląda na to, że ramu starczy ale wszystko masz na styk, RAM, czas CPU.


Policzyłem na szybko i wychodzi mi, że transmisja do ledów trwa ok 44 razy dłużej niż okres 10kHz (zweryfikuj obliczenia, bo jest późno i mogłem się pomylić). To oznacza, że będzie ona przeszkadzać w dekodowaniu sygnału pilota. Nie wiem jakiego standardu jest pilot, sprawdź ile trwa ramka i ile musi byc odebranych aby uznać transmisję za poprawną (wyczytasz w opisie biblioteki IR). O dekodowaniu w przerwaniu 10kHz możesz zapomnieć. Szukaj biblioteki, która dekoduje sygnał pilota na wejściu INT ale i tak może się okazać, że będziesz musiał naciskać przycisk pilota kilka razy aby poprawnie został zdekodowany.

To co chcesz zrobić może się udać bo zrobiłem coś podobnego ale na Mega1284 20MHz i i z wstawkami asseblerowymi no i nie było 148 diod.
Użyj Xmega i DMA albo ARM, tam problemów nie będzie. Ostatecznie (głupota, bo niepotrzebna komplikacja i koszty) dekodowanie IR zrób na jednym Arduino, ledy na drugim a komunikację pomiędzy nimi interfejsem synchronicznym gdzie masterem jest Arduino sterujące LED-ami.
 
Odpowiedź
  


Wiadomości w tym wątku
Sterowanie paskiem led Ws2812B - przez karolejno - 07-07-2018, 21:13
RE: Sterowanie paskiem led Ws2812B - przez es2 - 08-07-2018, 01:03
RE: Sterowanie paskiem led Ws2812B - przez kaczakat - 09-07-2018, 08:10

Skocz do:


Przeglądający: 1 gości