Servus, Hat schon jemand die LEDs über SPI angesteuert? Wie ist hier die Vorgehensweise? Stellt man z.B. für 400kbit/s einen SPI Clock Takt von 3,2MHz ein, damit man mit einem Byte vom SPI ein Bit für die LED erzeugen kann? Und dann sendet man für eine Null 0xC0 und für eine Eins 0xF0, oder wie?
Könnte ich mir vorstellen, auch über Uart, da es eine asynchrone Schnittstelle ist. Solange Du kein RET code erzeugst wenn du nicht am Ball bleibst. Sonst bleibt Dir auch noch Output compare. Ich weiß ja nicht ob ich da richtig rechne, aber die Bitzeiten sind auch unterschiedlich 1.15µs für ne 0 und 1,3µs für ne 1
Im Datenblatt des WS2811 sind diese Zeiten für 1 und 0 gleich (2,5µs bzw 1,25µs)
Ja, das geht. Habe es gerade mit einem STM8S105 hinbekommen; Das Discovery-Board wird ja gerade als Promo-Hardware für die beiden kommerziellen Compiler verschleudert (irgenwas um 8 Örö). UARTs sind meist nicht geeignet, da sie im asynchronen Betrieb Start- und Stopbits einfügen. Das passt nicht zum Protokoll des WS2812. Der Trick mit SPI liegt darin, für jedes Bit, das an die WSS2812-Kette gesendet werden soll, drei Bits aus dem SPI-Schieberegister zu senden. Das erste Bit ist immer 1, dann folgt das "Nutzdatenbit" und als drittes eine 0. Diese Dreierkette nenne ich jetzt mal "Triplet". Eine LED wird mit drei Bytes zu je drei Triplets übertragen, also werden pro LED insgesamt 9 Bytes benötigt. Der Datenstrom am SPI-MOSI-Pin darf nicht unterbrochen werden. Diese SPI-Lösung funktioniert daher nur mit Controllern, die für das SPI-Senderegister einen Puffer verwenden. Bei den STMs ist das der Fall. Sobald der SPI-Block meldet, dass das Register beschreibbar ist, muss das nächste Byte übergeben werden. Das funktioniert am besten, wenn sämtliche Triplets bereits im RAM aufbereitet vorliegen. Dadurch steigt der Speicherbedarf zwar auf das Dreifache, aber im Fall des STM8S105 reicht's noch immer locker für 150 LEDs. Die Dinger reagieren in einem recht weiten Timingbereich. Laut Datenblatt wird ein Bit in 1,25us +/- 600ns erwartet. Das sind 0,65us - 1,84us oder 544KHz - 1,53MHz. Da wir Triplets benötigen, steht für einen Takt am SPI-Schieberegister nur ein Drittel dieser Zeit zur Verfügung. Bei 2MHz SPI-Takt sind das 1,5us pro Bit, also noch gut innerhalb der Spezifikation. 2MHz lassen sich prima mit den üblichen Prescalern aus 8MHz oder 16MHz teilen. Bei meinen ersten Versuchen habe ich einen Timerausgang mit dem SPI-Eingang verbunden, um per PWM möglichst nach an die 800KHz heranzukommen - völlig unnötig, wie sich herausgestellt hat. Die Teile sind gutmütiger, als es gemeinhin dargestellt wird.
Martin S. schrieb: > Hat schon jemand die LEDs über SPI angesteuert? Ja, hier zum Beispiel: Beitrag "[ASM & C] PIC12/PIC18/PIC24 WS2812 SPI Library"
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.