Aus Raspberry Pi Geek 10/2020

RGB-LED-Matrix WS2812 mit dem RasPi ansteuern

© Martin Konopka, 123RF

Kunterbunt

Martin Mohr

Meist nutzen Controller zum Ansteuern programmierbarer LEDs nur einen Bruchteil von deren Möglichkeiten – dabei ist ihr Potenzial beinahe grenzenlos.

Bei der WS2812 handelt es sich um eine programmierbare RGB-LED. Jede Einzelne beherbergt einen kleinen Controller zum Ansteuern, für jede der drei Grundfarben (Rot, Grün und Blau) gibt es im Controller ein Datenbyte. Das erlaubt es, mit einer LED über 16 Millionen Farben darzustellen. Jede LED besitzt vier Anschlüsse. Zwei davon dienen für die 5-Volt-Spannungsversorgung. Die anderen zwei, DI (Data in) und DO (Data out) kommen zum Einsatz, um die Daten asynchron seriell zu übertragen.

Der Ausgang einer LED lässt sich mit dem Eingang der nächsten verbinden, womit sich theoretisch beliebig viele WS2812-Exemplare hintereinanderschalten lassen. Allerdings benötigt man irgendwann zum Schreiben der Werte in die LEDs so viel Zeit, dass sie zu flackern anfangen. Bei 1024 LEDs in Reihe ist es gerade noch möglich, alle Leuchtdioden 30-mal pro Sekunde mit Daten zu versorgen, sodass kein sichtbares Flackern entsteht.

Das Signal zum Ansteuern der LEDs ist speziell aufgebaut. So wird jedes einzelne Datenbit in einer kompletten Periode des Signals kodiert. Die Puls-/Pausenzeit des Signals gibt an, ob es sich um eine logische Eins oder um eine Null handelt. Dieses Verfahren eignet sich deshalb am besten, weil ein kontinuierlich wechselndes Signal weniger störanfällig arbeitet. Jedes einzelne Datenbit wird durch dieses Verfahren neu synchronisiert. Das Verfahren überträgt ein einzelnes Datenbit in einem Zeitraum von 1,25 Mikrosekunden. Um die LEDs zu resetten, benötigt es ein mindestens 50 Millisekunden langes Low-Signal auf der Datenleitung.

Wie diese kurze Beschreibung zeigt, fällt es nicht leicht, das Signal für die WS2812 zu erzeugen. Das hierfür nötige Programm muss in einer maschinennahen Programmiersprache wie C geschrieben sein. Zusätzlich gilt es, ein sehr genaues Timing-Verhalten einzuhalten. Es gibt glücklicherweise eine Bibliothek, die für uns das Erzeugen des korrekten Signals übernimmt.

Eine weitere kleine Hürde stellen die Betriebsspannung und der Signalpegel der WS2812-Dioden dar, die 5 Volt betragen. Der Raspberry stellt zwar 5 Volt Betriebsspannung bereit, die von ihm erzeugten Signalpegel erreichen aber maximal 3,3 Volt. Sucht man sich die entsprechenden Werte aus dem WS2812-Datenblatt [1] heraus, erfährt man, dass die LEDs Signale erst ab 3,6 Volt fehlerfrei erkennen. Das macht einen zusätzlichen Halbleiter zum Anheben des Signalpegels nötig. Im Internet finden sich viele Beispiele, bei denen die Bastler auf diesen zusätzlichen Halbleiter verzichten. Das kann klappen, muss aber nicht. Der im vorliegenden Projekt verwendete 74HC125 kostet gerade einmal 28 Cent – gut investiertes Geld für sichere Signalpegel.

Die Bibliothek besitzt eine Einstellung für die Helligkeit des WS2812. Diesen Wert sollte man so niedrig wie möglich wählen, denn eine einzelne LED zieht bei voller Helligkeit bis zu 12 Milliampere Strom. Für einen typischen Strip mit 64 Dioden mit 64 multipliziert, ergibt das einen Gesamtstrom von fast 800 Milliampere, den der RasPi bereitstellen muss. Dieser Wert überlastet viele Netzteile bereits. Auch sollten Sie so viel Strom nicht über eine Flachbandleitung schicken. Sollte ein Anwendungsfall auftreten, bei dem Sie die volle Helligkeit der LEDs benötigen oder mit mehr als 64 Stück arbeiten, müssen Sie die LEDs über ein gesondertes 5-Volt-Netzteil mit ausreichend Leistung versorgen.

Aufbau der Hardware

Beim Aufbau der Hardware gibt es nur einen Punkt zu beachten: Erzeugen Sie das Signal mit einem PWM-Generator, dann benötigen Sie zum Ausführen des Programms Root-Rechte. Verwenden Sie die SPI-Schnittstelle, läuft das Programm auch mit User-Rechten. Auf das Verwenden des Root-Users sollten Sie so weit möglich verzichten.

Daher nutzen Sie die SPI-Schnittstelle (BCM-Pin 10, Physical Header 19), um das Signal für die LEDs zu erzeugen. Sie verbinden also den Pin 19 des RasPi-GPIO-Headers mit dem Eingang des 74HC125 und dessen Ausgang wiederum mit dem Eingang der WS2812-LED-Matrix [2]. Die gibt es beim chinesischen Aliexpress für unter 7 Euro zu kaufen.

Um nicht zu viel Platz zu verlieren, verwenden Sie am besten die SMD-Variante 74HC125 [3], die Sie auf eine vorgefertigte Platine [4] löten. Um den Strom, der durch die Flachbandleitung fließt, zu verteilen, nutzen Sie beide 5-Volt-Anschlüsse und auch zwei Masseleitungen (Abbildung 1).

Abbildung 1: Der Schaltplan der Pegelanpassung für die WS2812-LED-Matrix.

Abbildung 1: Der Schaltplan der Pegelanpassung für die WS2812-LED-Matrix.

Zum Schutz der LED-Matrix und des 74HC125 hat der Autor aus transparentem Filament ein Gehäuse für den Aufbau (Abbildung 2) gedruckt. Das Gehäuse enthält eine einfache Zugentlastung, damit sich die recht dünnen Leitungen nicht von der Platine oder der LED-Matrix lösen. Die STL-Dateien für den 3D-Drucker finden Sie im Download-Bereich von RPG.

Abbildung 2: Zum Schutz der Elektronik verpackt der Autor den Aufbau in einem 3D-gedruckten Gehäuse.

Abbildung 2: Zum Schutz der Elektronik verpackt der Autor den Aufbau in einem 3D-gedruckten Gehäuse.

Raspberry vorbereiten

Auf dem Raspberry verwenden Sie das aktuelle Image von Raspberry Pi OS mit Desktop [5]. Die Installation des WS2812-Treibers erfordert einige Tools und Bibliotheken, die Sie mit den Kommandos aus Listing 1 installieren.

Listing 1

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install openjdk-10-jdk scons build-essential libpcre3 libpcre3-dev swig

Um die LEDs über die SPI-Schnittstelle anzusteuern, müssen Sie diese noch aktivieren. Das erledigen Sie mit Raspi-config, wo Sie die Änderung unter dem Menüpunkt 5 Interfacing Options | P4 SPI vornehmen.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben