SparkFun Forums 

Where electronics enthusiasts find answers.

For the discussion of Arduino related topics.
By OldStumpy
I hope someone may have a resolution for this. Here's my setup:
I have 8 16' 150 led WS2812 light strips controlled from 4 digital outputs (pins 4, 5, 6, 7).
I'm using two 5vdc output 300 watt power supplies with the 5vdc commons and the ground from the Mega2560 board shared.
I have the Mega2560 board powered separately by a plug in 5vdc power supply.
The led strips are daisy chained in 2's making 4 300 led strips.
I have a separate 18-2 cable from the power supplies going directly to the second strip of each pair of led strips to inject 5vdc directly.
The strips are attached to 4 PVC hoops over my driveway spaced 10' apart.
My control box (2560 board, power supplies, etc.) is in between the middle two hoops to keep all the cables as short as possible. I'm using 18-3 shielded cable to get from the control box to the first strip on each hoop.
I think that describes my configuration ok. The problem I'm having is that if I try to run all four hoops I get leds lighting up at the brightness I want but they seem to not be getting any control data from the board. If I change my sketch to only drive the two center hoops (shortest cable length) they work fine. If I try to drive either outside hoop (longest cable length), regardless of what pin i try to drive them off of they partially light up (not dim, just misc leds) but don't control at all. I had the 330ohm resistors inline on the data wire on all four. I took the resistors out of the two outside ones and the problem reduced slightly, I was able to get some control but it was very slow compared to the center hoops.
I'm pretty confident that it's the cable length causing the problem (excessive resistance over distance) which would be easy to fix if it were the 5vdc power and not the data loop.
This all being said, is there a way to boost the data loop signal or can someone recommend a different kind of wire that may have less resistance? This is a Xmas display so any help would be greatly appreciated.

P.S. All eight strips worked fine bench testing, all that is different is the length of the wire to them now.

On another forum I'm being told that I need a 'Differential Buffer' to fix this, is there an off the shelf product that will resolve my problem?

I found this on your site, will it work for what I'm trying to fix?
User avatar
By redwire
I would try a few things first, many things can cause your problem.

It's not like the data signal is going the full wiring+strip distance. Each WS2812 LED buffers the signal (Data in) for the next LED (data out) in the daisy-chain, it goes from LED to LED in the string. So the Mega2560 is what 'sees' the most cable, and the last LED going to the second strip (unless wired in a star configuration).

1. Cable capacitance is loading down the signal out of the Mega2560. Not resistance.
330R is too big, a bad suggestion on the Web, you would usually see 33R typical. But you tried no resistor and there is still a problem.
Sometimes adding a pull-up resistor to the MCU data line is enough to boost the signal. Try 220R pullup to +5V at the MCU pin, before the 33R output resistor to the LED strip.

A buffer IC would help, not differential unless you have a very long run say >50' from mega2560 to the first LED. You linked to an op-amp board but this is not suited to buffer high-speed digital signals. SparkFun does not offer a buffer board that I could find.
You can use two transistors, or high-current buffer IC's like TC4427 or TPS2812. The ultimate is ... p0935.html

2. Check your grounding. Your central ground (meeting at the two 5V power supplies output) should be connected to earth-ground.
This would look like a wire from AC power ground to the 5V(-), and connecting to the cable shields. I'm not sure what your 300W PSU looks like.
Especially with two-prong power supplies, stray voltage can cause the 5V power to float and get noisy, compared to earth-ground. This can cause (comnmon-mode) interference on the LED strings.

3. Your software/LED library has a bug where it sends out a "grunt" or narrow pulse by accident, in the output sequence. A narrow glitch as a bug in a
software library can show up with longer cables. Try a different WS2812 software library.

4. You can also try add local large filter capacitors say 1,000uF at the power connections at the end of a LED strip, where there is nothing connected. This is to ensure power to the LED strips is not getting dirty by time you are at the end of the wiring run. If LED's at the ends are malfunctioning try this.
By OldStumpy
WOW! Thank you Redwire for the detail in your response! Some great info there!

I did get the system to work by shortening the 18-3 cables to all four hoops as much as I could without actually pulling them tight. The only problem I see now is that anything I'm doing where there is light chasing is sluggish regardless of how small the delay is. I guessing implementing some or all of your suggestions may resolve this.

1. I will definitely change the resistors to 33 instead of the 330's. I'm currently using 1/4 watt units, will that wattage still be ok? I will also give the 220 pull-up a shot too.
2. The power supplies are grounded on the input line voltage side but I'm not sure if the 5vdc output common is shared or isolated internally. I don't believe it would hurt to share the 5vdc common to the earth ground common regardless so I'll do that.
3. Do you any recommended library suggestions? I currently have FastLED and NEOPIXEL.
4. I do have the 1000uf capacitors but they are at the terminal strip in my control box enclosure right off the power supplies. It's easy to move them to the ends of the last four strips so I will do that.

Thanks again for all the great info, if after I implement all of these and it still seems a little buggy I'll order that booster you linked me to. I work in the HVAC controls industry and use RS485 signal boosters like Acromag and others quite often so being as this is serial data also I figured there had to be something similar I could get.
By OldStumpy
Couple more questions, if I end up needing the booster you linked to, by the looks of the schematic I'm assuming I would have to have 4 boosters as I have 4 separate data pin outputs? Also, the schematic shows a clock pin output but since I'm using WS2812 strips with no clock pin wire I would just cap off the clock pin input/output from the booster?