16-12-2019, 22:35
Obsługa seriala działa bardzo dobrze, testowałem 9600. CPU jest faktycznie zajęty, ale i tak nic innego nie ma do roboty, więc to żadna wada.
Ocena wątku:
Arduino + ledy ws2812b
|
(16-12-2019, 22:35)elvis napisał(a): Obsługa seriala działa bardzo dobrze, testowałem 9600. CPU jest faktycznie zajęty, ale i tak nic innego nie ma do roboty, więc to żadna wada.Może zadziałać i 921600 jak się uda "wstrzelić". Gdy dane wysyłane są do LED przez AVR, który "macha pinem" to muszą być zablokowane przerwania. Jak masz szczęście to akurat podczas transmisji nie do LED nie ma transmisji po UART. Spróbuj jednak wysyłać dane po UART bez przerwy z prędkością 9600 ni na 100% będziesz miał gubienie znaków. matematyki nie da się oszukać. 500 LED to transmisja trwająca 1/(800e3/24/500) = 15ms. nie chce być inaczej. transmisja 1 znaku przy 9600 8N1 to 1/(9600/10) = ok 1ms. Matematyka nie kłamie. W 15ms może zostać przesłane 15 znaków, zgadza się? FIFO w AVR ma 2 znaki, więc 13 zgubisz. Tak czy nie?
(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!
SEI - 1 cykl
PUSH r0 - 2 cykle
MOV r0,PSW - 1 cykl
PUSH r1 - 2 cykle
EOR r1,r1 - 1 cykjl
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
(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.