In diesem Tutorial zeige ich dir wie du einen Schieberegister mit deinem Arduino verwenden kannst. Aber was ist ein Schieberegister und was sind seine Einsatzgebiete?
Ohne in die Details zu gehen handelt es sich bei einem Schieberegister um einen Seriell-zu-Parallel-Wandler, d.h. ein Datenstrom an Bits wird über einen seriellen Eingang auf mehrere parallele Ausgänge geschoben. Man kann auf diese Weise den Ausgang eines Arduinos auf acht Ausgänge erweitern!
Der 74HC595 ist ein sehr bekanntes Schieberegister, er verfügt über acht getrennte Ausgänge und nur über drei Eingänge.
Pin-Belegung
Spannungsversorgung
Die Anschlüsse VCC und GND für die Spannungsversorgung werden mit den entsprechenden Pins des Arduinos verbunden.
Eingänge
Der Pin 14 SER (Serial Input) ist der serielle Eingang und wird an einen digitalen Ausgang des Arduino angeschlossen.
SRCLK (Shift Register Clock) ist für den Takt des Schieberegisters zuständig. Mit jeder ansteigenden Flanke werden die Bits verschoben, dazu muss der Eingang auf HIGH liegen.
Wenn der Pin RCLK (Register Clock / Latch) auf HIGH gesetzt wird, dann wird der Inhalt des Schieberegisters in den Storage/Latch Register kopiert, d.h. die Daten stehen dann direkt an den acht Ausgängen zur Verfügung.
Ausgänge
Die Pins 1-7 und 15 sind die acht Ausgänge QA-QH (Output Enable).
Besondere Pins
SRCLR (Shift Register Clear) ermöglicht uns das Zurücksetzen des Schieberegisters, wenn wir dies nicht benötigen, muss der Pin auf HIGH (= 5V) gesetzt werden.
Wenn der Pin OE (Output Enable) auf HIGH gesetzt ist, sind die Ausgänge gesperrt. Im normalen Modus wird OE auf GND gesetzt damit die Ausgänge normal funktionieren.
Am Pin QH‘ kannst du einen weiteren Schieberegister anschließen indem du ihn mit dem SER Pin eines anderen 74HC595 Schieberegisters verbindest. D.h. mit zwei Schieberegistern stehen dir dann 16 Ausgänge zur Verfügung! Dies lässt sich beliebig wiederholen solange dein Board genügend Strom liefern kann.
Weitere Informationen findest du im 74HC595 Datenblatt.
Lass uns das Schieberegister nun mit einem Arduino Uno verbinden
Du kennst nun die Arbeitsweise des Schieberegisters und über welche Pins er hat. Als nächstes wollen wir seine drei Eingänge inklusive der Pins für VCC und GND korrekt an einen Arduino Uno anschließen.
Bitte platziere den 74HC595 wie abgebildet auf dem Steckbrett. Achte darauf dass die U-förmige Kerbe des ICs nach links zeigt, so dass die Eingänge oben liegen.
Verbinde nun den Pin 16 (VCC) und 10 (SRCLR) des ICs mit dem 5V Pin (VCC) des Arduino und verbinde den Pin 8 (GND) and 13 (OE) mit dem GND Pin deines Arduino Boards. Damit befindet sich der IC nun im normalen Arbeitsmodus, so wie ich dies bereits oben erklärt habe.
Nun verbinden wir die drei wichtigen Eingänge des Schieberegisters mit unserem Arduino.
- Pin 11 (SRCLK) des ICs mit Pin 6 des Arduino
- Pin 12 (RCLK) des ICs mit Pin 5 des Arduino
- Pin 14 (SER) des ICs mit Pin 4 des Arduino
Jetzt sind die acht Ausgänge des Schieberegisters an der Reihe!
Die Ausgänge schließen wir an rote LEDs an. Um den Strom für die LEDs zu begrenzen, platzieren wir vor jede LED an der Anode (+), das ist die Seite mit dem langen Bein, einen 220Ω Widerstand. D.h. die Widerstände und die Anoden der LEDs sind mit dem IC verbunden.
Die Kathoden (-) der LEDs werden mit GND verbunden. Bitte schaue dir das Schaubild oben nochmals genau an wie die LEDs und Widerstände zu platzieren sind.
Nun geht es ans Verkabeln.
Bitte gewöhne es dir an für VCC immer rote Kabel zu verwenden und für GND schwarze Kabel, so behältst viel leichter den Überblick und vermeidest Fehler. Für die Ausgänge wurden blaue Kabel gewählt, für die Eingänge grün, gelb und orange. Es ist egal welche Farben du hier verwendet, nur keine roten und schwarzen Kabel, da diese bereits für VCC und GND verwendet werden.
Jetzt nur noch etwas Software und wir sind fertig!
Wir schreiben nun eine Software, die nach einander alle LEDs einschaltet. Dann werden sie wieder komplett ausgeschaltet und der Vorgang beginnt von neuem.
Damit wir die drei Eingänge unseres Schieberegisters ansteuern können, müssen wir Pins am Arduino auf OUTPUT setzen, dies machen wir in der Funktion setup(). Diese Funktion wird immer beim Inbetriebnehmen des Arduinos gestartet sowie bei jedem Reset.
Danach wird vom Arduino die Hauptfunktion loop() aufgerufen, die zunächst alle LEDs in den Ausgangszustand versetzt. Danach werden in einer for-Schleife alle LEDs nach und nach eingeschaltet.
Jedes Mal wenn wir den Zustand einer LED ändern, müssen wir dies unserem IC über die eigens dafür geschriebene Funktion updateShiftRegister() mitteilen. Diese Funktion kümmert sich darum dass die Daten in den Schieberegister geschrieben werden, dazu wird die Arduino Funktion shiftOut aufgerufen. Nähere Informationen dazu findest du auf der offiziellen Arduino Webseite.