So I have a blade with 529 LEDs in it.
It’s kind of slow.
Making a blade with more LEDs in it becomes difficult, because the WS2811 protocol runs at 800kHz, and once your have more than 500 LEDs in a single string, the frame rate starts to become the bottleneck. Once you have 1000 leds, the maximum frame rate is 800000/24/1000 = 33 fps.
There are a couple of ways to work around this:
- Use multiple data strings. (ProffieOS currently only sends one at a time, but that could potentially be fixed/changed.) But you would also need pogo pins/blade PCBs with more than three rings…
- Use dotstar / SPI output, which can go much faster. Needs data and clock pins though.
- Use some other faster protocol to send the data…
Of course #3 won’t work without something that can receive that data, and that’s where the controller comes in.
What if there was a controller on the back of the blade PCB that could speak multiple protocols, handle blade ID and communicate data back to proffieOS?
There are multiple parts to this, so bear with me…
Part one would be a talk-back protocol for blades.
After sending data to a blade, ProffieOS waits for 300us to make sure that the data is displayed. During this time, a chip in the blade could start talking back to ProffieOS. It could send information about the blade, like how many LEDs there are, how they are arranged and what protocols the blade supports. For instance, it could say something like:
Hello, I am a blade with the following configurations:
- 1x132 LEDS
- 4x132 LEDS
I support the following protocols:
- WS2811+, 800kHz
- WS2811+, 2Mhz
- serial 8N1, 4Mhz
The reason this says WS2811+, is because in order to reply, ProffieOS needs to send a high signal for a period of time that is not normally allowed by the WS2811 protocol. This would tell the chip that a command from ProffieOS is incoming. That command could be something like:
Please switch to configuration 2, protocol 2.
And then we could start sending WS2811 data at 2Mhz.
The controller in the blade would buffer the incoming WS2811 data, and then send it out to the actual pixel strips. The controller would support multiple strings, it’s output would be 800kHz WS2811 x 4 (one per strip).
The benefit of all this would be that the blade would work with any hilt. By default it would just replicate the data to all four strips. But when told to use “configuration 2, protocol 2”, it would allow for higher data rates, and individual control of each strip.
All of this is a bit complicated, but most of this would be hidden from users, and it would “just work”.
I also have some potential ideas for having clash detectors in the blade, which would then use the same talk-back mechanism when a clash occurs.