ESP8266 und SK9822 LED Stripe

OP #6288276
Lesenswert?

Hallo liebe Leute,

ich bin grade am verzweifeln. Ich habe einen SK9822 LED-Stripe mit 264 
LEDs an einem ESP8266 mit µpython. Dazu habe ich mir für den ESP8266 
eine Python-Bibliothek (siehe Anhang)für das Hardware SPI geschrieben. 
Das ansteuern, Farben und Helligkeit setzen funktioniert auch soweit. 
Ich habe nur ein seltsames Problem:

Wenn ich meinen Buffer mit den 4 Start-Bytes, 1056 Daten-Bytes und 4 
End-Bytes auf die SPI schreibe, dann bleiben die letzten 4 LEDs 
dunkel/ändern die Farbe nicht. Im Buffer steht aber alles drin und auch 
an der richtigen Stelle. Wenn ich jetzt den selben Buffer nochmal ohne 
Veränderung auf die SPI schreibe, ändern sich die 4 LEDs.

Wird der Buffer zwischen den beiden SPI-Schreibvorgängen geändert und 
dann wieder rausgeschrieben, so ändern sich die ersten 260 LEDs und die 
4 Letzten bleiben erstmal gleich. Ändere ich den Buffer jetzt wieder 
(andere Farbe), scheibe ihn auf die SPI, so ändern sich 260 LEDs und die 
4 Letzten erhalten den Zustand des Buffers davor.

Ich habe die LEDs schon 2x ausgezählt, alle Eckpunkte an der 
Installation passen.

Was auch sehr komisch ist:

Wenn ich die Gesamtzahl der LEDs in der Programmierung auf 265, 266, etc 
erhöhe, wandert das Verhalten weg, sodass bei 268 "eingestellten" LEDs 
alle richtig funktionieren.

Im Datenblatt habe ich nichts davon gelesen, dass es "puffer" oder sowas 
geben muss, damit das mit dem Schieben richtig funktioniert. Hatte 
schonmal jemand ein solches Verhalten?

Ich habe noch einen kurzen Streifen mit 35 LEDs, den ich zum testen 
nehme, da habe ich das Problem nicht.

Kann das was mit der Länge zu tun haben und dass vllt. CI und DI noch 
terminiert werden müssen oder so?


Alex
Angehängte Dateien:
OP #6288298
Lesenswert?

OK, wenn ich das richtig verstanden habe, ist das Datenblatt des SK9822 
mit dem Frame-Diagramm erstmal falsch(Copy&Paste-Chinese), das Protokoll 
ist etwas anders.

Somit müsste ich 32*0, dann die 264*4 Datenbytes , dann nochmal 32*0 und 
dann den Endframe. Was ich jetzt nicht verstehe, im APA102 DB seht 31*1 
für den Endframe, im Blog wird aber was von n/2 *0 geschrieben. Bleibt 
wohl nur Probieren übrig.

Hat vllt. einer eine funktionierende SK9822 lib in Python rumliegen ;)?

Wenns geht, melde ich mich wieder.

Alex

Edit:

So also für alle die das Problem auch mal haben:

4*0 + 4* Anzahl LEDs + 4*0 + (Anzahl LEDs + 15) // 16 als Formel für den 
Frame funktioniert.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren