• 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
Arduino + ledy ws2812b
#56
(17-12-2019, 11:28)elvis napisał(a): A wreszcie po trzecie... chyba da się sterować ledami i nie wyłączać przerwań. Napisałem chyba, bo muszę to więcej potestować.
Widzę, ze niewiele wiesz o WS281x i nie zaglądałeś do danych katalogowych. Dziwi więc dlaczego zabierasz głos? Cięzko było przeczytać 3 strony noty katalogowej? Nie pisałbyś wtedy głupot!

Da się jak użyjesz UART lub SPI, gdy "machasz" pinem na AVR MUSISZ wyłaczyc przerwania. Powód jest banalny, impulsy dla WS2812 mają czasy ok 400 i 800us ns. Przesłanie bajtu ok 1200us bitu ok 1.2us. Sygnał RESET (powinien nazywać się raczej LATCH) 50us. 
Poza danymi z katalogu mogę dodać, że:
- Ledy zatrzaskują dane w 15..25us a 50 jest gwarantowane.
- Czas trwania "H" jest krytyczny, "L", można przeciągnąć bezpiecznie do 10us.

Mając garść informacji widać, że krytyczny jest stan "H", który nie może przekraczać ok 400ns +/- 15% jak pamiętam.
Napisz ob sługę przerwania na AVR, która wykona się w max 460ns! Cykl zegarowy AVR popędzanego 20MHz to 50ns. Masz do dyspozycji max 10 rozkazów min 5. Stan GPIO zmienisz ale jak zrobisz wstawkię ASM bo nam prolog przerwania (piszę z pamięci)
Kod:
SEI - 1 cykl
PUSH r0 - 2 cykle
MOV r0,PSW - 1 cykl
PUSH r1 - 2 cykle
EOR r1,r1 - 1 cykjl
to 7 cykli, epilog
Kod:
POP r1 - 1 cykl
POP r0 - 1 cykl
MOV PWS,r0 - 1 cykl
POP r0 - 1 cykl
RETI - nie pamiętam, nich będzie 1 cykl
kolejne 5 cykli, razem 12 cykli co daje 600ns. A gdzie reszta przerwania? przykładowo odczyt danej z UART i zapis do FIFO? Przerwania w AVR, zależnie od stopnia skomplikowania, trwają 2..20us.

Nawet jak obsłużysz WS281x na przerwaniach od UART czy SPI możesz napotkać problemy w postaci przerwań odbiorczych UART lub od linii INT wyzwalanych poziomem niskim. AVRmega/tiny nie ma (poza najnowszymi) wielopoziomowego sytemu przerwań. Nie można użyć nieblokującego (INTERRUPT czy ISR_NOBLOCK) przerwania od UART czy INT dla poziomu. W przypadku UART dopóki nie odczytasz danej, nie możesz odblokować przerwań. Dlatego przerwania odbiorce UART są ISR_BLOCK. Jest na to obejście ale wymaga wstawki ASM. W Elektronice dla Wszystkich będzie artykuł na ten temat.


(17-12-2019, 11:28)elvis napisał(a): Po drugie, gdyby ktoś chciał mieć obsługę seriala to wystarczy chwilę pomyśleć i zmienić sposób komunikacji. Skoro 2 bajty mogą być przechowywane w buforze sprzętowym, to równie dobrze można z PC wysłać jeden, a później zrobić przerwę w nadawaniu,
Nie rozśmieszaj mnie. Zmuś jakiegoś slave nadającego w MODBUS do przerwy. przypomnę, że pomiędzy bajtami w MODBUS nie może być przerwy dłuższej niż 3,5 znaku. Dla 115200 8N1 to czas ok 303us. W takim czasie wyślesz dane do 5 led, dla 92600, która często używam do ani jednej, dopiero, dla żółwia 9600 jest lepiej bo przez ponad 3,6ms można nakarmić ok 70 led.
Rozwiązanie, które zaproponowałeś to amatorka aż się patrzy. przy nadawaniu nie można skorzystać z DMA. Gdyby taką propozycję dał jakiś arduinowiec to bym zrozumiał ale taki ekspert jak Ty? Wstyd!
Temat zamknięty, więc pewnie pan Semi nie będzie mógł poprawić nawet jak już ochłonie, a szkoda by ktoś patrzył na takie dane.   Kaczakat
 
  


Wiadomości w tym wątku
Arduino + ledy ws2812b - przez busyboy - 20-10-2019, 12:29
RE: Arduino + ledy ws2812b - przez semi - 20-10-2019, 13:59
RE: Arduino + ledy ws2812b - przez busyboy - 20-10-2019, 15:22
RE: Arduino + ledy ws2812b - przez semi - 20-10-2019, 17:20
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 01:58
RE: Arduino + ledy ws2812b - przez semi - 08-12-2019, 10:25
RE: Arduino + ledy ws2812b - przez elvis - 08-12-2019, 11:11
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 13:27
Arduino + ledy ws2812b - przez elvis - 08-12-2019, 13:58
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 14:03
RE: Arduino + ledy ws2812b - przez semi - 08-12-2019, 14:51
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 14:56
RE: Arduino + ledy ws2812b - przez elvis - 08-12-2019, 15:18
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 15:39
RE: Arduino + ledy ws2812b - przez elvis - 08-12-2019, 16:09
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 16:14
RE: Arduino + ledy ws2812b - przez elvis - 08-12-2019, 16:17
RE: Arduino + ledy ws2812b - przez elvis - 08-12-2019, 16:24
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 16:35
RE: Arduino + ledy ws2812b - przez elvis - 08-12-2019, 16:40
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 16:41
RE: Arduino + ledy ws2812b - przez elvis - 08-12-2019, 16:46
RE: Arduino + ledy ws2812b - przez elvis - 08-12-2019, 16:50
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 16:54
RE: Arduino + ledy ws2812b - przez elvis - 08-12-2019, 17:02
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 17:05
RE: Arduino + ledy ws2812b - przez elvis - 08-12-2019, 17:19
RE: Arduino + ledy ws2812b - przez semi - 08-12-2019, 17:49
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 17:24
RE: Arduino + ledy ws2812b - przez elvis - 08-12-2019, 17:30
RE: Arduino + ledy ws2812b - przez semi - 08-12-2019, 18:03
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 17:35
RE: Arduino + ledy ws2812b - przez elvis - 08-12-2019, 17:52
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 17:52
RE: Arduino + ledy ws2812b - przez semi - 08-12-2019, 18:17
RE: Arduino + ledy ws2812b - przez elvis - 08-12-2019, 18:14
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 18:17
RE: Arduino + ledy ws2812b - przez elvis - 08-12-2019, 18:26
RE: Arduino + ledy ws2812b - przez elvis - 08-12-2019, 18:23
RE: Arduino + ledy ws2812b - przez semi - 08-12-2019, 18:36
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 18:27
RE: Arduino + ledy ws2812b - przez semi - 08-12-2019, 18:48
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 18:32
RE: Arduino + ledy ws2812b - przez semi - 08-12-2019, 18:41
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 18:48
RE: Arduino + ledy ws2812b - przez semi - 08-12-2019, 18:57
RE: Arduino + ledy ws2812b - przez busyboy - 08-12-2019, 19:02
RE: Arduino + ledy ws2812b - przez elvis - 08-12-2019, 19:46
RE: Arduino + ledy ws2812b - przez elvis - 16-12-2019, 21:55
RE: Arduino + ledy ws2812b - przez semi - 16-12-2019, 22:33
RE: Arduino + ledy ws2812b - przez elvis - 16-12-2019, 22:35
RE: Arduino + ledy ws2812b - przez semi - 17-12-2019, 00:19
RE: Arduino + ledy ws2812b - przez elvis - 16-12-2019, 23:05
RE: Arduino + ledy ws2812b - przez elvis - 17-12-2019, 11:28
RE: Arduino + ledy ws2812b - przez semi - 17-12-2019, 12:17
RE: Arduino + ledy ws2812b - przez elvis - 17-12-2019, 11:44
RE: Arduino + ledy ws2812b - przez elvis - 17-12-2019, 19:18
RE: Arduino + ledy ws2812b - przez Robson Kerman - 18-12-2019, 00:02

Skocz do:


Przeglądający: 1 gości