Sa. Mrz 2nd, 2024

Ein Schieberegister ist eine logische Schaltung, die mehrstellige binäre Signale taktgesteuert aufnehmen, speichern und wieder abgeben kann. Schieberegister ermöglichen die Transformation serieller Daten in parallele Daten und umgekehrt. Sie bestehen im Grunde aus hintereinander geschalteten D- oder JK-FlipFlops. Die Takteingänge aller Stufen werden zusammengeschaltet und über einen gemeinsamen Takt versorgt.

Da ein Flip-Flop nur ein Bit speichern kann, müssen je nach Anwendung mehrere Flip-Flops zu einem Schieberegister zusammengeschaltet werden. Bei dem weit verbreiteten IC vom Typ 74HC595 beispielsweise sind 8 FlipFlops integriert, so kann man mit lediglich 3 Arduino-Pins 8 Ausgangspins ansteuern.

Der Schaltkreis hat folgende Pin-Belegung:

Funktionsweise

Die Funktionsweise eines Schieberegisters kann man sichwie in obiger Abbildung vorstellen: Ein serieller Datenstrom wird über eine Datenleitung an den Daten-Pin DS des Bausteins übertragen. Solange das ShiftClock-Pin (SHCP) auf Low steht passiert vorerst gar nichts. Erst wenn ein Pegelwechsel von LOW nach HIGH am ShiftClock-Pin erfolgt, wird der Zustand der am DS-Pin anliegt in den Zwischenspeicher geschoben.

Funktions-Schema eines Schieberegisters

Dieser Vorgang kann beliebig oft wiederholt werden, bis der Zwischenspeicher voll ist oder genügend Daten aufgenommen wurden. Da ein Schieberegister genau genommen aus zwei Registern besteht: dem Schieberegister, in welches der Zustand der einzelnen Ausgangspins seriell, also Bit für Bit gesteuert über das ShiftClock-Pin (SHCP) geschoben wird. Und das Ausgangsregister, in das der Zustand des Schieberegisters über ein weiteres Signal am sogenannten Storage Register Clock-Pin (SRCP) hin kopiert wird.

Es handelt sich somit um zwei separierte Register deren Datenströme kontrolliert Über die Pegelwechsel von LOW nach HIGH an den beiden Steuer-Pins ShiftClock-Pin (SHCP) und Storage Register Clock-Pin (SRCP) zusammen gefügt werden können.

Beispiel Programm

//------------------------------
// Schiebregister Test
//------------------------------

int shiftPin = 4; //SH_CP_PIN
int storePin = 2; //ST_CP_PIN
int dataPin = 7;  //DS_PIN
// Dieses Muster soll ausgegeben werden
int muster[8] = {1,1,1,1,1,1,0,0}; 
 
void setup() {
 pinMode(storePin, OUTPUT);
 pinMode(shiftPin, OUTPUT);
 pinMode(dataPin, OUTPUT);
 
 digitalWrite(storePin, LOW); // storePin sicherheitshalber auf LOW

 for (int i=0; i<8; i++) {
     digitalWrite(shiftPin, LOW);
     digitalWrite(dataPin, muster[i]);
     digitalWrite(shiftPin, HIGH);
    } // end for
 
// wenn alle Daten übertragen, auf Ausgabe schalten   
 digitalWrite(storePin, HIGH);
}
 
void loop () {
}

 

Mehrere Schieberegister zusammenschalten

Als Beispiel für die Möglichkeiten mehr als 8 Ausgänge zu steuern, habe ich eine Schaltung mit 3 IC 74595 entwickelt. Aufgebaut als Experimentierplattform für den Arduino und entsprechenden Anschlussmöglichkeiten auf einer Lochrasterplatine prototypisch umgesetzt.

Prototyp einer 24Bit-Port-Erweiterung mit 3 IC 74595 Bausteinen

Die Ansteuerung erfolgt wie bei einem einzelnen Schaltkreis d.h. alle Steuersignale an den Pins SHCP und SRCP werden parallel an alle ICs angeschlossen. Nur die DS-Leitungen der zweiten und folgenden Schieberegister werden kaskadiert. Dh. der Überlauf-Ausgang Q7S des ersten Schieberegisters wird mit dem DS-Eingang des 2. Registers verbunden usw. Das folgende Blockschaltbild verdeutlicht das Prinzip.