I have some props that are all relatively short (41 pixels each), and it's a real PIA to wire them in a daisy chain fashion, connecting the output data of one to the input data of the next. It would be much more convenient to wire them in a star pattern, where each prop has it's own wire from a central point, and data is only flowing in one direction - out to the prop. But it's a complete waste to use a 16 or 32 channel controller to only hang 41 pixels off of each port.
Currently I use 4 conductor cable (+12V, GND, Data In, and Data Out) with single ended data flowing over one wire in each direction. I currently have level shifters / line drivers on custom PCBs, but even then, at longer cable lengths, things get problematic. I recently spent a couple weeks and _really_ learned about termination (near end vs far end, etc etc), drive strengths, etc. etc. You'd figure being an EE, I'd already know about such things, but some things you don't TRULY know until you have a problem in front of you on the desk in the real world, and corrupt data, flickering LEDs, and the worst scope traces you've ever seen kicking your butt! I figured out how to solve my issues even driving single ended data over ~40ft cables, but I've had a different idea kicking around in my head for a while, and I finally decided to do something about it. I figured before I went ahead and made a new version of line driver / receiver PCBs to replace my existing ones with stronger drivers and proper termination, I wanted to try this other idea first...
For a long time, I thought it would be really useful to be able to split one data stream from one controller channel into many "virtual" smaller channels, each on an independent output. I know there are "smart" differential receivers that kind of do this, but you need a controller that supports "smart" receivers, and you lose some pixels on each port for the "smart" signalling (as well as the control protocol isn't open / documented), and even the smart receivers themselves aren't exactly cheap (I kind of have a crazy idea in mind to build a really distributed large display over a big area, and I would potentially need MANY of these, so cost is a factor). And they limit you to only a few sub-channels per controller channel. I want many more sub channels per channel, each with a programmable number of pixels per sub channel, and without needing any special controller support, or to steal any data spots in the data stream itself (but that obviously limits things to being pre-configured, or configured with an out of band communication channel).
A couple days ago, I ordered some development boards, and now I have a working prototype. I can take in WS2812 data stream in on one channel, and slice and dice it wherever I want, and output it chopped up on up to 30 separate channels. This will allow me to split my one channel of data into 41-pixel sub-channels, only run data in one direction to my props, and use differential line drivers and receivers and use the 2 data wires in my cable for a differential pair, rather than single ended data flowing in each direction.
Here's some scope screenshots of a 30 pixel test (generated using an espixelstick v4 running rainbow pattern from the built in pattern generator) on the top (red) trace, and being split in real time, first into a 15 pixel channel (yellow) and 10 pixel second channel (green), discarding the remaining input pixels

and then split into 2 15 pixel sub channels, using all of the incoming data

Here's a closer view at the transition from one channel to the next vs the input data - it's seamless

I'm wondering if anyone else would find this kind of thing useful? Has anyone else done this before?
With this type of arrangement, you could hang any number of these off of a differential run, in a true "multi-tapped bus" fashion like actual RS485 is designed to be, and pick off arbitrarily determined ranges of pixel data to many separate local output channels at each "tap" all along the cable run, with no special controllers, and no smart receivers (but you'd have to pre-configure each "tap receiver", or an alternate method of configuring them would be required - I do have a few ideas in mind for that too).
Throwing it out there to see what people think!
Currently I use 4 conductor cable (+12V, GND, Data In, and Data Out) with single ended data flowing over one wire in each direction. I currently have level shifters / line drivers on custom PCBs, but even then, at longer cable lengths, things get problematic. I recently spent a couple weeks and _really_ learned about termination (near end vs far end, etc etc), drive strengths, etc. etc. You'd figure being an EE, I'd already know about such things, but some things you don't TRULY know until you have a problem in front of you on the desk in the real world, and corrupt data, flickering LEDs, and the worst scope traces you've ever seen kicking your butt! I figured out how to solve my issues even driving single ended data over ~40ft cables, but I've had a different idea kicking around in my head for a while, and I finally decided to do something about it. I figured before I went ahead and made a new version of line driver / receiver PCBs to replace my existing ones with stronger drivers and proper termination, I wanted to try this other idea first...
For a long time, I thought it would be really useful to be able to split one data stream from one controller channel into many "virtual" smaller channels, each on an independent output. I know there are "smart" differential receivers that kind of do this, but you need a controller that supports "smart" receivers, and you lose some pixels on each port for the "smart" signalling (as well as the control protocol isn't open / documented), and even the smart receivers themselves aren't exactly cheap (I kind of have a crazy idea in mind to build a really distributed large display over a big area, and I would potentially need MANY of these, so cost is a factor). And they limit you to only a few sub-channels per controller channel. I want many more sub channels per channel, each with a programmable number of pixels per sub channel, and without needing any special controller support, or to steal any data spots in the data stream itself (but that obviously limits things to being pre-configured, or configured with an out of band communication channel).
A couple days ago, I ordered some development boards, and now I have a working prototype. I can take in WS2812 data stream in on one channel, and slice and dice it wherever I want, and output it chopped up on up to 30 separate channels. This will allow me to split my one channel of data into 41-pixel sub-channels, only run data in one direction to my props, and use differential line drivers and receivers and use the 2 data wires in my cable for a differential pair, rather than single ended data flowing in each direction.
Here's some scope screenshots of a 30 pixel test (generated using an espixelstick v4 running rainbow pattern from the built in pattern generator) on the top (red) trace, and being split in real time, first into a 15 pixel channel (yellow) and 10 pixel second channel (green), discarding the remaining input pixels

and then split into 2 15 pixel sub channels, using all of the incoming data

Here's a closer view at the transition from one channel to the next vs the input data - it's seamless

I'm wondering if anyone else would find this kind of thing useful? Has anyone else done this before?
With this type of arrangement, you could hang any number of these off of a differential run, in a true "multi-tapped bus" fashion like actual RS485 is designed to be, and pick off arbitrarily determined ranges of pixel data to many separate local output channels at each "tap" all along the cable run, with no special controllers, and no smart receivers (but you'd have to pre-configure each "tap receiver", or an alternate method of configuring them would be required - I do have a few ideas in mind for that too).
Throwing it out there to see what people think!







