WS2812

Sehr verbreitete „Smart-LEDs“ mit serieller Ansteuerung über eine Leitung, vor allem unter dem Namen NeoPixel bekannt.  Andere Produktnamen sind WS2811 und SK6812.

Die Ansteuerung kann wahlweise mit 400 oder 800 kbps erfolgen und ist sehr zeitkritisch. Das Signal ist recht empfindlich, für längere Strecken sind andere Protokolle besser geeignet (siehe z. B. diese Diskussion). Für eine hohe Updaterate dürfen nicht zu viele Pixel in Reihe geschaltet werden. Bei 24 Bit pro Pixel und 800 kbps ergeben sich z. B. folgende Refreshraten:

Pixel fps
100 333
200 167
300 111
400 83
500 67
600 56
700 48
800 42
900 37
1000 33

Wichtige Hinweise:

  • Strombedarf bei längeren Ketten beachten
  • manche LEDs haben abweichende Farbfolgen (RGB vs. GRB etc.)
  • Vorwiderstand vor erster LED vorsehen
  • Pegelwandlung 3.3V > 5V vorsehen
  • Kondensator an direkt an jeder LED für stabilen Betrieb erforderlich (oft schon integriert)

Pegelwandlung 3.3V > 5V

Viele LEDs funktionieren problemlos auch mit einem Signalpegel von 3.3V, allerdings ist das nicht sicher gewährleistet. Die Pegelwandlung gibt es verschiedene Optionen (z. B. mit einem PNP-Transistor als Emitterfolger). Am einfachsten dürfte es sein, die Betriebsspannung für die erste LED in der Reihe mit einer Diode etwas herabzusetzen. Dadurch wird der Signalpegel danach sicher in den zulässigen Bereich angehoben.

Ansteuerung mit ESP8266

Bit-Bang

Vorteile:

  • sehr einfach
  • jeder Pin für Ausgabe verwendbar

Nachteile:

  • nur mit ausgeschalten Interrupts zuverlässig möglich, daher nur für einige wenige Pixel sinnvoll (z. B. für eine Statusanzeige)

UART

Bei ESPixelStick (ForkInEye) im Einsatz, nutzt UART1 auf GPIO2. Das Verfahren sollte auch mit UART0 auf Pin TX funktionieren. Der UART wird im Modus 6N1 mit 3200 kBaud und invertiertem Signalpegel betrieben (4 x 800 kbps), ein Ausgabebyte erzeugt so zwei serielle Datenbits (Start- und Stopbit sind Teil des Signals).

Vorteile:

  • relativ geringe CPU-Last

Nachteile:

  • nur GPIO2 bzw. TX als Ausgabepin möglich

DMA

Das Signal für die serielle Ansteuerung wird als Bitmuster im Speicher hinterlegt und via DMA ausgegeben (siehe https://github.com/cnlohr/esp8266ws2812i2s). Der Prozessor hat dadurch nicht viel zu tun, allerdings wird viel RAM benötigt (4 Byte für jedes auszugebende Byte). Die Ausgabe erfolgt über Pin RXD und kollidiert daher mit dem seriellen Port.

Vorteile:

  • minimale CPU-Last

Nachteile:

  • hoher Speicherverbrauch
  • serieller Eingang RX nicht mehr nutzbar

Ansteuerung mit AVR

Ansteuerung mit Teensy

Ansteuerung mit FPGA

Siehe auch