WS2801 RGB String - Red Only - B & G Unlit

Hi gang,
I'm new to Arduinoland and am truly enjoying it.
I have a digital RGB LED string of 19 36mm modules that only show red. When blue or green should be lit, they stay off. My wife (and cat!) are enjoying the chasing of the string but it would be far better if all the colors could play together.

I'm using an edited portion of Adafruit's Stringtest to run them
( I ran the whole code but the pauses between colors were disruptive...)

#include "SPI.h"
#include "Adafruit_WS2801.h"

/*****************************************************************************
Example sketch for driving Adafruit WS2801 pixels!


  Designed specifically to work with the Adafruit RGB Pixels!
  12mm Bullet shape ----> https://www.adafruit.com/products/322
  12mm Flat shape   ----> https://www.adafruit.com/products/738
  36mm Square shape ----> https://www.adafruit.com/products/683

  These pixels use SPI to transmit the color data, and have built in
  high speed PWM drivers for 24 bit color per pixel
  2 pins are required to interface

  Adafruit invests time and resources providing this open source code, 
  please support Adafruit and open-source hardware by purchasing 
  products from Adafruit!

  Written by Limor Fried/Ladyada for Adafruit Industries.  
  BSD license, all text above must be included in any redistribution

*****************************************************************************/

// Choose which 2 pins you will use for output.
// Can be any valid output pins.
// The colors of the wires may be totally different so
// BE SURE TO CHECK YOUR PIXELS TO SEE WHICH WIRES TO USE!
uint8_t dataPin  = 2;    // Yellow wire on Adafruit Pixels
uint8_t clockPin = 3;    // Green wire on Adafruit Pixels

// Don't forget to connect the ground wire to Arduino ground,
// and the +5V wire to a +5V supply

// Set the first variable to the NUMBER of pixels. 25 = 25 pixels in a row
Adafruit_WS2801 strip = Adafruit_WS2801(19, dataPin, clockPin, WS2801_GRB); 

// Optional: leave off pin numbers to use hardware SPI
// (pinout is then specific to each board and can't be changed)
//Adafruit_WS2801 strip = Adafruit_WS2801(25);

// For 36mm LED pixels: these pixels internally represent color in a
// different format.  Either of the above constructors can accept an
// optional extra parameter: WS2801_RGB is 'conventional' RGB order
// WS2801_GRB is the GRB order required by the 36mm pixels.  Other
// than this parameter, your code does not need to do anything different;
// the library will handle the format change.  Examples:
//Adafruit_WS2801 strip = Adafruit_WS2801(25, dataPin, clockPin, WS2801_GRB);
//Adafruit_WS2801 strip = Adafruit_WS2801(25, WS2801_GRB);

void setup() {
    
  strip.begin();

  // Update LED contents, to start they are all 'off'
  strip.show();
}


void loop() {
  // Some example procedures showing how to display to the pixels
  
  colorWipe(Color(0, 255, 0), 50);
  colorWipe(Color(0, 0, 255), 500); //red

 
}

// fill the dots one after the other with said color
// good for testing purposes
void colorWipe(uint32_t c, uint8_t wait) {
  int i;
  
  for (i=0; i < strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
  }
}

/* Helper functions */

// Create a 24 bit color value from R,G,B
uint32_t Color(byte r, byte g, byte b)
{
  uint32_t c;
  c = r;
  c <<= 8;
  c |= g;
  c <<= 8;
  c |= b;
  return c;
}

I've tried variations on the data and clock pins; default, new pair, and SPI. None have made any difference.
I have tried 3 separate 5 volt power supplies (1A, 2A, 3.5A) to make sure the LEDs weren't starving. No difference.
The wires are 16ga from the PS to the LEDs, more than adequate.
I have no idea who made the string. It was given to me after being used in an art project at Burning Man.

I am doubting that the modules are all bad, that they'd lose the two exact colors on every module. I'm thinking it's something I've done or not done...

Has anyone ever seen this behavior?

You probably have, but you don't say, so have you tried changing this line

  colorWipe(Color(0, 0, 255), 500); //red

to

  colorWipe(Color(255, 0, 0), 500);

What happens?

Hi Arduinodlb!
All were dark :frowning:
The original code has three lines, each shifting the 255 to pull the colors (where are you, colors?) so I snipped on out to reduce the delay in cycling.
It's actually rather neat. Fills all pixels slowly, then zips to dark. Reminds me of the old chaser signs at roadside motor lodges...

You may wish to check the lights are actaully WS2801.

There are other chips that are loaded into the same looking housings such as LPD 6803, and WS2811.

If they are WS2801s, then I would start with running STRANDTEST, and also check that the board selected in Ardunino matches the board you have.

Hi Fin,
They indeed are WS2801s...
Strandtest was the base for the code above. I chopped it down quite a bit.

I neglected to mention that the reds are running rather dim. Can't see 'em when outside on an overcast day.
The 19 modules only draw 17mA with all of them on. I see 5.17v at both ends of the string, rock solid, no sagging.

