Anyone know the maximum number of 5m long WS2801 strips one can run in parallel from one arudino mega using the FastSPI_LED2 library and its software SPI abilities? I tried with 2 and it worked fine. Then 3 and not so fine but it may have been due to unstable and rather dodgey strips.
I would ideally like to run 5 strips in parallel.
(oh and thanks for this really awesome library )
When you say ‘not so fine’, what happened? And are the strips powered separately from the Mega? There’s only so much current it can provide per pin, per port.
All strips are powered separately by 5 v 12 a psu’s. We managed to run 5 strips after I posted this though. Yay! Do you think there is anything to take into account w running this long term ( for a couple hours in the night for about 3 days)?
Speed would be the only thing I can think of. As in, how fast are you updating all the strips at the same time. But I suspect you probably won’t hit that threshold unless you’re actually trying to.
Great, Thanks for the input!
I’ve only done 10m (2 5m strips) but you could probably add more if you inject power every 5m. And that was using the soft SPI because I had an Ethernet shied on the Mega.
She’s not running one long section, she’s running five separate pieces, each 5m long. With each one having its own PSU, she should be golden.
Hello again. I have started to to notice very unreliable results when I am running 4 or 5 strips from the one arduino mega. For example, sometimes one or two of the strips will flicker constantly and their colours with be slightly off. I have looked at many forums and started to wonder if this may because I need to reduce the data rate. At the moment my code sets the data rate to 1Mhz for each set up of SPI pins with the following lines of code:
LEDS.addLeds<WS2801, 51, 52, BGR, DATA_RATE_MHZ(1)>(leds5, NUM_LEDS);
LEDS.addLeds<WS2801, 31, 33, BGR, DATA_RATE_MHZ(1)>(leds, NUM_LEDS);
LEDS.addLeds<WS2801, 35, 37, BGR, DATA_RATE_MHZ(1)>(leds2, NUM_LEDS);
LEDS.addLeds<WS2801, 39, 41, BGR, DATA_RATE_MHZ(1)>(leds3, NUM_LEDS);
LEDS.addLeds<WS2801, 43, 45, BGR, DATA_RATE_MHZ(1)>(leds4, NUM_LEDS);
When I tried to set it to less than 1…for example 0.25 I got a complie time error I am assuming because I cannot pass a float as a parameter for the data rate. My question is then how do I set the data rate to less than 1MHz?
Couple of things to try:
If you aren’t already, try injecting power somewhere in the middle of each strip as well. But avoid creating a VCC loop. Cut the VCC line somewhere in the middle, and inject power to the half that is now left without power (and insulate the wire on the first half which does still have power.)
Next thing to try is to ground the data lines at the end of the strip. Sometimes you can just ground them, other times you may need to stick a series resister as a pull down on them. With my LPD8806 strips, I use a 50 Ohm resistor and pull the data and clock lines to ground. Not using a resistor didn’t do squat.