WS2811 LEDS tuen nix

Ich habe ein kleines Problem:
Ich möchte gerne folgendes nachbauen:

Dafür habe ich die verlinkten, bzw. baugleiche LED Ketten besorgt.
Nun wollte ich diese testen, und habe von der "NeoPixel" Library mal das Programm "strandtest" geladen, was funktionieren solte:

Als Microcontroller benutze ich folgenden Arduino Klon (hat bisher immer ganz gut funktioniert):
https://www.amazon.de/gp/product/B01MA5BLQI/ref=ppx_yo_dt_b_asin_title_o03_s00?ie=UTF8&psc=1
Ich habe alles wie in dem zweiten verlinkten Video angeschlossen und eingestellt, und es passiert..... nichts......
Keine Compilerfehler, Upload klappt auch, LEDs bleiben aus. Externes Netzteil für die LEDs habe ich auch. Zum Testen habe ich aber mal nur 50 angeschlossen, also eins von diesen "Knäuls".
Hier ist der Programmcode im Original zu finden:

Haat jemand ne Idee, warum das nicht funktioniert?

EDIT: Link zu den LEDs:

Als erstes gib uns mal einen Link zu nden Leds, die Du real gekauft hast.

Gruß Tommy

Habs unten drangehängt, tut mir leid, habe ich vergessen :slight_smile:

Hi

Habe Da eine Vermutung: Bei der LED-Kette sind die Stecker für IN und OUT vertauscht - mit etwas 'Glück' hast Du Dir die letzte LED damit gehimmelt.
Wird der Arduino von den LEDs aus versorgt?
Wenn nicht - sind die GND untereinander verbunden?
Hast Du ggf. die Datenleitung bestromt, bevor Vdd bestromt wurde? Dann ist die erste LED gestorben - dadurch werden die Anderen auch nicht mehr befehligt.

Allerdings sollten die LEDs zumindest beim Spannung anlegen teilweise 'irgend etwas machen'.

MfG

Ok, so viel Fragen:
Der Reihe nach:

  1. IN und OUT sind nicht vertauscht, andersrum gehts auch nicht.
  2. Der Arduino wird einzeln versorgt, und GND ist verbunden.
  3. Nope, immer erst VCC mit Saft belegt, dann den Arduino eingeschaltet.
  4. Beim Spannung Anlegen passiert nix, beim Spannung Wegnehmen leuchten die manchmal in verschiedensten Farben.
  5. Ne normale LED mit Widerstand an den Output Pin vom Arduino gehängt, passiert nix wenn das Programm läuft, Oszilloskop und Ähnliches habe ich leider nicht.
  6. VCC und GND gehen bis hinten durch, kommen fast 5V an.

Gruß TNT2k

  1. kann nicht funktioniren

  2. Schneide das erste LED weg und schalte zur Sicherheit einen 330 Ohm Widerstand zwischen dem Mega Pin und DI des Ledstreifens.

  3. nicht immer ist das so eindeutig.

  4. und 5) gut

  5. will nicht viel heißen.
    Grüße Uwe

Ok, Update:

Habe jetzt mal den Microcontroller gegen einen Raspberry Pi getauscht. Gleiches Setup, gleiche Bibliothek (andere Prorammiersprache), und.......... es funktioniert.

  1. kann nicht funktioniren

Warum sollte ne normale rote LED nicht funktionieren? Sie tut es nämlich. Es geht dabei nur darum, dass sie mir zeigt, ob irgendwas übertragen wird, nicht was übertragen wird :slight_smile:

  1. Schneide das erste LED weg und schalte zur Sicherheit einen 330 Ohm Widerstand zwischen dem Mega Pin und DI des Ledstreifens.

Warum? Geht doch über den Raspberry. Widerstand brauchts irgendwie auch nicht, laut Anleitung ist der auch optional.

  1. nicht immer ist das so eindeutig.

Naja, die extra Anschlusskabel für das extra Netzteil am Ende anzubringen erscheint nicht sonderlich logisch..... Außerdem habe ich es ja in beide Richtungen versucht......

Frage ist jetzt nur noch, warum der Microcontroller das nicht auf die Reihe kriegt.....

Gruß TNT2k

Zum Schutz schalte den Widerstand rein.

Warum sollte ne normale rote LED nicht funktionieren? Sie tut es nämlich. Es geht dabei nur darum, dass sie mir zeigt, ob irgendwas übertragen wird, nicht was übertragen wird

Weil Du daten mit einem bestimmten Protokoll schickst. Eine LED aber leuchtet wenn Spannung durch sie fließt, also egal ob der Datenstrom richtig oder falsch ist.

Wenns beim Raspberry funktioniert beim Arduino nicht dann hast Du entweder einen Verdrahtungsfehler oder einen Fehler im Sketch.
Grüße Uwe

TNT2k:
Frage ist jetzt nur noch, warum der Microcontroller das nicht auf die Reihe kriegt…

Echt jetzt ?
Woher sollen wir das Wissen ?

Warum zeigst du uns nicht deinen verwendeten Sketch ?
Aber in Code-Tags setzen.
Und dein Schaltbild, wie du alles angeschlossen hast.

Sketch ist im 1. Post verlinkt, und Schaltbild in einem der Videos… Zumindest kann man das daraus erahnen, ich wüsste nämlich nicht, wie ich mit dem Computer nen Schaltbild hinrkriege, oder eins von Hand in vernünftiger Qualität hier reingestellt bekomme…

TNT2k:
Sketch ist im 1. Post verlinkt, und Schaltbild in einem der Videos.... Zumindest kann man das daraus erahnen, ich wüsste nämlich nicht, wie ich mit dem Computer nen Schaltbild hinrkriege, oder eins von Hand in vernünftiger Qualität hier reingestellt bekomme.....

Du hast nicht verstanden, daß wir nicht danach suchen wollen und zum Schluß noch das Falsche nehmen.
Kanns Du uns bitte den Sketch und die Schaltung geben, die DU verwendest hast, und nicht die von der Du das genommen haben willst.
Ein Foto wo man die Verdrahtung sieht hilft auch.
Grüße Uwe

TNT2k:
Sketch ist im 1. Post verlinkt, und Schaltbild in einem der Videos… Zumindest kann man das daraus erahnen, ich wüsste nämlich nicht, wie ich mit dem Computer nen Schaltbild hinrkriege, oder eins von Hand in vernünftiger Qualität hier reingestellt bekomme…

Uwe hat es ja schon geschrieben.

Wir wollen deinen Sketch sehen, nicht einen so wie es aussehen könnte.
Und Schaltbild geht auch auf Papier mit Bleistift gezeichnet und dann fotografiert.

Dann sehen wir mehr und auch evtl. deine Fehler.

Also der Github Link zeigt genau auf die Datei, die ich auch verwende. Daran habe ich nix geändert. Einfach nur Copy&Paste in die Arduino IDE.

// A basic everyday NeoPixel strip test program.

// NEOPIXEL BEST PRACTICES for most reliable operation:
// - Add 1000 uF CAPACITOR between NeoPixel strip's + and - connections.
// - MINIMIZE WIRING LENGTH between microcontroller board and first pixel.
// - NeoPixel strip's DATA-IN should pass through a 300-500 OHM RESISTOR.
// - AVOID connecting NeoPixels on a LIVE CIRCUIT. If you must, ALWAYS
//   connect GROUND (-) first, then +, then data.
// - When using a 3.3V microcontroller with a 5V-powered NeoPixel strip,
//   a LOGIC-LEVEL CONVERTER on the data line is STRONGLY RECOMMENDED.
// (Skipping these may work OK on your workbench but can fail in the field)

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

// Which pin on the Arduino is connected to the NeoPixels?
// On a Trinket or Gemma we suggest changing this to 1:
#define LED_PIN    6

// How many NeoPixels are attached to the Arduino?
#define LED_COUNT 60

// Declare our NeoPixel strip object:
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
// Argument 1 = Number of pixels in NeoPixel strip
// Argument 2 = Arduino pin number (most are valid)
// Argument 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)


// setup() function -- runs once at startup --------------------------------

void setup() {
  // These lines are specifically to support the Adafruit Trinket 5V 16 MHz.
  // Any other board, you can remove this part (but no harm leaving it):
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  // END of Trinket-specific code.

  strip.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  strip.show();            // Turn OFF all pixels ASAP
  strip.setBrightness(50); // Set BRIGHTNESS to about 1/5 (max = 255)
}


// loop() function -- runs repeatedly as long as board is on ---------------

void loop() {
  // Fill along the length of the strip in various colors...
  colorWipe(strip.Color(255,   0,   0), 50); // Red
  colorWipe(strip.Color(  0, 255,   0), 50); // Green
  colorWipe(strip.Color(  0,   0, 255), 50); // Blue

  // Do a theater marquee effect in various colors...
  theaterChase(strip.Color(127, 127, 127), 50); // White, half brightness
  theaterChase(strip.Color(127,   0,   0), 50); // Red, half brightness
  theaterChase(strip.Color(  0,   0, 127), 50); // Blue, half brightness

  rainbow(10);             // Flowing rainbow cycle along the whole strip
  theaterChaseRainbow(50); // Rainbow-enhanced theaterChase variant
}


// Some functions of our own for creating animated effects -----------------

// Fill strip pixels one after another with a color. Strip is NOT cleared
// first; anything there will be covered pixel by pixel. Pass in color
// (as a single 'packed' 32-bit value, which you can get by calling
// strip.Color(red, green, blue) as shown in the loop() function above),
// and a delay time (in milliseconds) between pixels.
void colorWipe(uint32_t color, int wait) {
  for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
    strip.setPixelColor(i, color);         //  Set pixel's color (in RAM)
    strip.show();                          //  Update strip to match
    delay(wait);                           //  Pause for a moment
  }
}

