Ws2801 vs WS2812b

LED-Streifen mit einzeln steuerbaren RGB-LEDs sind weiterhin und immer mehr populär. Begonnen hat es mit dem Chip WS2801 von Worldsemi und die Story wird sehr erfolgreich mit dem LED-Chip Neopixel oder WS2812b fortgesetzt. Der WS2801 ist ein separater Chip mit einer Zweidraht Kommunikation auf Basis von SPI. Zusammen mit Versorgungsspannung kann er 3 LEDs (RGB) mit PWM farbenfroh ansteuern (24 bit Farbe). Der WS2812b ist ein in eine LED eingebetteter Chip mit einer Eindraht-Datenkommunikation (siehe Bild 3). Zusammen mit der Versorgungsspannung kann er 3 Ausgänge mit PWM steuern. Mit RGB-LEDs also auch 24 bit Farbe erzeugen.
Merkmale des WS2812b

Vergleiche

Also welche Variante von Lichterkette kauft man nun. Was ist der bessere Chip oder die bessere Produktkategorie. Viele Projekte bieten sich damit an. Z.B. LED-Matrix-Anzeigen bauen. Doch wie bekommt man die bessere Bildwiederholfrequenz hin oder was?

Worauf kommt es an

Der Aufbau einer LED-Matrix ist eine lineare Strecke. Alle LEDs sind von der Verkabelung hintereinander angeordnet. Der Dateneingang des Nachfolgers wird vom Vorgänger erzeugt. Beide Varianten des Chips arbeiten so, dass man von einer Quelle 24 Bit (3 Byte) vorne reintackert und wenn das 25-te Bit kommt, wird das Paket zum Nachfolger-Chip weitergegeben. So können über eine Kaskade alle Chips/LEDs mit einem neuen Farbwert versorgt werden.

Es kommt also auf die Datenübertragung des Datenbusses an.

WS2801

Hier ein Ausschnitt aus des WS2801 Datenblatt:

Als Extremwerte ist bei „Input Clock Frequency“ 25 MHz angegeben. Das ist wohl wirklich extrem. Denn realistisch wird man dieses HF-Signal kaum durchbekommen. Und man braucht für die Quellseite jemanden, der 25MHz SPI kann. Der beliebte Raspberry Pi, der zwei integrierte Hardware-SPIs hat, kann erfolgreich nur bis zu 6 MHz machen.
Wenn wir jetzt diesen Wert nehmen und annehmen, dass bei jeder Periode eines von 24 Datenbits übertragen wird, dann kommen wir zu:
6 000 kHz : 24 = 250 kHz
damit können wir eine LED 250 000 mal pro Sekunde aktualisieren. Gehen wir von einer kleinen 16×16-Matrix aus (es soll ja auch ein bisschen was angezeigt werden) mit 256 LEDs. Dann sind immerhin noch rund 970 Hz übrig. Also die komplette Matrix mit rund 1 kHz aktualisieren. Nicht schlecht.
Aber es kommt noch eine Zwangspause hinzu. Die Daten werden nur „angezeigt“, wenn eine Pause von 500 µs erfolgt. Rechnen wir also aus, wie viel Zeit die Datenbits für 256 LEDs und die eine Pause kosten:
256 * 24 * (1:6MHz) + 500µs = 1,524 ms (pro Vollbild)
Jetzt brauchen wir die Sekunde nur noch durch diesen Wert Teilen:
1 s: 1,524 ms = 656,168
Damit bekommen wir eine realistische maximale Wiederholfrequenz der kompletten Matrix von ca. 650 Hz. Das ist ziemlich gut.

WS2812b respektive Neopixel

Werfen wir denselben Blick auf den Neopixel. Dieser Chip wird nicht mit SPI angesteuert, sondern mit einer Timing-Gesteuerten 1-Draht-Kommunikation. Wie man in dem folgenden Ausschnitt aus dem Datenblatt sieht, kodiert man eine 0 mit einer Rechteckpuls-Vollperiode der Form Kurz-Lang, während man eine 1 mit der Form Lang-Kurz kodiert. Eigentlich ein ziemlich einfaches System:

Die Timings der Signale muss ziemlich Exakt sein. Man bekommt das mit einem Arduino durch exaktes ausrechnen der CPU-Takte und die korrekte IO-Pin-Ansteuerung aber hin. Siehe Tabelle.
Wir erkennen gleich aus der ersten Zeile: TH+TL = 1,25 µs. Das ist die Periodendauer. Zum festschreiben muss noch ein Low-Puls von > 50µs dazukommen. Wieder mit unserer angenommenen Matrix von 8×8 Pixeln ergibt sich:
256 * 24 * 1,25 µs + 60µs = 7740µs (Zeit für ein Vollbild)
Nun können wir uns die Anzahl der Vollbilder pro Sekunde ausrechnen:
1 s : 7,74 ms = 129,2 (Vollbilder pro Sekunde)
Wir erkennen also, dass ein Signal mit Clock mehr Daten pro Zeit übertragen kann, als ein Timing gesteuertes Eindraht-Signal.

Resume

Der ältere WS2801 gewinnt gegen den jüngeren WS2812b mit hier 650 Hz : 129 Hz Wiederholfrequenz bei einer 256er Matrix. Jetzt kann man sich fragen wieso wird der neuere so häufig eingesetzt und hat quasi alles besetzt? Wohl, weil er in eine LED integriert ist, derweil der WS2801 als klobiger (vermutlich auch Stromfressender) Chip neben den LEDs sitzt. Entweder auf dem LED-Streifen oder in irgendwelchen Gehäusen. Realistischer lässt er sich sowieso mit 2 MHz betreiben. Indes 1/3 von 650 Hz ist immer noch viel. Angesichts von hohem Leistungsbedarf, sollte man eh mehrere Teilpanels machen, wenn es größer werden soll. Hier kann auch der Neopixel wieder punkten, denn ein ESP8266 hat oft zu wenige Pins herausgeführt, um als SPI zu funktionieren. Ein ESP32 mag, dank 4 CPUs, vielleicht in der Lage sein mehrere LED-Teilpanels anzusteuern mit korrekten Timings für WS2812b. Panels aus WS2801 kann er dank zweier Hardware SPI-Schnittstellen als Doubel ansteuern.
Unterm Strich gibt es Vor- und Nachteile und man sollte das nehmen, was man bekommt.