citlee

Unfortunately, of the dozens of electronic components (ignoring the mystery bag of semi-random ICs) that are neatly organised, my collection doesn't include a DC power socket, so short of butchering the power supply I have no way to power the strip! I have ordered some from rapidonline.com and they should be here next week.

citlee

I think with this configuration, you will only be able to control colors every 3rd LED rather than every LED as with the strips on Adafruit. The LEDs on each side of the 8806 appear to be in series with an additional resistor for each to drop voltage further. The max power dissipation of the 8806 is 600mW so with 6 RGB LEDs, it would be able to supply a maximum of only 6.7mA to each leg of each LED. This coincides with the 180 ohm resistors for the green and blue legs in the pics. These resistors would limit current to around 6mA for each color. This would mean it would not be as bright as the strip on Adafruit that can supply the full rated 20mA to each leg of each LED.

But this is all based on looking at the photos and my limited knowledge of these things. You won't really know until you hook it up and find out. Please post a follow up on this.

More knowledge than me, that's for sure!

The power sockets have arrived, and after killing one (I don't think I could solder to save my life) it's alive. I followed the ladyada.net tutorial for the LPD8806 and it works, with a minor adjustment.

As you surmised, the LEDs are unfortunately controlled in batches of three rather than individually.

With this strip there are 10 segments. Each segment has 18 LEDs, but as they're controlled in groups of 3, that means there are essentially 6 pixels/segment. So you need to:

LPD8806 strip = LPD8806(60, dataPin, clockPin)to control the entire length of the strip in the way that you would expect.

So not exactly what I was after (I still don't have the spec sheet), but it's 1/3rd the cost of the adafruit strip, is good enough for what I want, and gives me a relatively easy way to control the colours using the LPD8806 library.

for (j=0; j < 384 * 5; j++) { // 5 cycles of all 384 colors in the wheel for (i=0; i < strip.numPixels(); i++) { // tricky math! we use each pixel as a fraction of the full 384-color wheel // (thats the i / strip.numPixels() part) // Then add in j which makes the colors go around per pixel // the % 384 is to make the wheel cycle around strip.setPixelColor(i, Wheel( ((i * 384 / strip.numPixels()) + j) % 384) ); if (digitalRead(button)){ butPush = 1; //Was the button pushed to change modes? j=384*5; } } strip.show(); // write all the pixels out if (butPush == 0) delay(wait); }}

// fill the dots one after the other with said color// good for testing purposesvoid colorWipe(uint32_t c, uint8_t wait) { int i;

josev

This may be silly, but I am trying to understand how the LED (or "pixels") are identified , ie how do I know number one is the first or so. As per the library it seems to be the pixels are handled by an array and the show function just send the color info via the SPI . I am not familiar with CPP syntax (I play mostly AVR in C), but is pixels[0] the first LED ? if so how the controller knows?

Thanks for any info or direction on on this and my apologies if this is indeed silly and I must look better in the code.Jose

If you want to get into the nitty gritty, look at the LPD8806.cpp file. It breaks up the data to send to the ICs and then latches it in to display. ICs in series have information overflow from one IC to the next on the data and clock pins to allow these long runs.

Specifically in this case, I am trying to see what RGB colours a pixel is set to, then divide by two to set the pixel behind it to that colour, etc, to create a trail. I'm setting colours with setPixelColor(10,20,30) for example.

Red and blue return the right values, but green is always 127, and I just can't figure out why. The library mentions 'packed' values, but I don't understand enough about the code to understand how it's packing it. Any ideas welcome!

josev

Thanks for the information, I thought the Data and Clock lines were passing thru and it is not the case each LPD8806 must push them to the next like a daisy chain. I will keep looking the code but then the protocol might be like sending the RGB data and then a latching command which will now allow go to the next controller and so on. I imagine that when the last pixel is reached there must be some kind of unlatch command so the first pixel is enabled again to receive the data.

Jose

Cranium

As I understand it:When data is sent down the line, an IC will fill its buffer then start shifting data to the data out line regardless of whether there is actually another IC after it. Once the data transfer has been completed, it will then send up to 3 bytes of zeros to tell the ICs to latch the output pins. There is no unlatch command. It will then automatically start accepting SPI data again to fill the buffers of the ICs.

josev

Thanks , I am having a clearer picture now as what you say seems to be exactly what the show() function does. Then, lets say I want to control pixel number three, I will need to send 9 bytes, 3 for the first IC, three for the second and the last three will go to pixel 3. However, the show() routine will go to ALL the pixels , then I imagine I will send unchanged data to the pixels I do not want to undergo any change.

In summary, even if I want to modify the color of pixel three, the routine will fill ALL the pixels with data then I need to keep same value for the pixels I want to leave unchanged. The more difficult to understand is the latching; provided there are less than 128 pixels, show() will send three zeroes at the end of the sequence. Then it must be that when the first chip receives 3 consecutive zeroes , it will latch and pass them thru and so on and so forth until the last chip. But if there are 128 to 192 pixels in the strip, then show() will send SIX zeroes at the end of the transfer. So the total number of pixels seems to affect the way the latch command ( zeroes) is decoded.

ramsey

These have been very helpful posts. I imagine I might have some questions about sourcing and part selection in the near future.

I just ordered a 1m strip from adafruit. I also ordered a bunch of single led modules/pixels from Bliptronics. I plan to experiment with everything I have and see what works/looks best for that various projects I have in mind. In the mean time I'd love to hear any progress you guys have made.

Have you any of you seen this: http://www.passion-ledlighting.com/Basically a Chinese knock-off of the Color Kinetics/Philips iColor Flex line: http://www.colorkinetics.com/ls/rgb/Color Kinetics is basically what's being using in big video displays at many concerts and sporting events.I have no idea about pricing for either one, but might look into it.

With some luck a friend of mine may be able to get his hands on some of the Color Kinetics LED strings and the PSU/Drivers and Video software to run them. These use a 3 conductor wire. I am not sure what protocol they use or how they work exactly. Best I can tell all the nodes are in parallel. They seem to be limited either by power or data restrictions to less than 72 pixels per strand. They get around this by having psu/driver units that can handle many strands. And then the drivers can be daisy chained in a rack set-up via ethernet. For one of the big video screens you might see at a show, they could have entire racks of power/driving electronics. I'm not interested in doing any hi-res video, so this shouldn't be an issue for me. One cool thing about the strands is that they are very weather proof, and you can place the pixels at any point on the wire. They essentially have little teeth on them that pierce the wire strand. I think attention has to be paid to sealing any open puncture holes. This stuff can get very expensive. I'm mostly interested in seeing if I can drive these LEDS using an Arduino.

bathtub2007

So found this schematic of the LPD8806 chip, granted its in Chinese of course, but I have a question about the pins below. I am purchasing my own chips and own SMD RGB leds and making my own setup, but unsure how to hook up.

Firstly, why is there a ground (GND) pin on both sides? Do both need to be connected to ground?

Secondly, what do the PMODE, NC and OMODE pins refer to and what are the needed for when hooking up these chips?

THANK YOU!

Cranium

I took a chance and purchased 20m of LPD8806 based LED strip from a China manufacturer. I had to do a wire transfer of funds and was very hesitant to do so since I have very little recourse if the product was sub-standard, didn't operate like I expected or I never received it.

But I was pleasantly surprised at the results. These are the exact same strips found on Adafruit for less than 1/2 of the cost.

I have one of the two strips running with the same code I used from my previous project using the 2m I bought from Adafruit. I need to get a PC power supply rigged up to provide more amperage to run all 320 RGB LEDs on both strips and get my office lighting project built.