Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ws2813 timings (PWM, Pi 3 b+) #509

Open
sir-go opened this issue Dec 4, 2022 · 0 comments
Open

ws2813 timings (PWM, Pi 3 b+) #509

sir-go opened this issue Dec 4, 2022 · 0 comments

Comments

@sir-go
Copy link

sir-go commented Dec 4, 2022

Hi, I struggle with my w2813 strip, controlled by PWM (pin 18) on Raspberry Pi 3b+
It has different timings.

http://www.normandled.com/upload/201605/WS2813%20LED%20Datasheet.pdf

0 -> 220-380 ns / 580 - 1600 ns
1 -> 580 - 1600 ns / 220 - 420 ns
reset > 280000 ns

what means the pulse of freq x 3 is too big
1 / (3 * 800 KHz) = 417 ns (> 380 ns)

so, I need symbols 0b1000 and 0b1110, then
1 / (4 * 800 KHz) = 312.5 ns
0b1000 -> 312.5 / 937.5
0b1110 -> 937.5 / 312.5

and reset: 1024 * 312.5 = 320000 ns (> 280000 ns)

Perfect!

But... it doesn't work.
I don't know why.

Help me, please.

I've changed ws2811.c :

...
64: #define LED_BIT_COUNT(leds, freq) ((leds * LED_COLOURS * 8 * 4) + 1024)
...
75: #define SYMBOL_HIGH                              0b1110
76: #define SYMBOL_LOW                               0b1000
...
361: cm_clk->div = CM_CLK_DIV_PASSWD | CM_CLK_DIV_DIVI(osc_freq / (4 * freq));
...
1198: for (l = 3; l >= 0; l--)               // Symbol
...

Anything else I should check?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants