Arduino Mikrocontroller

Schieberegister - SIPO (Bsp. 74HC595)

Bild Schieberegister 74HC595

Ein SIPO (Serial In Parallel Out) Schieberegister dient meist dazu eine begrenzte Anzahl von Ausgangspins zu erhöhen. Mit nur drei Leitungen vom Mikrocontroller (DS, SHCP und STCP) kann man mit einem Schieberegister 8 parallele Ausgänge ansteuern. Die Schieberegister lassen sich über den Pin Q7* auch kaskadieren, so dass man mit drei Leitung eine theoretisch unbegrenzte Anzahl an Ausgängen ansteuern kann.

Pinbelegung
VCC Spannungsversorgung +2-6V
GND Masse -
DS Daten Input seriell
SHCP Shift Clock Pin
STCP Storage Clock Pin
Q0 - Q7 Parallele Ausgänge
Q7* Überlauf (gleiches Bit wie Q7)
OE Output Enabler (aktive LOW)
MR Memory Reset (aktive LOW)

Pinbelegung

Ein SIPO Shiftregister wird über den Eingang DS mit den seriellen Daten versorgt. Jedes Mal wenn ein Shift-Clock-Impuls (SHCP) kommt, wird der anliegende Pegel am Eingang DS (HIGH oder LOW) abgegriffen und gespeichert. Immer wenn von DS ein neuer Pegel gespeichert wird, werden die vorher gespeicherten Pegel einen Speicherplatz weitergeschoben. In Summe hat das Register 8 Speicherplätze. Werden mehr als 8 Pegel in das Register geschrieben „fallen“ die zuerst gespeicherten Werte aus dem Speicherbereich heraus und sind nicht mehr vorhanden. Über den Anschluss Q7* lassen sich jedoch die überlaufenden Daten abgreifen und bei einem zweiten Schieberegister wieder als DS Eingang einspeisen. Mit zwei Register kann man also 16 Pegel hintereinander gesendeter Daten speichern.

Durch einen kurzen HIGH Impuls an STCP (Storage-Clock-Pin) werden zeitgleich alle Signale an die Ausgänge (Q0-Q7) geschalten. Die Pegel an den Ausgängen bleiben unabhängig von einer parallel laufenden Neubefüllung über den seriellen Eingang DS anliegend, bis über STCP ein weiteres Mal die Registerspeicher an die Ausgänge übertragen werden.

Der Enable Pin EN ist nochmal ein Schalter an den Ausgängen. Damit lassen sie die Ausgänge (alle gleichzeitig) ein oder abschalten. Wenn EN fest mit GND verbunden ist, sind die Eingänge immer eingeschaltet.

Verbindet man den Memory Reset Pin (MR) mit GND (oder LOW) lassen sich die 8 Speicherregister löschen. Mit einem anschließenden STCP Impuls werden die LOW Pegel dann an die Ausgänge geschaltet. In der Schaltung kann der MR Pin fest mit VCC verbunden werden. Das löschen der Pins kann problemlos softwareseitig erfolgen indem man 8 LOW Pegel einspulst und dann an die Ausgänge überträgt.

Die Ausgänge können mit 35mA belastet werden. Problemlos um LED’s direkt anzusteuern.

Aufbau und Funktion des SIPO Schieberegisters

Prinzip D-Flipflop als Basis des Schieberegisters

Das Schieberegister ist im Inneren mit D-Flipflops aufgebaut. Ein D-Flipflop überträgt einen Pegel am anliegenden Eingang D erst, wenn am Clock-Eingang eine positive Flanke registriert wird. Gleichzeitig mit der positiven Flanke wird der Eingangspegel auf den Ausgang Q übertragen. Das Ausgangssignal liegt solange an (bleibt gespeichert) bis eine neue positive Flanke registriert wird. Egal wie sich der Eingang bis dahin verändert. Die Länge des Clocksignals ist unerheblich und auch die fallende Flanke hat keine Auswirkung.

Im unteren Teil des Schaubildes sehen wir, wie die Daten über DS seriell eingespeist werden. Bei jedem Clocksignal wird der Eingangspegel an DS auf den Ausgang Q übertragen. Beim nächsten Impuls ist der erste Ausgang des D-Flipflops der Eingang des zweiten. Ein neuer Pegel wird vorne eingelesen und die bereits gespeicherten immer eine Position weitergeschoben.

Prinzip des Schieberegisters

Der Zustand an den jeweiligen Ausgängen Q der unteren Reihe von Flipflops liegen gleichzeitig an den Eingängen der oberen Ausgangs-Flipflops an. Durch einen Clock-Impuls an STCP werden diese Eingänge an die Ausgänge und damit an die Ausgangspins unseres IC’s übertragen. Hier sehen wir auch, das sich die Ausgänge erst ändern, wenn ein Clocksignal an STCP eingeht. Die Ausgänge Q0-Q7 bleiben dann bis zur nächsten positiven Flanke von STCP anliegend.

Schaltung und Programmcode

Für das Übertragen der serielle Daten gibt es auch eine bequeme Arduino Funktion. Mit shiftOut(DS, SHCL, LSBFIRST, Byte) lassen sich die Daten in das Register einlesen. Dabei kann man angeben wie das byte (es geht nur die Größe von einem byte) übertragen werden soll. LSBFIRST oder MSBFIRST.

Anschluss des SIPO Schieberegisters
#define DS 2 #define STCP 3 #define SHCP 4 // OE wird mit GND und MR dauerhaft mit VCC verbunden void setup() { pinMode(DS, OUTPUT); pinMode(SHCP, OUTPUT); pinMode(STCP, OUTPUT); } void loop() { byte DATA = B00111111; // wahlweise als for-Schleife for (int i = 0; i < 8; i++) { digitalWrite(SHCP, LOW); digitalWrite(DS, bitRead(DATA,i)); digitalWrite(SHCP, HIGH); } // ...oder als Arduino Funktion //shiftOut(DS, SHCP, LSBFIRST, DATA); digitalWrite(STCP, HIGH); digitalWrite(STCP, LOW); while (1); }