Probleme mit WS2812B 64 Matrix

Hallo,
ich habe mir mal so ein WS2812 Quadrat bestellt.
Der Code läuft schon seit Jahren auf UNOs, MEGAs und auch leicht modifiziert auf ESPs.

#define FASTLED_ESP8266_RAW_PIN_ORDER
#include <FastLED.h>

#define NUM_LEDS 64 // Anzahl der LEDs im Strip
#define NUM_COLORS 7


struct CRGB leds[NUM_LEDS];

#ifdef ESP8266
#define LED D4  // Lolin Board onboard LED
#else
#define LED 13
#endif
CRGB Cols[NUM_COLORS] =
{
  {0x00,0x00,0x10},
  {0x00,0x10,0x00},
  {0x10,0x00,0x00},
  {0x10,0x10,0x00},
  {0x10,0x00,0x10},
  {0x00,0x10,0x10},
  {0x10,0x10,0x10}
};


CRGB rgb;
void setup() {

#ifdef ESP8266
  FastLED.addLeds<WS2812, D2, RGB>(leds, NUM_LEDS);
#else
  FastLED.addLeds<WS2812, 8, RGB>(leds, NUM_LEDS);
#endif
  int i;
  int j;
  int k;
  int r,b,g;

    for (j = 0;j < NUM_LEDS ; j++)
    {
      rgb.g = 0;
      rgb.r = 0;
      rgb.b = 0;
      leds[j] = rgb;
    }
    // FastLED.showRGB((byte*)leds, NUM_LEDS);
    FastLED.show();
    delay(100);

    for (j = 0;j < NUM_LEDS  ; j++)
    {
      rgb.g = 0;
      rgb.r = 0;
      rgb.b = 0x10;
      leds[j] = rgb;
    }
    // FastLED.showRGB((byte*)leds, NUM_LEDS);
    FastLED.show();
    delay(100);
    randomSeed(millis());

    delay(3000);  

}


void loop() { 
 
 int wait=random(20,30);
 int dim=random(6,10);
 int max_cycles=20;
 int cycles=random(1,max_cycles+1);
 
 rainbowCycle(wait,cycles,dim);
}


void MakeFlux()
{
  int i;
  int j;
  int k;
  int z2;
  int colIndex;
  
  for (j = 150 ; j > 30 ; j = j - 4)
  {
    ClearAll();
    z2 = NUM_LEDS - 1;
    for (i = 0 ; i < 12 ; i++)
    { 
      colIndex = random(0,NUM_COLORS);
      Serial.println(colIndex);
      rgb.g = Cols[colIndex].g;
      rgb.r = Cols[colIndex].r;
      rgb.b = Cols[colIndex].b;
      leds[i] = rgb;
      if (i > 6)
      {
        leds[z2] = rgb;
        z2--;
      }  
      FastLED.show();
      delay(j);
    }
  }

  for (j = 1 ; j < 30 ; j++)
  {
    ClearAll();
    z2 = NUM_LEDS - 1;
    for (i = 0 ; i < 12 ; i++)
    { 
      colIndex = random(0,NUM_COLORS);
      rgb.g = Cols[colIndex].g;
      rgb.r = Cols[colIndex].r;
      rgb.b = Cols[colIndex].b;
      leds[i] = rgb;
      if (i > 6)
      {
        leds[z2] = rgb;
        z2--;
      }  
      FastLED.show();
      delay(25);
    }
  }


}
    
void ClearAll()
{
  int j;
   
  for (j = 0;j < NUM_LEDS ; j++)
  {
    rgb.g = 0;
    rgb.r = 0;
    rgb.b = 0;
    leds[j] = rgb;      
  }
  FastLED.show();
}

void rainbowCycle(uint8_t wait,byte cycle,byte dim) {
  
  int cycles, j, k;
  
  for(cycles=0;cycles<cycle;cycles++){
  
    byte dir=random(0,2);
    k=255;
    
    for (j=0; j < 256; j++,k--) {     // cycles of all 25 colors in the wheel
      
      if(k<0)k=255;
      
      for(int i=0; i<NUM_LEDS; i+=1) {
        
        Wheel(((i * 256 / NUM_LEDS) + (dir==0?j:k)) % 256,dim);        
        leds[i]=rgb;
      }
      // FastLED.showRGB((byte*)leds, NUM_LEDS);
      FastLED.show();
      delay(wait);
    }
  }
}

void Wheel(byte WheelPos,byte dim){
  
  if (WheelPos < 85) {
   rgb.r=0;
   rgb.g=WheelPos * 3/dim;
   rgb.b=(255 - WheelPos * 3)/dim;;
   return;
  } 
  else if (WheelPos < 170) {
   WheelPos -= 85;
   rgb.r=WheelPos * 3/dim;
   rgb.g=(255 - WheelPos * 3)/dim;
   rgb.b=0;
   return;
  }
  else {
   WheelPos -= 170; 
   rgb.r=(255 - WheelPos * 3)/dim;
   rgb.g=0;
   rgb.b=WheelPos * 3/dim;
   return;
  }
}

Der ist schon mit diversen Längen von LEDs gelaufen. Mit extra Spannungsversorgung. Bei
weniger LEDs auch mit einfacher Spannungsversorgung. Irgendwie alle Varianten und Längen.
Nie Probleme.

Jetzt habe ich mal so eine Matrix angeschlossen und alles spinnt.
Erst mal werden nicht alle LEDs angesprochen und dann sind Farben und Timing völlig daneben.
(Wie gesagt immer der selbe CODE der an Stripes wunderbar läuft).

Ich habe dann gedacht OK das Teil ist einfach kaputt und mir ein Neues bestellt.
Zack : Wieder genau das Selbe.
Muss man bei diesen Matrizen irgendwelchen magischen Steine beschwören ??

Der Code oben ist irgendein Allerweltsbeispiel.
Achso, ja den Widerstand habe ich vor der ersten LED in der Datenleitung.
Ulli

Hi

Was sagen die 08/15-Beispiele?
Vll. hat hier ein Chinese beim Kopieren nicht so ganz genau aufgepasst und Du musst die farben in anderer Reihenfolge senden?
Sind bei Deinen (mindestens zwei) Matrixen die Anzeigen identisch?
Also, steigen Beide bei der gleichen LED aus? (Du schreibst, Es leuchten nicht Alle)
Sind auch die Farben identisch?
Wiederholbar?

MfG

Also der Code im Setup (der die einzelnen LEDs schaltet) läuft bei beiden Matrizen unterschiedlich weit.
Obwohl alle auf den gleichen Farbwert geschaltet werden (0,0,0x10) sind die unterschiedlich hell blau.
(Aber alle im dunklen Bereich wie das 0x10 auch will).
Wenn dann das Colorwheel losgeht sollten ja auch nur dunkle Farben auftauchen (die möglichen Farben stehen ja oben im Array alles nur 0x10 Werte) aber es flackert schnell und hell (sollte dunkel und langsam sein).

Änderungen im Farbarray wirken sich überhaupt nicht aus.

Ulli

Jetzt habe ich mal so eine Matrix angeschlossen und alles spinnt.
Erst mal werden nicht alle LEDs angesprochen und dann sind Farben und Timing völlig daneben.
(Wie gesagt immer der selbe CODE der an Stripes wunderbar läuft).

Wenn man in das Datenblatt des WS2812 schaut, erfährt man, dass 0,7*Vdd nötig sind um einen High Pegel zuverlässig zu erkennen.

Jetzt frage dich, ob der ESP das leisten kann!

Tipp:
Vdd ist bei dem Stripe 5V

Mit dem ESP habe ich diese Matrix gar nicht ausprobiert. Nur mit einem UNO und mit ProMinis
5V. Wenn ich was Neues ausprobiere fange ich ja nicht gerade mit den Problemkindern an :wink:

Hat mit diesem Problem nichts zu tun : Für die ESPs habe ich diverse Schaltungen ausprobiert
um den Pegel auf der Datenleitung zu korrigieren. Klappt prima. Manchmal geht es sogar einfach so.
Aber das ist hier nicht das Thema.
Ich habe den EPS nur erwähnt um zu sagen die die Software in diversen Setups läuft und ich das
Problem da nicht vermute.

Ulli

Mit dem ESP habe ich diese Matrix gar nicht ausprobiert.

Ja dann...

Jetzt habe ich mal so eine Matrix angeschlossen und alles spinnt.
Erst mal werden nicht alle LEDs angesprochen und dann sind Farben und Timing völlig daneben.
(Wie gesagt immer der selbe CODE der an Stripes wunderbar läuft).

Das klingt mir nach Problemen mit der Unterdimensionierung der Spannungsversorgung.
64 LED brauchen ca 3,8A
Grüße Uwe

Du hast ja eine Glaskugel.... :o :o :o
Nach genauer Analyse des Eingangspostings, kam nur der ESP als mögliche Fehlerquelle in Betracht!

Die Versorgung, wird er doch wohl geprüft haben...
Das ist doch das erste, was man macht.
Denn der beeblebrox ist doch kein Neuling in Sachen LED.

:smiling_imp: :smiling_imp: :smiling_imp:

Mit einem maximalen Helligkeitswert im Farbarray von 0x40 läuft der Sketch mit einem Stripe mit 60 LEDs mit einer Powerbank.
Diese Matrix nicht.

Ich habe natürlich zum Testen die Anzahl der LEDs auch runter gesetzt.
Zum Testen hatte ich auch schon ein Labornetzteil dran.
Ulli

ich habe mir mal so ein WS2812 Quadrat bestellt.

Gibst Du uns den Link zum Verkäufer?
Grüße Uwe

Waren zwei verschiedene :

a) Ebay 1
und

b) Ebay 2

Ulli

Hallo,

ich häng mich hier mal dran, denn die Chance ist groß, daß ich dasselbe Problem habe, oder zumindest ein ähnliches.

Habe auch eine solche Matrix gekauft aus Hong Kong, sieht genauso aus wie auf den beiden eBay-Links, und nach dem Anschließen kann ich nicht alle LEDs ansprechen. Statt 8x8 hab ich nur 5x8, und LED 7 und 16 gehen gar nicht (41-64 auch nicht, deshalb 5x8). Stromversorgung liefert 2,5 A, das sollte doch reichen, insbesondere bei reduzierter Brightness.

Probiert habe ich AdaFruit_NeoPixel und AdaFruit_NeoMatrix mit den Demosketches...die HongKong-Matrix ignoriert aber komplett meine hochgeladenen Brightness-Vorgaben. Sollte ich mal eine andere Library probieren? Oder gibt's einen Demosketch ohne Library?

Vielleicht sollte ich noch dazusagen, daß ich an einem alten Netbook mit Windows XP entwickle, weil ich (Web-Entwickler) als völlig planloser Noob in Sachen Hardware nicht an hochwertigen Rechnern rumstöpseln will :slight_smile: Arduino 1.8.9 läuft darauf gut.

Cheers und danke!

Hi

Wenn in den Beispielen Nichts drin ist, Was eine einzelne LED einfach nur 'der Reihe nach' aufblitzen lässt - warum nicht selber schreiben?

Eine Variable (uint16_t - da byte nur bis 255 geht und wir den Sketch vll. auch Mal an was Größerem testen wollen) und ab Reset hochgezählt und die LEDs einzeln auf 255 255 255 gesetzt, die Vorherige auf 0 0 0.
Zur Not bis 65535 - spätestens dann wird wohl das Limit der heimischen Kettenlänge erreicht sein - und dann beginnen wir wieder von Vorne.

Meine Vermutung: Schlechte Lötstelle (korrigierbar) oder fehlerhafte LED - Ausgang oder Eingang der Nächsten defekt - Das ist schon bedeutend blöder mit Austausch.

MfG

Schlechte Lötstelle...echt? Denkst du? Daß dann die LED 7, 16 und 41-64 nicht gehen, und zwar NIE gehen, aber alle anderen IMMER gehen?
Ich weiß daß meine Löterei eine Katastrophe ist, das könnte schon die Ursache sein.
Versuche es mal besser zu machen.
Danke!

Wie sieht es denn bei deinen LED-Boards mit dem Timing aus ?
Bei mir stimmt auch da nichts. Selbst wenn ich den Sketch auf die ersten 10 leuchtenden
LEDs beschränke flackern die wild vor sich hin statt langsam die Farben zu wechseln.

Ich denke mein Vorredner meint nicht deine Lötstellen sondern die auf der Matrix.

Ulli

Hmmm...mein Timing ist ok. Reagiert korrekt auf verschiedene Sleep-Werte mit Zufallsfarben.
Du meinst die Lötstellen auf dem Board selbst? Kann man das mit bloßen Auge erkennen? Sieht für mich alles gleich aus.

Was ich noch seltsam finde ist, daß auf den Bildern auf eBay die 3 "Anschlußlöcher" (weiß nicht wie das richtig heißt, da wo man Pins reinstecken kann) zwischen Led 1 und 9 liegen, also gut erreichbar. Bei meine Exemplar liegen sie auf der Höhe von LED 1, so daß man an das mittlere Loch gar nicht drankommt. Das sieht für mich irgendwie fehlerhaft aus.

Ich habe auch die mit den Anschlusslöchern unter den LEDs. 4 Stück davon. Erst hatte ich sie am ESP. Jetzt zur Fehlerquellen beseitigung am Nano.

3 von denen haben vor der häflte der LEDs eine unterbrechung oder eine Defekte LED. Es leuchtet ab einer bestimmten stelle einfach nicht weiter....

Aber selbst die ersten 8 LEDs ( erste Reihe ) lässt sich nicht zuverlässig ansteuern.

Ich habe mehrere Parrallel angeschlossen und sie geben nicht das selbe aus.
Mit einem Strip (Auch WS2812B) mit 8 LEDs den ich zusätzlich anschliesse funktioniert es wie es soll.

Irgendwas stimmt mit den Teilen nicht. Keine echten WS2812B ?
Der Chip in der LED ist auch schräg angeordnet. Das ist bei keiner anderen so. Ich hab einige Verschiedene Strips rumliegen.

Und einige der SMD Lötstellen sehen tatsächlich verdächtig aus. Bei einigen selbst mit Lupe schwer zu sagen ob sie kontakt haben.

Ich hab keine Idee mehr. Hat es jemand geschafft? ^^

Ich habe jetzt mittlerweile noch ein paar andere 8x8er-Panels probiert, die allesamt perfekt funktionieren. Ist also ziemlich sicher, daß das erste Teil einen Schaden hatte. Hab's entsorgt. Versender hat erstattet. Alles gut.

Ich habe jetzt ein zwischenabgriff eingelötet für den Data In hinter einer Unterbrechung. Ab da funktioniert es wunderbar. Haben alle ein Pixelfehler in der ersten Reihe.

Dazu muss ich sagen das die tatsächlich auf 400kHz gestellt werden müssen. ICh dachte die WS2812B sind immer auf 800kHz. Stimmt das? oder sind das vielleicht garkeine WS2812B

Die WS2812 (ohne B) mit 6 pins haben einene Eingang der die Frequenz des Datenbusses auf 400 oder 800kHz einstellt. Beim WS2812B (mit B) mit 4 Pins hat die Frequenz fix auf 800kHz gesetzt. Gleiches gilt für andere, ähnliche Kontroller.

Grüße Uwe