36mm dRGB.jpg

You haven't got your data and clock wires back to front have you?

Just double checked, we're OK there.

Well, it's certainly a mystery. I think the dim red lights is a big hint though. Hmmmmm

When you say you checked the data and clock, did you use a DMM all the way to the 2801 pin, or just go by the color? It looks like on your LEDs, the Yellow might be Clock, and Green might be Data, which is the opposite of the adafruit ones according to your code comments.

A couple of days ago I wondered that too. I swapped them, flickering and twitching, swapped back and it was exactly as it was before.
I think I'm gonna put them into the junkish box for use where appropriate on a future project.
Found a 50 pc string of IP68 (in Chinese it's around IP56 :slight_smile: ) digital RGB 12mm emitters for $25 delivered. I think I'll begin anew with that.

Good Luck.

Be careful with the Chinese ones if they're from Amazon. The cheapest string they had there said WS2801 in the description, but in the photos there were only 3 wires to each LED, which makes them WS2811. That's why I'm guessing they were the cheapest, and not accurate to the description.

arduinodlb:
but in the photos there were only 3 wires to each LED, which makes them WS2811.

Don't you mean four wires? Vcc, Ground, in and out.

Foxfur:
I neglected to mention that the reds are running rather dim. Can't see 'em when outside on an overcast day.
The 19 modules only draw 17mA with all of them on. I see 5.17v at both ends of the string, rock solid, no sagging.

Looks to me like something bad happened to the strip at Burning Man...

Paul__B:

arduinodlb:
but in the photos there were only 3 wires to each LED, which makes them WS2811.

Don't you mean four wires? Vcc, Ground, in and out.

No. The WS2801 takes 4 wires to operate. VCC, GND, CLK, DATA. The WS2811 takes 3. VCC, GND, DATA/CLK.

I suppose you could describe that as 4 in and 4 out (being 8 total) or 3 in and 3 out (being 6 total), but because it's in a chain, I think it makes more sense to describe it as 4 and 3 respectively.

By brainstorming with you all we eliminated all kinds of possible problems from consideration.
I was at Goodwill yesterday digging through the bin of warts and bricks and found an old HP 12V 2A brick. I figured it'd come in handy sometime. On the way home I wondered about hooking the string up to 12V. I'd read somewhere that 2801s use 12V but kept seeing 5V in all the other places I've searched.

Got home, hooked up to 12V, and we're rockin'!

Now that the hardware side is done, I need to begin figuring out the daunting code. I have not done any programming since my VIC20, Apple II+, and Atari 800 :fearful:
I'm able to cut up examples and rearrange things but not yet able to comprehend the odd (to me) operators and maths.

Thanks to all who posted!

Rock on! Glad you're up and walking.

WS2811:

WS2811 Datasheet.

WS2801 Datasheet

It does indeed appear that the 2811 can be used at 12V, but note carefully the specification in the datasheet for the dropping resistor which is required to do so. In the absence of this resistor - as in the Neopixels, it should only be driven at 5V.

And the 2801 is in fact, a two-wire interface - two in, two out - whilst the 2811 is one-wire - one in and one out.

Paul, stop deliberately confusing the issue. Your previous post about the WS2811 requiring 4 wires was just plain wrong.

See how you go if you just connect up either only 1 wire to the 2811 or only 2 wires to the WS2801. Good luck with that.

The WS2801 requires 4 wires, with pinouts as I described previously. The WS2811 requires 3. When buying off amazon, you need to be careful that the images agree with the description when buying.

In future, please don't correct my posts unless you are correct.

arduinodlb:
Paul, stop deliberately confusing the issue. Your previous post about the WS2811 requiring 4 wires was just plain wrong.

No, not confusing the issue, and - not wrong. just providing as much reference information as possible.

It's all a matter of viewpoint. My original comment was that each LED with its WS2811 driver - as in the above illustration - has four connections (allowing that VDD in that particular assembly is duplicated) given that it is part of a chain. I was thinking - and commenting - in those terms whereas you were clearly and entirely correctly thinking in terms of the ribbon cable between LED assemblies as it relates to what may be illustrated in eBay items.

In fact - I was not "correcting" you. What you explained was correct - as was what I explained. It's just a matter of which way you are looking at it.

Really, you want to resurrect this thread?

No, you corrected me, incorrectly. I realise you are having trouble reading, but talk about obfuscation of the facts:

Paul__B:

arduinodlb:
but in the photos there were only 3 wires to each LED, which makes them WS2811.

Don't you mean four wires? Vcc, Ground, in and out.

Stop trying to justify your mistakes quick-draw McGraw. Man up Princess.

And you know, even that didn't worry me greatly, but then you persisted with it, with your italics and all. And now you bother to resurrect it? Wow. Just sad.

All I ask is that in future, you don't disrespect me or anyone else in these forums, and I will do the same for you. Sound reasonable?