Adafruit is open and shipping! Let's build back better, together!

Neopixel 5mm damage
Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.

Neopixel 5mm damage

by ilikecake on Sat Jan 02, 2021 5:23 pm

Hi All,

This post started out as a request for help, but I think I have figured out my problem. This post is therefore a cautionary tale and an attempt to provide a bit more info on the 5mm Neopixel LEDs.

My project consists of
    -A Trinket M0 for controlling the LEDs. Powered with 5V over USB.
    -A level translator that converts the 3V signal from the Trinket to the 5V required by the Neopixels. The level translator is custom PCB with a SN74LVC1T45 chip and a few capacitors. I could not find a single bit level translator in a small form factor for this project. (New product idea for Adafruit ;) )
    -A bunch of 5mm Neopixels. I intend to use 16-32 of them eventually, but for now, I am using only two for troubleshooting.

For testing, I have arranged the parts on a breadboard.

I have read the Uberguide (several times :P), and from what I can tell, the important bits are:
    -Attach a .1uF cap across each pixel's power pins.
    -Attach a large capacitor (I am using 1500uF) across the power lines to the pixels.
    -Attach a 300-500 ohm resistor between the microcontroller and the first pixel. I used a 470 ohm resistor, as I had it lying around. I ended up using a resistor between each LED. This may not be really required, but it seemed safer. More info on this below.

I made a simple program to cycle through the colors for testing purposes.
Code: Select all | TOGGLE FULL SIZE
import board
import digitalio
import time
import neopixel

def main():
    pixel_pin = board.A4
    num_pixels = 2
    pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.2, auto_write=False, pixel_order=neopixel.RGB)


    while True:
        pixels[0] = (255, 0, 0)
        pixels[1] = (255, 0, 0)

        pixels[0] = (0, 255, 0)
        pixels[1] = (0, 255, 0)

        pixels[0] = (0, 0, 255)
        pixels[1] = (0, 0, 255)

if __name__ == "__main__":

My problem was that the second LED was appearing much dimmer than the first LED. After much fiddling, it appears that the first LED was damaged or defective. On the pictures below, the yellow trace is the signal into the first LED, and the blue trace is the signal into the second LED. I cropped the waveform to the last eight bits. The microcontroller is commanding blue at an intensity of 50 (0b00110010). You can see that the signal is correct into the first LED, but the low time for the 1s is messed up at the input of the second LED.

After replacing the first LED, the signal appears to be correct.

Other things that I tried: Using different value resistors between the LEDs and the translator. Adding larger capacitors (10uF) across the power pins of the LEDs. Neither of these seemed to make a difference. However, as part of the testing, I tried running the system without the resistor between the level translator and the first LED. Upon examination with the scope, this was causing really high voltage spikes at the rising edges of the signal. I speculate that this is the cause of the damaged output driver of the first LED. It did not seem to affect the function of the LED, only the output. On a potentially related note, the level translator I am using has much higher drive strength than the one suggested by Adafruit (24mA vs 8mA). I assumed that higher drive strength would be better, but I am not sure if it would cause the spikes seen without the resistor to be worse.

Has anyone else seen this behavior before? Is there any way to fix this problem, or is that LED scrap?

The problem is intermittent, and I am not convinced that it is gone for good yet. I will update this post if it comes back...

Posts: 4
Joined: Thu Dec 19, 2019 12:30 am

Re: Neopixel 5mm damage

by ilikecake on Sat Jan 09, 2021 4:26 pm

As expected, the problem has come back, and I am running out of ideas on how to fix this.

To test the system, I am using a 5.25V, 2A power supply. When powering the system with this power supply (no data connection), the color test program shown above works for both LEDs. I have verified this with the scope. Measured voltage on the VUSB line is 5.422V.

Thinking (hoping) that the problem was solved, I plugged the perfboard into a USB port on the computer. The color test program no longer correctly lights up the second LED. The failure appears to be at the output driver of the first LED. The waveform is exactly the same as the one show above for the bad output of the first LED. I have verified this with the scope. Measured voltage on the VUSB line is 5.178V.

Switching back to the DC power supply results in the correct output again.

At this point, I figured that the problem was the lower voltage on the VUSB line. Adafruit does not provide a datasheet for this LED. The datasheets for the two possible LED driver chips are a bit vague, but from what I can understand, the suggested voltage is:

The fix for this appeared to be simple. I disconnected the wire between the USB pin on the Trinket and the power rail on the perfboard. I left the ground connection between the trinket and the perfboard. I connected a USB cable between the ~5.4V power supply and the power and ground rails on the perfboard, and I connected a USB cable between the Trinket and the computer. In this configuration, the voltage translator and the LEDs are powered by the higher voltage DC power supply, and the Trinket is powered by the PC over USB. The grounds between these two power supplies are tied together.

Doing this did not fix the problem. I verified the higher voltage was present at the LEDs, but the output of the first LED exhibited identical waveform to the bad waveform shown above. I have verified this with the scope. Does anyone have any other suggestions on things to try to fix this?

Has anyone successfully used more than one of these LEDs in a string before?

Posts: 4
Joined: Thu Dec 19, 2019 12:30 am

Please be positive and constructive with your questions and comments.