Arduino Mikrocontroller

Schieberegister - PISO (Bsp. 74HC165)

Bild Schieberegister 74HC165

Ein PISO Shiftregister wird meist verwendet um bis zu 8 Eingänge (D0 - D7) gleichzeitig einzulesen und mit nur drei Leitungen an einen Mikrocontroller zu übertragen. Verbindet man den Ausgang der seriellen Daten (Q7*) mit dem seriellen Eingang (DS) eines zweiten Schieberegisters lassen sich in Summe 16 Eingänge an den Mikrocontroller übertragen. Theoretisch lassen sich beliebig viele 74HC165 aneinanderreihen.

Pinbelegung
VCC+ Spannungsversorgung 2-6V
GND- Masse
D0 - D7Parallele Eingänge
SH/LDAuswahl Shift- (HIGH) oder Load-Modus (LOW)
CPClock Pin zum shiften im Shift-Modus
CPENClock Pin Enabler (aktive LOW)
DSDaten Input seriell
Q7*Ausgang der Seriellen Daten)
Q7* INVinvertierter Ausgang der seriellen Daten

Pinbelegung

Wenn der SH/LD Pin auf GND gelegt wird, befindet sich das Schieberegister im Load-Modus. Jetzt werden alle Eingänge D0-D7 an die Schieberegister im innern des IC's übertragen. Das Clock-Signal hat im Load-Modus keine Auswirkung und wird falls anliegend ignoriert.

Nach dem die Eingänge geladen wurden, verbindet man SH/LD wieder mit VCC. Jetzt ist das Schieberegister im Shift-Modus und das erste Bit von D7 liegt bereits am Ausgang Q7* an. Sobald nun eine steigende Flanke des Clock-Signals erkannt wird werden die Daten eine Stufe in Richtung serieller Ausgang Q7* weitergeschoben und gleichzeitig wird beim Shifteingang DS ein neuer Pegel eingelesen. Nach 8 Shiftvorgängen sind alle ursprünglich parallel anliegenden Eingangspegel seriell hinaus geshiftet und an den Mikrocontroller übertragen.

Der CP EN und der CP Eingang gehen intern zusammen auf ein ODER Gatter. Die Pins sind daher austauschbar. Wichtig ist, dass der nicht benutzte Pin auf GND liegt. Läge er auf HIGH würde keine positive Flanke des am anderen Pin eingespeiste Clock-Signals erkannt werden.

Q7* und Q7* INV sind die Ausgänge des PISO Shiftregisters. Normalerweise wird der Q7* Pin verwendet. Aus diesem Ausgang kommen die Pegel nacheinander heraus wie sie ursprünglich in paralleler Form eingelesen wurden. Aus dem inversen Ausgang Q7* INV werden die Pegel umgedreht ausgegeben.

Die Eingänge können mit max. 20mA belastet werden.

Aufbau und Funktion des PISO 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 Clock-Signals ist unerheblich und auch die fallende Flanke hat keine Auswirkung.

In der unteren Abbildung wird die grundsätzliche Funktion eines PISO Shiftregisters dargestellt. Über den Pin SH/LD wird der Modus festgelegt. Ist der Pin LOW ist der Load-Modus aktiv (blaue Farbe). An den linken UND Gattern liegt dabei immer 0 an. Egal was die Ausgangspins Q für Pegel haben bleibt der Ausgang des linken UND Gatters somit immer auf 0.
An den rechten UND Gattern liegt über den invertierten SH/LD Pin eine 1 an. Der Output des UND Gatters ist somit abhängig vom Eingangspin (D0-D7). Ist dieser HIGH wid der Ausgang des rechten UND Gatters zu einer 1 und über das anschließende ODER Glied liegt auch am Eingang des Flipflops die 1 an. Bei einem LOW am Eingangspin liegt eine 0 am Flipflop-Eingang an.

Prinzip des PISO Schieberegisters

Anschließend wird der SH/LD Pin auf HIGH gelegt und das Register somit in den Shift-Modus versetzt (rote Farbe). Über die 0 am rechten UND Gatter werden die Eingangspins unabhängig deren Pegel nun nicht mehr betrachtet. Über das linke UND Gatter werden nun die Ausgänge der vorhergehenden Flipflops mit den Eingängen der nachfolgenden verbunden. Bei jedem Clock-Signal über CP werden so die Werte jeweils ein Flipflop weiter nach rechts geshiftet und am Ausgang Q7* ausgegeben.

Schaltung und Programmcode

Da das ersten Bit von D7 bereits nach dem Load-Modus am Ausgang Q7* anliegt muss dieses Bit zuerst gelesen werden bevor das Shiftregister mit dem Clocks-Signal CP weiter geshiftet wird. Die Arduino Funktion shiftIn() lässt sich deshalb leider nicht verwenden, da diese immer zuerst shiftet und dann den Pegel ausliest.

Anschluß des PISO Schieberegisters
#define Q7 5 #define CP 6 #define SHLD 7 void setup() { pinMode(Q7, INPUT); pinMode(CP, OUTPUT); pinMode(SHLD, OUTPUT); Serial.begin(9600); } void loop() { byte DATEN; // Kurzer Impuls zum laden der Eingänge D0-D7 digitalWrite(SHLD, LOW); digitalWrite(SHLD, HIGH); delay(1); for (int i = 0; i < 8; i++) { // Einlesen der Pegel .... bool D = digitalRead(Q7); DATEN = bitWrite(DATEN, i, D); // ... und um eine Stelle weiter shiften digitalWrite(CP, HIGH); digitalWrite(CP, LOW); } Serial.println(DATEN); delay(500); }