WS2812B Flickering and artifacts

Hi,

I bought a generic WS2812b ARGB strip with the intention to use it inside a computer, being driven by the motherboard. Looks like this one:


Tested it and it randomly flickers and there are random artifacts and color flashes. It becomes very noticeable when the strip is set to a single color, white for example.

Thought the motherboard header/firmware has a problem, so I attached it an arduino nano with this code:


#include <FastLED.h>

#define LED_PIN     12
#define NUM_LEDS    39
#define LED_TYPE    WS2812
CRGB leds[NUM_LEDS];

void setup() {
    delay( 1000 ); // power-up safety delay
    FastLED.addLeds<LED_TYPE, LED_PIN, RGB>(leds, NUM_LEDS);
    FastLED.setBrightness(  20 );
    FastLED.clear();
    FastLED.show();
}
void loop(){
  for (int i=0; i<NUM_LEDS; i++){
    leds[i] = CRGB(255,255,255);
    FastLED.show();
  }
}
<CODE/>

Still the random artifacts and flickering.

Things I've tested:
1- A resistor on the data line. Values from 50 ohm to 10 Kohm
2- A 1000uf Capacitor across the 5v.
3- Powering the strip from a power supply with common ground with the nano.
4- A diode on the positive rail to lower the voltage being applied to the leds via the voltage drop of the diode.
5- Using level shifters:
a- 74HC14, 2 gates in series with all the other pins grounded and 100nF capacitor across right next to the ic's power supply.
b- 74LS14, same setup.
c- 74HC125, data to pin 2, output from pin 3, pin 1 grounded, all other gates grounded with the 100nf capacitor.

Most of the test are a combination of the above steps.
Nothings works. The strip still flickers and glitches.

What am I missing.

Thank you.

Conencted the wrong way? Di should be connected to the Arduino

What power supply.

1 Like

Different power supplies, a switch mode variable PS, and I also tried a linear variable PS.

Where did you buy it - a reputable source? :thinking:
Link?

Have you contacted them?

Are you sure they are WS2812b - and not something else?

Do you have some known-good LEDs to try it on?

If you cut off just one, does it work on its own?

I bought them locally, they are as generic as generic can be.
Here is a photo of the actually LEDs:
https://i.imgur.com/K67bXTD.jpeg

They are 4 pins leds 5050 packages with an IC built into the LED. Is there a way to know exactly what type they are?

Don't have any other addressable leds.

Yes. Just tested that.

An accurate, completely annotated wiring diagram so we can help you. Word salad descriptions of circuits commonly miss the mark. It definitely sounds like a hardware issue. However your loop update is strange

void loop(){
  for (int i=0; i<NUM_LEDS; i++){
    leds[i] = CRGB(255,255,255);
    FastLED.show();
  }
}

You should just fill the array first, like

void loop(){
  for (int i=0; i<NUM_LEDS; i++){
    leds[i] = CRGB(255,255,255);
  }
  FastLED.show();
  delay(100);  // only update 10 times a second
}

Did you try your hardware with some FastLED example sketches?

1 Like

So have you been back and discussed this with the supplier?

Thank you for the reply.

It's a sting of 10-20 leds connected to an arduino, what diagram do I need to draw?
All those other tests, ignore them, just consider that I tried logic level converters and it didn't work.

Please consider that I'm using the arduino as a quick tester, just need some signal to turn all the leds on to see if the flickering is hardware issue with the motherboard header or an actual problem with the strip. The end game is to drive those strips using a motherboard header.

From awneil's comment I deduced that I might have bought a bad/lower quality, unstable strip. Thought that I can save some money and not buy those overpriced "gaming" strips 25$ per 80cm.

Good luck with your project.

Not yet, but I will.

It's unlikely to be the strips. The odds are on your execution.

Please elaborate.

I connect a short strip of 10 LEDs to the motherboard header, using the shortest wire possible, I even tried ferrite beads and shielded wire for the data line, and it flickers badly. How is my execution an issue?

I will never know until you show me. But I'm tired of the passive responses, so I'm out. For example, no response from you at all, about the issue and question I made in reply #6.

The forum introductory guidelines document you were asked to read, provides the elaboration you asked for.

You float things like,

the motherboard header

believing that everyone can be sure what you mean. Such is not the case.

I will not see any of your replies, from now on...

Look at the difference between your code & the "remommended" approach shown by @anon57585045 in post #6.

Your loop is doing a show on each iteration of the for loop - so all except the last iteration will be working on incomplete data!
Also no delay - so immediately after one show you're straight into the next.

Both of these issues sounds like the kind of thing that could lead to the symptoms you describe...

So have you tried the recommended approach?

...or tried library example sketches... standard troubleshooting technique...

1 Like

Yes, I did.

I've been testing with it since he/she posted it like this:

void loop(){
  for (int i=0; i<NUM_LEDS; i++){
    leds[i] = CRGB(255,0,0);
  }
  FastLED.show();
  delay(1000);  // only update 10 times a second
  for (int i=0; i<NUM_LEDS; i++){
    leds[i] = CRGB(0,255,0);  }
  FastLED.show();
  delay(1000);  // only update 10 times a second
  for (int i=0; i<NUM_LEDS; i++){
    leds[i] = CRGB(0,0,255);  }
  FastLED.show();
  delay(1000);  // only update 10 times a second
  for (int i=0; i<NUM_LEDS; i++){
    leds[i] = CRGB(255,255,255);  }
  FastLED.show();
  delay(1000);  // only update 10 times a second
}

Please excuse the crudeness of the code, I'm not proficient in writing code at all.

I also tested with some examples I found online, but most of those are moving patterns and switching colors, my aim is to see if the LEDs are glitching or not.

I had the idea, that maybe there are some "misbehaving" LEDs in the middle of the strip, and if I cut them out and resolder the strip I will get rid of the flickering. So switching the LED color every second I can catch the "misbehaving" LED.

Caught a few that light a different color than the rest, or flickers, resoldered the rest into a strip, and then tested those alone on the arduino, with just white color:

void loop(){
  for (int i=0; i<NUM_LEDS; i++){
    leds[i] = CRGB(255,255,255);
  }
  FastLED.show();
  delay(100);  // only update 10 times a second
}

working fine no problem.

Connected them to the motherboard, "consider it like one of those controllers sold on amazon with a remote control, just an ARGB driver" and the small strip is still glitching.

While writing this reply, I had this idea, maybe the LED which is "misbehaving" is not really bad, but the one before it which did not send the data correctly, and so the LED that should be removed is the one right before the glitching LED.

and what were the results?

That's just 1 time per second

No luck unfortunately, still flickering/glitching.
Will try to source a better quality strip and test again, I'm done with that strip.

I know, I was trying to switch the colors every 1 second in the hope of catching the glitching pixel, and cutting out those did not help, the rest are still glitching happily.

Sounds like a contradiction in terms. "ARGB" stands for "Analog Red Green Blue" as far as I know. WS2812 strips are digital.

What Nano model exactly? There are many models called "Nano" these days, some are 3.3V and some are 5V, which could make a difference.

Please attach the photo to your post. No need to post potentially malicious (as far as we know) links.

Are you in UK? Post them to me and I can test & return.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.