Uno + NeoPixel 8x8: strandtest doesn't light any leds.

Post here about your Arduino projects, get help - for Adafruit customers!

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
mikew6
 
Posts: 44
Joined: Thu Jan 09, 2014 11:51 pm

Uno + NeoPixel 8x8: strandtest doesn't light any leds.

Post by mikew6 »

So, I've read the neopixel guide, best practices, etc. and wired up an AdaFruit NeoPixel 8x8 grid to my old Arduino Uno, but no joy. I've tested the continuity between the various wires and checked for shorts. I've got a 470 ohm resistor in the data line, and I've got a 3300uF/6.3V electrolytic across the power lines. I'm powering the neopixel grid separately from the arduino, and I've connected the neopixel power supply ground to an arduino ground pin. The neopixel ps is a small regulated 5v wall plug. I've measured it at 5.15 volts. I've added Serial.print lines in the strandtest loop to make sure the program is running; it is. I've checked that I've connected the power and data lines to the DIN area and not the DOUT area. I soldered the leads on on an anti-static mat with a HAKKO-888 anti-static handpiece. I've tried four different output pins on the Arduino.

But, I've got no lights.

Initially I got a flicker on powerup, and a few times I got a few bursts of random colors on some random pixels, but now pretty much nothing lights ever.

I was wondering if there as a timing issue with my old Uno, but I've been unable to track down all of the #defines that the code uses to figure out which clock speed it's running on.

Ideas? Pretty bummed that I've got no RGB joy. :-( I can't imagine that I fried it, following all the instructions carefully, but I suppose anything is possible. How can I tell what's not working?

mikew6
 
Posts: 44
Joined: Thu Jan 09, 2014 11:51 pm

Re: Uno + NeoPixel 8x8: strandtest doesn't light any leds.

Post by mikew6 »

Wiring photo attached, hopefully.
Attachments
Wiring
Wiring
IMAG0725.jpg (1014.9 KiB) Viewed 915 times

User avatar
adafruit_support_mike
 
Posts: 67446
Joined: Thu Feb 11, 2010 2:51 pm

Re: Uno + NeoPixel 8x8: strandtest doesn't light any leds.

Post by adafruit_support_mike »

Thank you for saving us the first several questions. ;-)

The solder joints for your GND and DATA wires look a bit sparse. Your photo is pretty good, but there's just enough blurring that I can't tell whether I'm seeing a reflection or the shadow of a solder blob that isn't actually connected to the pad.

I can see gold around the rims of the outer two joints though, and that tells me those joints at least need a little more solder. Proper wetting will create a fillet that covers the entire pad. Give each joint a dab of flux, reheat them with the iron, and see if that helps.

For a more detailed reference, here's our tutorial of tips for soldering: http://learn.adafruit.com/adafruit-guid ... lder-joint

mikew6
 
Posts: 44
Joined: Thu Jan 09, 2014 11:51 pm

Re: Uno + NeoPixel 8x8: strandtest doesn't light any leds.

Post by mikew6 »

A good suggestion, thanks! What I didn't mention is that I soldered those leads from the bottom to avoid getting flux splatter on the LEDs. Still, I went back and touched them up from the front side per your instructions, but no improvement in behavior. It's hard to get good pictures up close with my phone, sorry.

I am noticing something a little odd. I added code to toggle the state of the Uno LED on pin 13 each time through loop(). When I power the Uno via USB, the pin 13 led comes on very faintly, until I fire up the Arduino IDE and launch the serial monitor. Then, led 13 glows brightly when lit. I can't think of a reason why it should be dim until the AVR is reset by the serial monitor connection and then burn brightly. In both cases, however, there is no love from the 8x8 panel. If I had time today I would dig out my oscilloscope and try to see if there is 800KHz data on the DIN port, but I'm not going to be able to do that until next weekend.

The Uno performs the blink sketch OK and outputs serial data to the serial monitor, so it can't be completely fried. At this point, I'm not sure if the panel is damaged, if the Uno is damaged, both are damaged, or neither is damaged but they just don't want to talk.

Not sure what to try next. I could order another panel, and find that my old Uno is either incompatible or just defective, and maybe fry another panel. Or, I could order another Uno, and find the panel is fried, and maybe fry a new Uno. Or, I could buy a new one of each and start over. ("try that!" say the adafruit accountants. ;-) ) But, I'm just beside myself as to what could be the cause of the malfunction here; I don't like not knowing. Wish I had some way of verifying the individual pieces. Next week I might also try modifying the neopixel library to force the different versions of the timing sensitive serial code to be used in case my old Uno is running at an unexpected clock speed.

Any other ideas?

Thanks,
Mike

User avatar
adafruit_support_mike
 
Posts: 67446
Joined: Thu Feb 11, 2010 2:51 pm

Re: Uno + NeoPixel 8x8: strandtest doesn't light any leds.

Post by adafruit_support_mike »

mikew6 wrote:("try that!" say the adafruit accountants. ;-) )
Actually, that's our least favorite choice. We want you to buy another Uno and matrix because the ones you have now work and are doing something you don't want to tear down. ;-)

The dim LED on pin 13 does sound a bit strange. Post the code you're using and we'll take a look.

mikew6
 
Posts: 44
Joined: Thu Jan 09, 2014 11:51 pm

Re: Uno + NeoPixel 8x8: strandtest doesn't light any leds.

Post by mikew6 »

OK, thanks for hanging in here with me. :-) I'll post the code I'm using when I get home later this week. It's basically the current version of the strandtest sketch edited in the current version of the arduino IDE (just downloaded the NeoPixel library and the arduino IDE last Saturday) with the serial debugging stuff and the led13 stuff added. But, because the devil is always in the details, I'll attach the actual sketch code from my IDE when I get back to the machine it's on. Please check back in a few days. :-)

Thanks,
Mike

User avatar
adafruit_support_mike
 
Posts: 67446
Joined: Thu Feb 11, 2010 2:51 pm

Re: Uno + NeoPixel 8x8: strandtest doesn't light any leds.

Post by adafruit_support_mike »

Also try it with the strandtest sketch included with the library. That's called 'testing with a known good configuration' and gives us a quick up/down view of whether there's a hardware or software problem.

mikew6
 
Posts: 44
Joined: Thu Jan 09, 2014 11:51 pm

Re: Uno + NeoPixel 8x8: strandtest doesn't light any leds.

Post by mikew6 »

Sorry if I didn't make this clear... I am using the strandtest sketch from the library. I tried it stock, and when it didn't work, I added the LED blink and the serial debugging output. I'll post the code as soon as I can, but 95% of it is going to match the current neopixel library master version.

mikew6
 
Posts: 44
Joined: Thu Jan 09, 2014 11:51 pm

Re: Uno + NeoPixel 8x8: strandtest doesn't light any leds.

Post by mikew6 »

Ok, code attached!

Ok, no it's not! The extension ".ino" is not allowed. Shame, since that is the default extension for the Arduino IDE. I guess I just have to copy and paste the whole thing here. Sorry...

Code: Select all

#include <Adafruit_NeoPixel.h>

#define PIN 6
#define PIXELS 64
int led = 13;
int on = 0;

// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXELS, PIN, NEO_GRB + NEO_KHZ800);

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
 // pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

void setup() {
   //Initialize serial and wait for port to open:
  Serial.begin(9600); 
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
  
  Serial.println("Calling strip.begin..."); 

  strip.begin();

  Serial.println("Calling strip.show..."); 
  strip.show(); // Initialize all pixels to 'off'
}

void loop() {

  Serial.println("Starting loop..."); 

 if(on == 0)
 { 
  digitalWrite(led, HIGH);
  on = 1;
 }
 else
 {
  digitalWrite(led, LOW);
  on = 0;
 }   

  // Some example procedures showing how to display to the pixels:
  Serial.println("Colorwipe red..."); 
  colorWipe(strip.Color(255, 0, 0), 50); // Red
  Serial.println("Colorwipe green..."); 
  colorWipe(strip.Color(0, 255, 0), 50); // Green
  Serial.println("Colorwipe blue..."); 
  colorWipe(strip.Color(0, 0, 255), 50); // Blue

  // Send a theater pixel chase in...
//  Serial.println("TheaterChase White..."); 
//  theaterChase(strip.Color(127, 127, 127), 50); // White
//  Serial.println("TheaterChase Red..."); 
//  theaterChase(strip.Color(127,   0,   0), 50); // Red
//  Serial.println("TheaterChase Blue..."); 
//  theaterChase(strip.Color(  0,   0, 127), 50); // Blue

//  Serial.println("Rainbow..."); 
//  rainbow(20);
//  Serial.println("Rainbow Cycle..."); 
//  rainbowCycle(20);
//  Serial.println("TheaterChaseRainbow..."); 
//  theaterChaseRainbow(50);
}

// Fill the dots one after the other with a color
void colorWipe(uint32_t c, uint8_t wait) {
  for(uint16_t i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, c);
      strip.show();
      delay(wait);
  }
}

void rainbow(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256; j++) {
    for(i=0; i<strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) {
  uint16_t i, j;

  for(j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    for(i=0; i< strip.numPixels(); i++) {
      strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    strip.show();
    delay(wait);
  }
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) {
  for (int j=0; j<10; j++) {  //do 10 cycles of chasing
    for (int q=0; q < 3; q++) {
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, c);    //turn every third pixel on
      }
      strip.show();
     
      delay(wait);
     
      for (int i=0; i < strip.numPixels(); i=i+3) {
        strip.setPixelColor(i+q, 0);        //turn every third pixel off
      }
    }
  }
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) {
  for (int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    for (int q=0; q < 3; q++) {
        for (int i=0; i < strip.numPixels(); i=i+3) {
          strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
        }
        strip.show();
       
        delay(wait);
       
        for (int i=0; i < strip.numPixels(); i=i+3) {
          strip.setPixelColor(i+q, 0);        //turn every third pixel off
        }
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if(WheelPos < 170) {
   WheelPos -= 85;
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}


User avatar
adafruit_support_mike
 
Posts: 67446
Joined: Thu Feb 11, 2010 2:51 pm

Re: Uno + NeoPixel 8x8: strandtest doesn't light any leds.

Post by adafruit_support_mike »

Okay, nothing out of the ordinary there.

WRT LED 13, how does your Arduino receive power when the USB cable is disconnected?

WRT the matrix, try connecting the DATA signal to the DI pin of one of the pixels further in:
ws2811.jpg
ws2811.jpg (23.72 KiB) Viewed 820 times
Each pixel acts as a signal repeater, so if the first one is dead, none of the rest will get any signal. You've followed all our best practices, but there's still a chance you have a dead one. If we can show that's the case, we'll get you a replacement.

mikew6
 
Posts: 44
Joined: Thu Jan 09, 2014 11:51 pm

Re: Uno + NeoPixel 8x8: strandtest doesn't light any leds.

Post by mikew6 »

WRT applying signal to DIN of LED #2... Holy Cow that thing is bright! That was it, dead first pixel! I am really, really surprised by that being the case, but I am SO glad the mystery is solved! :D 8) :) :o

I am assuming that the chances of that pixel being dead when the board shipped are near zero... if it was me that managed to kill it, I'll replace it. :oops:

Are things things hand-un-solderable without a hot air pencil? I recently assembled one of Aki's Aurora mini 18 kits, so I have at least that amount of smt soldering experience, but I've never tried to remove a part with leads underneath it.
neopixel_8x8-crop-small.jpg
neopixel_8x8-crop-small.jpg (33.27 KiB) Viewed 811 times
WRT LED 13, I haven't powered the arduino except through the USB connection lately. I think I have a 9V switching wall wart around here somewhere, but haven't seen it in a while. FWIW, the NeoPixel grid updates regardless of the brightness level of LED 13.

Thanks so much for your help and advice! Looking forward to coding my first idea for the 8x8 grid...

User avatar
adafruit_support_mike
 
Posts: 67446
Joined: Thu Feb 11, 2010 2:51 pm

Re: Uno + NeoPixel 8x8: strandtest doesn't light any leds.

Post by adafruit_support_mike »

All right! Glad to hear we have some basic blinky going.. ;-)

WRT removing the dead pixel, give it a try. Removing SMT components is a lot easier when you don't have to care if the part gets chewed up in the process. Use a piece of solder wick or multistrand wire to pull as much solder away from the joints as you can, then lay your iron so you get as much contact as possible with all the pins on one side and try to lever that side up. There's a twist-and-lift motion kind of like scooping ice cream that usually works. From there getting the rest of the pins loose should be fairly easy.

If that doesn't work for you, flush cutters are your next best friend. Clip all the leads as close to the PCB as possble, and you should be able to lift the body of the chip out without actually unsoldering anything. Then you can remove the pins from the pads one at a time.

If it just doesn't work, or something goes wrong, post back here and we'll get you a replacement.

mikew6
 
Posts: 44
Joined: Thu Jan 09, 2014 11:51 pm

Re: Uno + NeoPixel 8x8: strandtest doesn't light any leds.

Post by mikew6 »

OK! I've got good news and bad news.

The good news is that we have a little more than basic blinky going here now. Video link below. :D

http://youtu.be/7H1_gz_Z_ZA

Now the bad news. I managed to get the first LED off, but I somehow lifted pad #2 off the board doing it. :cry: It was the hardest to reach, behind the resistor and all. The pad is still attached to the trace, so it may still be possible just to solder a new LED down on it and have the other 5 pads hold it in place.

SO! Some followup questions to further this project: Is there a simple "programmed arduino carrier" board I can pop the programmed chip into and embed it in the project enclosure? Something that has just the required support components for running the chip, not programming it or talking to it? No sense putting an entire Uno in the project. At the moment, it looks like the Micro is the cheapest whole board with enough clock & RAM ($23), but the 328P by itself is only $6. It looks like, with the Micro's 2.5KB RAM, I should just be able to drive four 8x8 grids with my existing algorithm approach. Any less RAM and I'd have to start trading time for RAM, but there are only a few opportunities to do that and it makes the code less flexible.

This little board is great! I love it. Thanks for all your help!

User avatar
adafruit_support_mike
 
Posts: 67446
Joined: Thu Feb 11, 2010 2:51 pm

Re: Uno + NeoPixel 8x8: strandtest doesn't light any leds.

Post by adafruit_support_mike »

Regardless of whether you can get a new pixel to work on your existing matrix, let's get you another one. The dead LED happened even though followed our Best Practices, and you've made a serious effort to fix it on your own. That's good enough for me.

Send a note to [email protected] with a link to this thread and they'll get you a new matrix.

WRT a dedicated NeoPixel driver, you have several options. Any of the small breakout boards will work, but you can also use a plain microcontroller. The code you have now runs on an ATmega328P (the Uno is mostly a convenient breakout for that chip), so in theory you could pull the chip out of your Uno and wire it directly into a project.

In practice it isn't quite that simple. The Uno provides an external oscillator and any chip that runs in the board is programmed to use it. The ATmega328P has an internal oscillator and can run from that, but you need to change the chip's 'fuse bits' to make that work. The Arduino IDE can't do that directly, but you can program an Arduino to act like an ICSP programmer. This page probably has the most complete description of how to make a standalone chip work using the Arduino as the programmer: http://letsmakerobots.com/node/31379

There's a bit of a learning curve, but programming chips isn't too hard once you get used to it. We have ATmega328Ps already programmed with a bootloader here: http://www.adafruit.com/products/123 and stickers you can put on the chip to keep the pins straight here: http://www.adafruit.com/products/601

mikew6
 
Posts: 44
Joined: Thu Jan 09, 2014 11:51 pm

Re: Uno + NeoPixel 8x8: strandtest doesn't light any leds.

Post by mikew6 »

Thanks very much! I've emailed support.

Also, thanks for the detailed info on AVR embedding options. I'll have to take a look at those. When I get the project finished and presentable, I'll let you know. Maybe someone will find the code useful.

Thanks again,
Mike

Locked
Please be positive and constructive with your questions and comments.

Return to “Arduino”