DMX Neopixel flickering.

Hi,

Im trying to make dmx-controllable neopixelstrips. Im using 1 meter/60ppm and currently a teensy++ (started out with a UNO but fried that one ..dont ask!).

Decoding the DMX through a SN75176.

Everything is working but its flickering pretty badly. Im guessing it has to do with the refresh rates. Is there anyway to manipulate that or is there a better way?

The only thing i found is that teensy allors me to put the CPU at 16 or 8MHz. At 16MHz its no flicker but it only pushes the signal about half of my ledstrip. 8MHz pushes the signal all the way but its flickering alot.

Been googling like crazy and seems like there is alot of similar projects but cant find any fixes.

Thanks! (Dont have access to the code atm but will post tomorrow if anyone likes to see.)

Code and schematic would help us. As it stands your description doesn't make much sense.

Grumpy_Mike:
Code and schematic would help us. As it stands your description doesn't make much sense.

Try here.
https://forum.arduino.cc/index.php?topic=492389.0
or here.
https://forum.arduino.cc/index.php?topic=492493.0
Leo..

I see.
In one post he said:-

All is good except that the neopixel is flickering. I guess that has to do with the 250mhz DMX signal and 800hz neopixel.

Getting very mixed up here.
DMX baud rate is 250K baud
The neopixel data rate is 800Khz.

And the answer is no it is not.

Still not seen a schematic in any post though.

Here's the code and a drawing of the wiring.

 #include <DMXSerial.h>
#include <Adafruit_NeoPixel.h>
#define PIXEL_COUNT_OUTPUT1 60
#define PIXEL_PIN 27

Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(PIXEL_COUNT_OUTPUT1, PIXEL_PIN,NEO_GRB + NEO_KHZ800); //Information about the Neopixelstrip.

void setup () {
  DMXSerial.init(DMXReceiver);

  pinMode(PIXEL_PIN,   OUTPUT); // sets the digital pin as output
 
  
strip1.begin(); //Start sending.
strip1.clear();
strip1.show(); //All pixels at 0.

}


void loop() {

uint32_t red = strip1.Color(255, 0, 0);
uint32_t green = strip1.Color(0, 255, 0);
uint32_t blue = strip1.Color(0, 0, 255);
uint32_t none = strip1.Color(0, 0, 0); //Just some default colors for easy access.



  // Calculate how long no data backet was received
  unsigned long lastPacket = DMXSerial.noDataSince();

  if (lastPacket < 500) {
    // read recent DMX values and set values.
    
    
    strip1.setPixelColor(0, DMXSerial.read(1), DMXSerial.read(2), DMXSerial.read(3)); //Read DMX Address 1(red), 2(green), 3(blue) at pixel 1.
    strip1.setPixelColor(1, DMXSerial.read(1), DMXSerial.read(2), DMXSerial.read(3));
    strip1.setPixelColor(2, DMXSerial.read(1), DMXSerial.read(2), DMXSerial.read(3));
    strip1.setPixelColor(3, DMXSerial.read(1), DMXSerial.read(2), DMXSerial.read(3));
    strip1.setPixelColor(4, DMXSerial.read(1), DMXSerial.read(2), DMXSerial.read(3));
    strip1.setPixelColor(5, DMXSerial.read(1), DMXSerial.read(2), DMXSerial.read(3));
    
    strip1.setPixelColor(6, DMXSerial.read(4), DMXSerial.read(5), DMXSerial.read(6));
    strip1.setPixelColor(7, DMXSerial.read(4), DMXSerial.read(5), DMXSerial.read(6));
    strip1.setPixelColor(8, DMXSerial.read(4), DMXSerial.read(5), DMXSerial.read(6));
    strip1.setPixelColor(9, DMXSerial.read(4), DMXSerial.read(5), DMXSerial.read(6));
    strip1.setPixelColor(10, DMXSerial.read(4), DMXSerial.read(5), DMXSerial.read(6));
    strip1.setPixelColor(11, DMXSerial.read(4), DMXSerial.read(5), DMXSerial.read(6));
    
    strip1.setPixelColor(12, DMXSerial.read(7), DMXSerial.read(8), DMXSerial.read(9));
    strip1.setPixelColor(13, DMXSerial.read(7), DMXSerial.read(8), DMXSerial.read(9));
    strip1.setPixelColor(14, DMXSerial.read(7), DMXSerial.read(8), DMXSerial.read(9));
    strip1.setPixelColor(15, DMXSerial.read(7), DMXSerial.read(8), DMXSerial.read(9));
    strip1.setPixelColor(16, DMXSerial.read(7), DMXSerial.read(8), DMXSerial.read(9));
    strip1.setPixelColor(17, DMXSerial.read(7), DMXSerial.read(8), DMXSerial.read(9));
    
    strip1.setPixelColor(18, DMXSerial.read(10), DMXSerial.read(11), DMXSerial.read(12));
    strip1.setPixelColor(19, DMXSerial.read(10), DMXSerial.read(11), DMXSerial.read(12));
    strip1.setPixelColor(20, DMXSerial.read(10), DMXSerial.read(11), DMXSerial.read(12));
    strip1.setPixelColor(21, DMXSerial.read(10), DMXSerial.read(11), DMXSerial.read(12));
    strip1.setPixelColor(22, DMXSerial.read(10), DMXSerial.read(11), DMXSerial.read(12));
    strip1.setPixelColor(23, DMXSerial.read(10), DMXSerial.read(11), DMXSerial.read(12));
    
    strip1.setPixelColor(24, DMXSerial.read(13), DMXSerial.read(14), DMXSerial.read(15));
    strip1.setPixelColor(25, DMXSerial.read(13), DMXSerial.read(14), DMXSerial.read(15));
    strip1.setPixelColor(26, DMXSerial.read(13), DMXSerial.read(14), DMXSerial.read(15));
    strip1.setPixelColor(27, DMXSerial.read(13), DMXSerial.read(14), DMXSerial.read(15));
    strip1.setPixelColor(28, DMXSerial.read(13), DMXSerial.read(14), DMXSerial.read(15));
    strip1.setPixelColor(29, DMXSerial.read(13), DMXSerial.read(14), DMXSerial.read(15));
    
    strip1.setPixelColor(30, DMXSerial.read(16), DMXSerial.read(17), DMXSerial.read(18));
    strip1.setPixelColor(31, DMXSerial.read(16), DMXSerial.read(17), DMXSerial.read(18));
    strip1.setPixelColor(32, DMXSerial.read(16), DMXSerial.read(17), DMXSerial.read(18));
    strip1.setPixelColor(33, DMXSerial.read(16), DMXSerial.read(17), DMXSerial.read(18));
    strip1.setPixelColor(34, DMXSerial.read(16), DMXSerial.read(17), DMXSerial.read(18));
    strip1.setPixelColor(35, DMXSerial.read(16), DMXSerial.read(17), DMXSerial.read(18));
    
    strip1.setPixelColor(36, DMXSerial.read(19), DMXSerial.read(20), DMXSerial.read(21));
    strip1.setPixelColor(37, DMXSerial.read(19), DMXSerial.read(20), DMXSerial.read(21));
    strip1.setPixelColor(38, DMXSerial.read(19), DMXSerial.read(20), DMXSerial.read(21));
    strip1.setPixelColor(39, DMXSerial.read(19), DMXSerial.read(20), DMXSerial.read(21));
    strip1.setPixelColor(40, DMXSerial.read(19), DMXSerial.read(20), DMXSerial.read(21));
    strip1.setPixelColor(41, DMXSerial.read(19), DMXSerial.read(20), DMXSerial.read(21));
    
    strip1.setPixelColor(42, DMXSerial.read(22), DMXSerial.read(23), DMXSerial.read(24));
    strip1.setPixelColor(43, DMXSerial.read(22), DMXSerial.read(23), DMXSerial.read(24));
    strip1.setPixelColor(44, DMXSerial.read(22), DMXSerial.read(23), DMXSerial.read(24));
    strip1.setPixelColor(45, DMXSerial.read(22), DMXSerial.read(23), DMXSerial.read(24));
    strip1.setPixelColor(46, DMXSerial.read(22), DMXSerial.read(23), DMXSerial.read(24));
    strip1.setPixelColor(47, DMXSerial.read(22), DMXSerial.read(23), DMXSerial.read(24));
    
    strip1.setPixelColor(48, DMXSerial.read(25), DMXSerial.read(26), DMXSerial.read(27));
    strip1.setPixelColor(49, DMXSerial.read(25), DMXSerial.read(26), DMXSerial.read(27));
    strip1.setPixelColor(50, DMXSerial.read(25), DMXSerial.read(26), DMXSerial.read(27));
    strip1.setPixelColor(51, DMXSerial.read(25), DMXSerial.read(26), DMXSerial.read(27));
    strip1.setPixelColor(52, DMXSerial.read(25), DMXSerial.read(26), DMXSerial.read(27));
    strip1.setPixelColor(53, DMXSerial.read(25), DMXSerial.read(26), DMXSerial.read(27));
    
    strip1.setPixelColor(54, DMXSerial.read(28), DMXSerial.read(29), DMXSerial.read(30));
    strip1.setPixelColor(55, DMXSerial.read(28), DMXSerial.read(29), DMXSerial.read(30));
    strip1.setPixelColor(56, DMXSerial.read(28), DMXSerial.read(29), DMXSerial.read(30));
    strip1.setPixelColor(57, DMXSerial.read(28), DMXSerial.read(29), DMXSerial.read(30));
    strip1.setPixelColor(58, DMXSerial.read(28), DMXSerial.read(29), DMXSerial.read(30));
    strip1.setPixelColor(59, DMXSerial.read(28), DMXSerial.read(29), DMXSerial.read(30));
    
    
    
    strip1.show(); //Send to pixels.
    

  } else {
    // Show red on 3 first pixels when no data was received since 5 seconds or more.
    

strip1.setPixelColor(0, red);
strip1.setPixelColor(1, red);
strip1.setPixelColor(2, red);

strip1.show();
  }

  
}

