WS2813 Custom Board - Single LED not working

Hi all,

I made a small board with a bunch of WS2813s on it. It’s working as intended apart from one of the chips not working. There are 12 on the board but I can’t get number 9 to light.

I’m using an arduino mega 2560. Previously I had an adafruit ring with ws2812s and it was working fine. Once i’ve switched over to these boards, everything works as intended except for LED 9.

I’ll attach the Schematic & PCB picture below.

I don’t expect anyone to diagnose any connection issues on the board, i’ve triple checked that and i’m confident it’s not the issue.

I’ve tried Adafruit and NeoPixelBus libraries and have the same issue on both, i then reduced my code down to lighting up a single LED and can light up every single LED by itself except 9.

Below is my code at the moment, just flashing white.

Code:

// NeoPixelTest
// This example will cycle between showing four pixels as Red, Green, Blue, White
// and then showing those pixels as Black.
//
// Included but commented out are examples of configuring a NeoPixelBus for
// different color order including an extra white channel, different data speeds, and
// for Esp8266 different methods to send the data.
// NOTE: You will need to make sure to pick the one for your platform 
//
//
// There is serial output of the current state so you can confirm and follow along
//

#include <NeoPixelBus.h>

const uint16_t PixelCount = 12; // this example assumes 4 pixels, making it smaller will cause a failure
const uint8_t PixelPin = 6;  // make sure to set this to the correct pin, ignored for Esp8266

#define colorSaturation 128

// three element pixels, in different order and speeds
NeoPixelBus<NeoGrbFeature, Neo800KbpsMethod> strip(PixelCount, PixelPin);
//NeoPixelBus<NeoRgbFeature, Neo400KbpsMethod> strip(PixelCount, PixelPin);

// For Esp8266, the Pin is omitted and it uses GPIO3 due to DMA hardware use.  
// There are other Esp8266 alternative methods that provide more pin options, but also have
// other side effects.
// for details see wiki linked here https://github.com/Makuna/NeoPixelBus/wiki/ESP8266-NeoMethods 

// You can also use one of these for Esp8266, 
// each having their own restrictions
//
// These two are the same as above as the DMA method is the default
// NOTE: These will ignore the PIN and use GPI03 pin
//NeoPixelBus<NeoGrbFeature, NeoEsp8266Dma800KbpsMethod> strip(PixelCount, PixelPin);
//NeoPixelBus<NeoRgbFeature, NeoEsp8266Dma400KbpsMethod> strip(PixelCount, PixelPin);

// Uart method is good for the Esp-01 or other pin restricted modules
// for details see wiki linked here https://github.com/Makuna/NeoPixelBus/wiki/ESP8266-NeoMethods 
// NOTE: These will ignore the PIN and use GPI02 pin
//NeoPixelBus<NeoGrbFeature, NeoEsp8266Uart1800KbpsMethod> strip(PixelCount, PixelPin);
//NeoPixelBus<NeoRgbFeature, NeoEsp8266Uart1400KbpsMethod> strip(PixelCount, PixelPin);

// The bitbang method is really only good if you are not using WiFi features of the ESP
// It works with all but pin 16
//NeoPixelBus<NeoGrbFeature, NeoEsp8266BitBang800KbpsMethod> strip(PixelCount, PixelPin);
//NeoPixelBus<NeoRgbFeature, NeoEsp8266BitBang400KbpsMethod> strip(PixelCount, PixelPin);

// four element pixels, RGBW
//NeoPixelBus<NeoRgbwFeature, Neo800KbpsMethod> strip(PixelCount, PixelPin);

RgbColor red(colorSaturation, 0, 0);
RgbColor green(0, colorSaturation, 0);
RgbColor blue(0, 0, colorSaturation);
RgbColor white(colorSaturation);
RgbColor black(0);

HslColor hslRed(red);
HslColor hslGreen(green);
HslColor hslBlue(blue);
HslColor hslWhite(white);
HslColor hslBlack(black);


void setup()
{
    Serial.begin(115200);
    while (!Serial); // wait for serial attach

    Serial.println();
    Serial.println("Initializing...");
    Serial.flush();

    // this resets all the neopixels to an off state
    strip.Begin();
    strip.Show();


    Serial.println();
    Serial.println("Running...");
}


void loop()
{
    delay(1000);

    Serial.println("Colors R, G, B, W...");

    // set the colors, 
    // if they don't match in order, you need to use NeoGrbFeature feature
    strip.SetPixelColor(0, white);
    strip.SetPixelColor(1, white);
    strip.SetPixelColor(2, white);
    strip.SetPixelColor(3, white);
    strip.SetPixelColor(4, white);
    strip.SetPixelColor(5, white);
    strip.SetPixelColor(6, white);
    strip.SetPixelColor(7, white);
    strip.SetPixelColor(8, white);
    strip.SetPixelColor(9, white);
    strip.SetPixelColor(10, white);
    strip.SetPixelColor(11, white);

    // the following line demonstrates rgbw color support
    // if the NeoPixels are rgbw types the following line will compile
    // if the NeoPixels are anything else, the following line will give an error
    //strip.SetPixelColor(3, RgbwColor(colorSaturation));
    strip.Show();


    delay(1000);

    Serial.println("Off ...");

    // turn off the pixels
    strip.SetPixelColor(0, black);
    strip.SetPixelColor(1, black);
    strip.SetPixelColor(2, black);
    strip.SetPixelColor(3, black);
    strip.SetPixelColor(4, black);
    strip.SetPixelColor(5, black);
    strip.SetPixelColor(6, black);
    strip.SetPixelColor(7, black);
    strip.SetPixelColor(8, black);
    strip.SetPixelColor(9, black);
    strip.SetPixelColor(10, black);
    strip.SetPixelColor(11, black);
    strip.Show();

}

I’ve verified the issue on 3 out of 5 boards I got made (Just haven’t tested the other 2). Can anyone see any causes for issue here?

when you change pixel count to nine, does then tenth led light? Maybe pixel nine is just bad.

can you ohm out do on pixel 8 to pixel 9 di?

who made your boards? Can you post a picture of the actual boards... looks like a manufacturing issue baring all else. You could try manually adding a wire from pixel 8 do to pin 9 di....

your capture i don’t see a link connecting do8 to di9 but i can’t see the bottom of the board. Maybe you have an airwire.

Qdeathstar:
when you change pixel count to nine, does then tenth led light? Maybe pixel nine is just bad.

can you ohm out do on pixel 8 to pixel 9 di?

who made your boards? Can you post a picture of the actual boards… looks like a manufacturing issue baring all else. You could try manually adding a wire from pixel 8 do to pin 9 di…

your capture i don’t see a link connecting do8 to di9 but i can’t see the bottom of the board. Maybe you have an airwire.

No, 10th light does not light up.

Yes, do of pixel 8 is connected to di of pixel 9 verified using multimeter.

Boards were manufactured and assembled using JLCPCB.

I’ll attach a picture of the board in altium showing top and bottom layer tracks.

Hmm... but if you switch to all 12 leds all of them work but ninth one?

Can you try switching though colors (not just white)?

It certainly seems like a bad pixel, but it would strange that it happened at the same time for all the boards.... and i would expect led10 to light.....

Are your grounds between the pcb, arduino, and psu connected with a moderately large gauge (like 18 awg)?