// Theater-marquee-style chasing lights. Pass in a color (32-bit value,
// a la strip.Color(r,g,b) as mentioned above), and a delay time (in ms)
// between frames.
void theaterChase(uint32_t color, int wait) {
  for(int a=0; a<10; a++) {  // Repeat 10 times...
    for(int b=0; b<3; b++) { //  'b' counts from 0 to 2...
      strip.clear();         //   Set all pixels in RAM to 0 (off)
      // 'c' counts up from 'b' to end of strip in steps of 3...
      for(int c=b; c<strip.numPixels(); c += 3) {
        strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
      }
      strip.show(); // Update strip with new contents
      delay(wait);  // Pause for a moment
    }
  }
}

// Rainbow cycle along whole strip. Pass delay time (in ms) between frames.
void rainbow(int wait) {
  // Hue of first pixel runs 5 complete loops through the color wheel.
  // Color wheel has a range of 65536 but it's OK if we roll over, so
  // just count from 0 to 5*65536. Adding 256 to firstPixelHue each time
  // means we'll make 5*65536/256 = 1280 passes through this outer loop:
  for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 256) {
    for(int i=0; i<strip.numPixels(); i++) { // For each pixel in strip...
      // Offset pixel hue by an amount to make one full revolution of the
      // color wheel (range of 65536) along the length of the strip
      // (strip.numPixels() steps):
      int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
      // strip.ColorHSV() can take 1 or 3 arguments: a hue (0 to 65535) or
      // optionally add saturation and value (brightness) (each 0 to 255).
      // Here we're using just the single-argument hue variant. The result
      // is passed through strip.gamma32() to provide 'truer' colors
      // before assigning to each pixel:
      strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
    }
    strip.show(); // Update strip with new contents
    delay(wait);  // Pause for a moment
  }
}

// Rainbow-enhanced theater marquee. Pass delay time (in ms) between frames.
void theaterChaseRainbow(int wait) {
  int firstPixelHue = 0;     // First pixel starts at red (hue 0)
  for(int a=0; a<30; a++) {  // Repeat 30 times...
    for(int b=0; b<3; b++) { //  'b' counts from 0 to 2...
      strip.clear();         //   Set all pixels in RAM to 0 (off)
      // 'c' counts up from 'b' to end of strip in increments of 3...
      for(int c=b; c<strip.numPixels(); c += 3) {
        // hue of pixel 'c' is offset by an amount to make one full
        // revolution of the color wheel (range 65536) along the length
        // of the strip (strip.numPixels() steps):
        int      hue   = firstPixelHue + c * 65536L / strip.numPixels();
        uint32_t color = strip.gamma32(strip.ColorHSV(hue)); // hue -> RGB
        strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
      }
      strip.show();                // Update strip with new contents
      delay(wait);                 // Pause for a moment
      firstPixelHue += 65536 / 90; // One cycle of color wheel over 90 frames
    }
  }
}

Hier ist ein Bild von der Schaltung. Damit man es besser erkennen kann, habe ich das externe Netteil weggelassen, also zur Erklärung:
Schwarz zum externen -
Rot zum externen +
Externes Netzteil liefert 5V und ausreichend Ampere (ich habe die genaue Grenze gerade nicht im Kopf, aber >2A), genutzt werden ungefähr 0,02 A (schwankt zwischen 0,02 und 0,03 A).

Arduino wird über USB mit dem Computer USB 3 Anschluss verbunden.

Den Rest könnt ihr hoffentlich erkennen…

Wie bereits erwähnt funktioniert der exakt gleiche Aufbau beim Raspberry Pi problemlos, d.h. die Verkabelung sollte stimmen, und die LEDs funktionieren auch.

Gruß TNT2k

Hi

Der Arduino bekommt aber schon Strom?
Sonst: So sieht der provisorische Aufbau auch bei mir aus - und klappte bisher immer problemlos.

Bei mir kompiliert der Sketch nicht - meine 'Adafruit-Neopixel' hat keine Methode 'gamma32'.
Welche Version benutzt Du? (oha, selber 1.1.6 ... schon etwas älter :slight_smile: )
Kompiliert der Sketch überhaupt bei Dir?
Wenn nämlich nicht, stellt sich ebenfalls dieses Bild: Nichts geht.

MfG

das rote kabel das in PIN6 steckt, geht in deine Kette in welchen Pin?

(sketch compiliert mit ein paar Warnings)

Hallo,

schon mal mit FastLED probiert ? und das das einfache Bilink Beispiel.

Heinz

Der Arduino kriegt vom Rechner über USB Strom. Wie ich in den Anmerkungen zu dem Bild gesagt hatte, fehlen der Rechner und das externe Netzteil auf dem Bild.
Der Sketch kompiliert, "NeoPixel" Version ist 1.3.4.
FastLED hingegen kompiliert nicht, weil "yield" nicht gefunden wird.
Das Kabel geht in den Data IN Pin der Kette (Mitte), die anderen beiden (die äußeren) sind GND (weiß) und VCC (rot) und sind mit den anderen beiden weißen und roten Kabeln verbunden, die zum externen Netzteil gehen.

Gruß TNT2k

Im Video sehe ich aber einen UNO, Du hast nen Mega. Hoffentlich auch das Board so eingestellt in der IDE

Ja, den MEGA habe ich in der IDE eingestellt.....
Gruß TNT2k