Ok that is not the way to post pictures here.
Attach them, we don't like going off site here.

Now you seem to be using a Teensy, they are 3V3 are they not? And the unmarked chip at the top what is that and is it feeding 5V into a 3V3 system?

Grumpy_Mike:
Ok that is not the way to post pictures here.
Attach them, we don't like going off site here.

Now you seem to be using a Teensy, they are 3V3 are they not? And the unmarked chip at the top what is that and is it feeding 5V into a 3V3 system?

Not sure what you mean with 3v3, if its 3.3v then yes. But from the pinout sheet i got when buying the board its specced 5v and reading on google it seems that indeed its a 3.3v but its tolerant to 5v. I see your point anyhow.

The chip is a SN75176 as written erlier.

Cross-posting to confuse everybody, and drip-feeding us with information.
Start with the basics.
Is your 5volt power supply able to deliver the 3.6Amp needed for 60 Neopixels.
e.g. a supply going into protection (pumping) could explain things.
I don't see a supply buffer cap across the neopixel strip, or a terminating resistor.
What is the wire distance between strip and Arduino. Post pictures.
Leo..

Wawa:
Cross-posting to confuse everybody, and drip-feeding us with information.
Start with the basics.
Is your 5volt power supply able to deliver the 3.6Amp needed for 60 Neopixels.
e.g. a supply going into protection (pumping) could explain things.
I don't see a supply buffer cap across the neopixel strip, or a terminating resistor.
What is the wire distance between strip and Arduino. Post pictures.
Leo..

My 5v power supply delivers 2.4A, which should be just on the limit for 2 colors of 60 pixels at 100%. Im aware that i can't turn all colors on full at once so im testing by running only 1 color.

I've got no buffer caps or termination, is that something you recommend putting in?

Wires between Teensy++ and Neopixels are about 20cm.

I've got no buffer caps or termination, is that something you recommend putting in?

Yes very strongly recommend.
Also a 0.1uF ceramic cap on power and ground of your differential buffer chip.

Sorry that Teensy is 5V so ignore what I said about that.

I have fixed the flickering issue in my fork of the DMXSerial libary.