sps_siemens_et_200sp


Google-Suche auf MEINE-SCHALTUNG.de :





Dauerkalender


Schieberegister 74HC595 - Reihenschaltung


Das Schieberegister 74HC595 stellt mit dem Pin 9 einen seriellen Ausgang zur Verfügung, mit dem eine Reihenschaltung der Bausteine möglich ist. Auf dem Wege ist eine weitere Ausgangsvervielfältigung möglich. In dem Beispiel für eine Schieberegister-Reihenschaltung werden drei Schieberegister 74HC595 hintereinander geschaltet. Um die Funktionalität zu veranschaulichen, kommen als Abnehmer drei 7-Segmentanzeigen zum Einsatz. Hier werden mit lediglich drei Signalen (Drei Arduino-Ausgänge) 24 neue Ausgänge bereitgestellt. Das Prinzip der Reihenschaltung (Kaskadenschaltung) stellt folgende Abbildung dar:

prinzip_schieberegister_reihenschaltung


74HC595 - Pinbelegung

74hc595_anschluesse

Beim Einsatz eines einzigen Schieberegisters hat das letzte Bit stets schlechte Karten. Sobald ein neues Bit reingeschoben wird, muss das letzte Bit Abschied nehmen und geht verloren. In einer Reihenschaltung ändern sich die Verhältnisse. Das Schieben geht weiter und der letzte Wert landet als erstes Bit bei dem darauf folgenden Schieberegister. Um das zu ermöglichen, muss der Pin 9 (hier landet das letzte Bit, bevor es verloren geht) mit dem Pin 14 des folgenden Schieberegisters verbunden werden. Erst wenn das Bit durch alle in Reihe geschalteten Schieberegister gewandert ist, entgeht es seinem Schicksal nicht und muss endgültig Abschied nehmen.

Der Schaltplan

Schaltplan (Teil 1)

Schaltplan (Teil 1)

Schaltplan (Teil 2)

Schaltplan (Teil 2)

Schaltplan (Teil 3)

Schaltplan (Teil 3)


Das Programm

In dem Programm wird ein Array, das die Ziffern 0-9 und den Punkt enthält, definiert. Jede Ziffer wird als eine Bitfolge (Byte) dargestellt. Die Bits – Übertragung erfolgt in einer For-Schleife. Die Vorgehensweise, um die Bits in das Schieberegister zu schreiben, sieht wie folgt aus:

Der Eingang ST_CP (Pin 12) steht auf Low.

1 – Der Eingang des Schieberegisters SH_CP wird auf Low gesetzt (Pin 11).
2 – Der gewünschte Wert wird auf die Leitung DS gesetzt (0 – Low, 1 – High, Pin 14)
3 - Mit SH_CP = High (Pin 11) wird der Wert in das Schieberegister geschrieben (Shift Register).
4 – der Vorgang 1-3 wird wiederholt, bis alle Werte drin sind.

Nachdem alle Bits in gewünschter Reihenfolge übertragen wurden, werden sie mit ST_CP = High (Pin 12) in den Speicher (Latch) des Schieberegisters übertragen. Sobald der Pin 13 (Enable) auf Masse geschaltet wird, werden die Ausgänge entsprechend der Bits Reihenfolge ein- bzw. ausgeschaltet.

Solange der Schalter S1 nicht betätigt wird, kümmert sich das Programm nur um das erste Schieberegister. Wird hier z.B. die Ziffer "5" übertragen, landet die Ziffer "4", die davor in seinem Speicher stand, in dem zweiten Schieberegister. Dies geschieht automatisch. Folglich wandert die Ziffer "3", die in dem zweiten Schieberegister stand, zu dem dritten.

Wird der Schalter betätigt, werden zuerst alle drei Schieberegister mit Bits gefuttert, bevor es zur Pause kommt, in der wir das Ergebnis betrachten können. Hier wird also gezielt solange "geschoben", bis alle drei Register gewünschte Werte beinhalten. In diesem Fall erscheint auf jeder 7-Segmentanzeige die gleiche Ziffer.

// *************************************************************
// Schieberegister 74HC595 Reihenschaltung
// Mit Arduino Mega 2560 und 7-Segmentanzeige
// *************************************************************
int SH_CP_Pin = 40;
int ST_CP_Pin = 42;
int DS_Pin = 44;
int Schalter = 8;

byte Z0 = B11111100;
byte Z1 = B01100000;
byte Z2 = B11011010;
byte Z3 = B11110010;
byte Z4 = B01100110;
byte Z5 = B10110110;
byte Z6 = B10111110;
byte Z7 = B11100000;
byte Z8 = B11111110;
byte Z9 = B11110110;
byte P =  B00000001;

int Satz[] = {Z0, Z1, Z2, Z3, Z4, Z5, Z6, Z7, Z8, Z9, P};
int Alle;
 
void setup() {
 pinMode(ST_CP_Pin, OUTPUT);
 pinMode(SH_CP_Pin, OUTPUT);
 pinMode(DS_Pin, OUTPUT);
 pinMode(Schalter, INPUT_PULLUP);
}
 
void loop () {
 for (int i=0; i<11; i++) {
   digitalWrite(ST_CP_Pin, LOW);
   Alle = 1;
   if (digitalRead(Schalter) == LOW) {
      Alle = 3;
    }
   for (int k=0; k<Alle; k++) {
     for (int j=0; j<8; j++) {
       digitalWrite(SH_CP_Pin, LOW);            
       digitalWrite(DS_Pin, bitRead(Satz[i],j));       
       digitalWrite(SH_CP_Pin, HIGH);            
     }
   }
   digitalWrite(ST_CP_Pin, HIGH);
   delay (1000);
 }
}        
// *************************************************************


Testschaltung

Testschaltung



Kurzvideo

Kurzvideo


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz