Hallo zusammen,
hoffe einer kann mir helfen bei meinem ca. 8,65m langem FCOB LED RGBW LED Streifen. IC WS2814, arbeitet mit 24V. Einspeisung am Anfang und am Ende des Streifens.
Was ich noch nicht ausprobiert habe ist die Einspeisung nach 5m. Macht das einen Unterschied?
Das Problem ist, dass abhängig der Helligkeit, also damit auch der Leistungsaufnahme, einzelne Segmente nicht den korrekten Wert annehmen sondern eher nach Zufall, wodurch das ganze dann flackert. Bei 5m Länge ist das kein Problem.
Ich dachte eigentlich dass das Signal von IC zu IC verstärkt wird, jedoch scheint hier was nicht zu passen. Hat einer eine Idee was das Problem sein könnte?
1000uF hängt zwischen +/-. Vorwiderstand -330Ohm- hängt vor dem DI. Kommunikationsleiter relativ kurz.
Anbei ein Foto und Video von dem Verhalten.
20240129_204943.zip (7.0 MB)
Der Code ist nichts besonderes.
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#define PIN 6
// 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)
// NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(121, PIN, NEO_RGBW + NEO_KHZ800); //70 entspricht 5m FCOP RGBW
// 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.
// Tasterdefinition
int ButtonOff=46; //Schaltet LED an oder aus
int ButtonSwitch=42; //Leuchtstufen durch
// Fortlaufende Variable
int LEDtoggle=0; //0:OFF; .... Definition siehe Code
void setup() {
// This is for Trinket 5V 16MHz, you can remove these three lines if you are not using a Trinket
#if defined (__AVR_ATtiny85__)
if (F_CPU == 16000000) clock_prescale_set(clock_div_1);
#endif
// End of trinket special code
strip.begin();
strip.show(); // Initialize all pixels to 'off'
Serial.begin(9600);
pinMode(ButtonOff,INPUT);
pinMode(ButtonSwitch,INPUT);
}
void loop() {
if (digitalRead(ButtonOff) == HIGH){
Serial.println("Button OFF pressed");
colorWipe(strip.Color(0, 0, 0, 0), 15); // LEDs OFF
LEDtoggle=0;
delay(300);
}
if (digitalRead(ButtonSwitch) == HIGH && LEDtoggle == 0){
Serial.println("Button Switch pressed = 0");
colorWipe(strip.Color(20, 0, 0, 0), 15); // Green light
LEDtoggle = 1;
delay(300);
}
else if (digitalRead(ButtonSwitch) == HIGH && LEDtoggle == 1){
Serial.println("Button Switch pressed = 1");
colorWipe(strip.Color(75, 0, 0, 0), 15); // Green
LEDtoggle = 2;
delay(300);
}
else if (digitalRead(ButtonSwitch) == HIGH && LEDtoggle == 2){
Serial.println("Button Switch pressed = 2");
colorWipe(strip.Color(127, 0, 0, 0), 15); // Green
LEDtoggle = 3;
delay(300);
}
else if (digitalRead(ButtonSwitch) == HIGH && LEDtoggle == 3){
Serial.println("Button Switch pressed = 3");
colorWipe(strip.Color(255, 0, 0, 0), 15); // Green
LEDtoggle = 4;
delay(300);
}
else if (digitalRead(ButtonSwitch) == HIGH && LEDtoggle == 4){
Serial.println("Button Switch pressed = 4");
colorWipe(strip.Color(0, 127, 0, 0), 15); // Red light
LEDtoggle = 5;
delay(300);
}
else if (digitalRead(ButtonSwitch) == HIGH && LEDtoggle == 5){
Serial.println("Button Switch pressed = 5");
colorWipe(strip.Color(0, 255, 0, 0), 15); // Red
LEDtoggle = 6;
delay(300);
}
else if (digitalRead(ButtonSwitch) == HIGH && LEDtoggle == 6){
Serial.println("Button Switch pressed = 6");
colorWipe(strip.Color(0, 0, 127, 0), 15); // Blue light
LEDtoggle = 7;
delay(300);
}
else if (digitalRead(ButtonSwitch) == HIGH && LEDtoggle == 7){
Serial.println("Button Switch pressed = 7");
colorWipe(strip.Color(0, 0, 255, 0), 15); // Blue
LEDtoggle = 8;
delay(300);
}
else if (digitalRead(ButtonSwitch) == HIGH && LEDtoggle == 8){
Serial.println("Button Switch pressed = 8");
colorWipe(strip.Color(0, 0, 0, 127), 15); // White light
LEDtoggle = 9;
delay(300);
}
else if (digitalRead(ButtonSwitch) == HIGH && LEDtoggle == 9){
Serial.println("Button Switch pressed = 9");
colorWipe(strip.Color(0, 0, 0, 255), 15); // White
LEDtoggle = 10;
delay(300);
}
else if (digitalRead(ButtonSwitch) == HIGH && LEDtoggle == 10){
Serial.println("Button Switch pressed = 10");
colorWipe(strip.Color(127, 127, 127, 0), 15); // White RGB light
LEDtoggle = 11;
delay(300);
}
else if (digitalRead(ButtonSwitch) == HIGH && LEDtoggle == 11){
Serial.println("Button Switch pressed = 11");
colorWipe(strip.Color(255, 255, 255, 0), 15); // White RGB
LEDtoggle = 12;
delay(300);
}
else if (digitalRead(ButtonSwitch) == HIGH && LEDtoggle == 12){
Serial.println("Button Switch pressed = 12");
colorWipe(strip.Color(255, 255, 255, 255), 15); // White Max
LEDtoggle = 13;
delay(300);
}
else if (digitalRead(ButtonSwitch) == HIGH && LEDtoggle == 13){
Serial.println("Button Switch pressed = 13");
colorWipe(strip.Color(0, 255, 165, 0), 15); // Orange
LEDtoggle = 14;
delay(300);
}
else if (digitalRead(ButtonSwitch) == HIGH && LEDtoggle == 14){
Serial.println("Button Switch pressed = 14");
colorWipe(strip.Color(0, 255, 215, 0), 25); // Gold
LEDtoggle = 0;
delay(300);
}
}
// 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);
}
}