Forum: Mikrocontroller und Digitale Elektronik ESP8266 und SK9822 LED Stripe


von Alex Z. (alexander_z49)


Angehängte Dateien:

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

von Simon B. (nomis)


Lesenswert?

Ich bin nicht 100%ig sicher, ob das hier das gleiche Problem ist was da 
diskutiert wird:

https://cpldcpu.wordpress.com/2016/12/13/sk9822-a-clone-of-the-apa102/

Aber vielleicht kannst Du damit etwas anfangen.

Viele Grüße,
        Simon

von Alex Z. (alexander_z49)


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.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.