• 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
WS2812B + enkoder do sterowania jasnością diód
#10
Ścianą,to jest WS2812 i AVRmega/tiny.

Wszystkie biblioteki jakie widziałem dla Arduino, doWS2812, są blokujące i nadają się tylko do zabawy z niewielką ilością LED albo gdy poza sterowaniem LED-am, nie jest robione praktycznie nic.

Da się to zrobić na UART, wywołując przerwania blisko 300tysięcy razy na sekundę a stosując pewną sztuczkę połowę tego ale 16MHz to za mało. Wymagane min to 18MHz a wskazane 20.Nawet przy 20MHz z wstawkami ASM obciążenie jest bardzo duże i pojawi się kolejna ściana, jak dobrze zrealizować przerwania od innych USART jeśli są potrzebne.
Da się ale jest przy tym dużo roboty:
https://youtu.be/h2RKAJZdVl4
https://youtu.be/aM9hy4EpleY
https://youtu.be/hBovo7Y0fRY
Jak widać, można dekodować DMX, nie tracąc przy tym ramek, sterować nawet 1500led i w tym samym czasie nadawać DMX. Niestety, łatwo nie jest i nie polecam tego robić, bo wstawki ASM, dobra znajomość C, to raczej nie dla początkującego. Lepiej wziąć coś z DMA (XMEGA, ARM) i jest łatwo i przyjemnie.

Nie wspominam o użyciu SPI, bo jest zdecydowanie gorsze od USART i to z kilku powodów, natomiast I2C,w AVR, nie nadaje się do WS2812.

Tak jak nieporozumieniem jest obsługa na AVR LCD 320x240 kolor 16-bit lub większych bez akceleratora (np FT8xx), czy Fat na uC z 2kB RAM, tak i WS2812 na AVR.
Arduino IDE, z tego co czytam w EP 10 i11/2018, wspiera już ARM w sensowny sposób. Należałoby, do poważniejszych zadań, używać ARM, które przeważnie, w lepszych od AVR konfiguracjach, są tańsze od AVR. Co do szybkości, ARM, przy tym samym zegarze co AVR, jest ok 7 razy szybszy. Max zegar AVR,to 20MHz, ARM, zależnie od rodziny, 48, 72, 80, 100MHz (pomija bardziej wypasione 200 czy 600MHz a nawet więcej). Najwolniejszy więc,48MHz ARM, jest szybszy, od najszybszego AVR ok 17 razy, 100MHz ARM ok 35 razy,do tego, niektóre serie, mają FPU. Fakt, ze "zdolni" Arduinowcy, zabiją każda szybkość, przez delay, czy
Kod:
while( przycisk ):
Najwolniejszy ARM, używając DMA, obciąża CPU ok 2% podczas sterowania WS2812, w AVR, używając USART i przerwań, przy 20MHz, obciążenie ok 90%. Niewielka różnica ?
 
Odpowiedź
  


Wiadomości w tym wątku
RE: WS2812B + enkoder do sterowania jasnością diód - przez es2 - 17-11-2018, 01:34

Skocz do:


Przeglądający: 1 gości