can someone please explain to me how these things actually work? all the instructions i've found online so far have just left me with more questions than answers
the arduino libraries allow you to daisy-chain them together and address each one individually. how is that possible? from what i understand so far, the only control signal they accept is a 24-bit RGB value. there's no back and forth communication with the microcontroller. each one has only one input and output, so how can they be individually controlled if all they do is accept a value and then hand it to the next LED?
If you check the datasheet for the ws2811 ic that is used you see that you send three bytes and that sets the first pixel. The next three bytes the first pixel is already set so it sends them to the next in line.
A reset resets everything.
At first I thought it was just a shift register type deal but the datasheet is such shit engrish its one way or the other.
So not exactly addressable, you have to throw everything out and reprogram all of them to change one led
>address each one individually.
Simple. You send a string of 24 bit values to te first LED input. Each 24 bit 'word' is 8 bits each of RGB values. The first LED picks the first 24 bits off the string and sends the rest to the daisychained LEDs. Each one picks 24 bits off and sents the rest on.
So you can set each LED to a unique RGB value. You cannot send a single RGB value down the string addrressed to one LED in the middle. You have to pack the string with at least the RGB values for all the LEDs ahead of the one you want to change.
thanks for the responses, it makes a lot more sense to me now.
so if i'm interpreting this correctly, each LED has a 24 bit input buffer that retains its contents temporarily so long as it's receiving a data/clock signal. once the buffer is full, the overflow gets passed to the output until the signal stops, then the buffer automatically clears after a specified period
for example if you had three leds you wanted to first make red, green, and blue, then change to cyan, yellow, and magenta, you would have your microcontroller simply tap out
FF0000 00FF00 0000FF
then wait at least 50us and tap out
00FFFF FFFF00 FF00FF
and after another 50us the LEDs remain lit, but their input buffers will be cleared and ready to be refreshed
this is actually such a simple and elegant solution. i wish i got to design things like this