-
-
Notifications
You must be signed in to change notification settings - Fork 268
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
Esp32: Support I2s 24 parrallel mode #270
Comments
This would be great 👍 But I'm somewhat concerned about the performance hit this will most probably take, as the update routine is a lot heavier than what is required by all the other methods 😐 And I'm not sure I understand the reasons behind your list of limitations 😯 Same pixel count? Same pixel data width? At this point, the only plausible limitation, to me, seems to be the overall update rate (or frame rate) - which would need to be the same across all channels. But with a little effort, I'm sure that even that could be solved (although not very sure whether it would be worth it).. |
in theory it will be possible with the same code to drive RGBW and RGB over the 24 pins |
(currently still capturing needs and requirements, don't let my original comments stop you from providing good feedback). |
I'm starting to think about how to implement this. The main challenge I see is allowing each bus to be used independently, though all busses are shifted out in parallel (calling Another challenge is initializing the I2S peripheral appropriately for the number of parallel strips and the length of the strips. If treating each bus as independent as possible, calling Thoughts @Makuna? |
Hello in the fastLED library I have implemented the 24 way i2s parallel bus for esp32. Let me know what you think |
@hpwit Thanks for the links Yves! I knew you wrote the FastLED driver but didn't know you had separate repositories with lots of documentation too. What is the license on your code? I'm assuming MIT license as you contributed to the MIT License FastLED project, but it would be helpful if you added a license file to your repositories to be sure. |
@embedded-creations This issue with using a single bus (and thus removing the confusing dirty and show issues) is that they would then use a single type of LED feature. This sort of feature was tracked by #160. Espresif has documented but not supplied/exposed a lag fix for all 8 channels of RMT. It would require a single "Show" solution from my library; so I have been thinking about how to fix this internally. And my current design is not a monolithic bus, but a new method series for ESP32 would be exposed that share a static (think global) dirty state and a single show will trigger all (first declared bus or any show triggers is still a design consideration). @hpwit So in reality we have two implementations.
ESP32 I2s Parallel output:
Shift Register Output:
|
It doesn't, I use I2S parallel output in both 8bit and 16bit mode in SmartMatrix Library.
I've looked at Yves' implementation before, clock is the I2S Clock output, not a data output. Latch is a data output, that's why the total output is only 8x15=120 strips (not 8x16) with 16-bit I2S. |
Working Branch: https://github.com/Makuna/NeoPixelBus/tree/Esp32I2sX |
Nice let me know how it goes. |
https://github.com/Makuna/NeoPixelBus/tree/Esp32I2sX |
Merged in. If someone every really needs x24 then create a new issue and I will look into it. Is there even 24 pins available? |
Hello |
Is your feature request related to a problem? Please describe.
Esp32 i2s supports a 24bit parrellel mode; where each bit of 3 byte packet is sent to different pins. This could be exploited to support 24 parrallel NeoPixel busses.
Describe the solution you'd like
FastLED has support for this.
Code is here
Discussion is here
Additional context
Currently using this method will require each bus to be same count and pixel data width (RGB or RGBW).
FastLED requires this to be the same color element order but this is a minor limitation in their implementation.
An example of i2s being used in 8 bit mode?
Focus has been on 8bit mode since it is a good balance of resources (memory/pins) and speed. I stumbled getting this to work due to I2s0 vs I2s1 Parrallel.
The text was updated successfully, but these errors were encountered: