In den ersten beiden Beträgen zur LED Matrix (eins, zwei) haben wir zunächst die Matrix direkt über die Arduino Pin angesprochen und im zweiten Teil ein Schieberegister verwendet. In diesem Beitrag werden wir die roten und die grünen LEDs über zwei Schieberegister gleichzeitig ansprechen. Ziel ist es die Matrix abwechseln blinken zu lassen.

LED Matrix mit zwei Schieberegistern

Lernziele:

  • Arduino mittels zwei Schieberegister um 13 Output Pin erweitern
  • Variablen vom Typ byte
  • byte Array mit bitRead() auslesen
  • Schift Out Befehl verwenden

This is a software implementation; see also the SPI library, which provides a hardware implementation that is faster but works only on specific pins.

Der Aufbau mit zwei Schieberegistern

Der Aufbau ist zunächst wie der Aufbau im zweiten Beitrag mit einem Schieberegister. Das zweite Register wir nun wie das erste mit 5Volt an VCC (Pin 16) und MR (Pin 11) versorgt. Die Erdung wird an GND (Pin 8) und OE (Pin13) angeschlossen. Um die serielle Verbindung zwischen beiden Registern herzustellen, wird QS7 (Pin 9) von Register eins mit DS (Pin 14) von Register zwei verbunden. Damit wird gewährleistet, dass die bit vom ersten in das zweite Register geschrieben werden können. Da die Taktung sowie das Speichern auf beiden Registern parallel geschieht, können die Pin für STCP  (12) und SHCP (11) direkt vom ersten zum zweiten Register weiter geschleift werden. Bleibt zum Schluß nur noch die Verbindung der Ausgänge (Q0 bis Q7) von Register zwei mit den grünen Reihen Pin der LED Matrix zu verbinden.

Schieberegister

Arduino Sketch mit bit() und byte

Byte-Variablen belegen ein Byte im Speicher und speichern Werte zwischen 0 und 255. Der Wert kann als Dezimal oder Hexadezimal Zahl angegeben werden. Auf der folgenden Seite findet Ihr einen Bit Umrechner.

In diesem Sketch lagern wir das schreiben der Daten in eine Funktion updateMatrix aus. Der Funktion werden drei Arrays vom Typ byte übergeben. So können wir jeweils acht Spalten, acht grüne und acht rote Reihen schalten. Zuerst lesen wir die Spalten mit einer For Schleife und bitRead() aus und schreiben diese Werte auf die Datenausgänge des Arduino. Anschließend schreiben wir mit shiftOut(dataPin, clockPin, bitOrder, value) die gewünschten Zustände in die Schieberegister. shiftOut arbeitet dabei als Software-Schieberegister, wobei der Byte-Wert über den dataPin hinausgeschoben wird. Der zugehörige Schiebetakt wird an clockPin erzeugt. BitOrder gibt die Reihenfolge an: MSBFIRST oder LSBFIRST (Most Significant Bit First oder Least Significant Bit First). Da wir zwei 8 Bit Schieberegister müssen wir auch zweimal den shiftout Befehl verwenden.

 

 Fazit LED Matrix

Nun habt Ihr das Handwerkszeug die LED Matrix effizient anzusteuern und Schieberegister Arduino lassen uns Bit Set auf Theoretisch unendlich viele Ausgänge erweitern.

8×8 RG LED Matrix (3/3) – zwei Schieberegister voller Bit
Markiert in:        

Ein Gedanke zu „8×8 RG LED Matrix (3/3) – zwei Schieberegister voller Bit

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.