• 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
#1
Rainbow 
Witam

Mam zakupiony 2 metrowy pasek led ws2812b na którym łącznie znajdują się 148 diody. Również mam  arduino uno r3 , pilot na podczerwień oraz zasilacz o przepustowości 5V  i teraz mam pytanie jak podłączyć to wszytko aby móc sterować tym paskiem za pomocą pilota ? Bo chciałbym sobie na każdy przycisk zaprogramować różne efekty np. przejścia pojedynczych diod ,  rainbow i tmp. Prosiłbym o jakiś wzór na którym jest pokazane jak to połączyć i jakie rezystory , kondensatory kupić a zresztą sobie poradzę .   
Smile

Z góry dziękuje za odpowiedź 
Pozdrawiam
 
Odpowiedź
#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ź
#3
Może nie podłączy 148LED ws2812b, ale na razie ma problem z pierwszą. Google się zepsuło?  Te diody masz opisane tutaj: http://www.jarzebski.pl/arduino/komponen...s2812.html ,a jak niewiele zrozumiesz to najpierw pobaw się tu: https://forbot.pl/blog/kurs-arduino-pods...rsu-id5290 . Jest tam też kurs elektroniki i lutowania. Powodzenia.
No a jak sie pomyliłem i oczekujesz indywidualnego tutoriala do czegoś co już zostało opisane pierdylion razy to przepraszam, jutro zacznę opracowywać.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości