unterputz_schalter_zwei_wippen


Google-Suche auf MEINE-SCHALTUNG.de :





Dauerkalender


Arduino & Schieberegister 74HC595


Eine weitere Möglichkeit, Ausgänge für bestimmte Aufgaben zu sparen, stellt der Einsatz eines Schieberegisters dar. In dem folgenden Versuch wird eine 7-Segment-Anzeige mit dem Schieberegister 74HC595 angesteuert. Die Regie bei der Aufgabe übernimmt Arduino.

pin_belegung_74hc595

74HC595 - Pinbelegung


Das Schieberegister 74HC595 benötigt in der einfachsten Anwendung lediglich drei Signale. Mit dem Arduino-Ausgang Nr. 44 stellen wir die notwendigen Daten zur Verfügung. Der Ausgang wird mit dem Pin Nr. 14 (DS) des Schieberegisters verbunden. Der Arduino-Ausgang Nr. 40 wird mit dem Pin Nr. 11 (SHCP) des Schieberegisters verbunden. Mit dem Ausgang wird das Schreiben der Daten in das Shift Register angestoßen. Und schließlich werden mit dem Arduino-Ausgang Nr. 42, der mit dem Pin Nr. 12 (STCP) des Schieberegisters verbunden wird, die Daten in den Ausgabespeicher (Latch) geschoben. Da der Pin Nr. 13 dauerhaft mit Masse verbunden ist, werden die Ausgänge von 74HC595 daraufhin sofort entsprechend der aktuellen Werte ein- bzw. ausgeschaltet.

7-Segment-Anzeige

7-Segment-Anzeige


Damit auf der 7-Segment-Anzeige verständliche Zeichen erscheinen, müssen die Verbindungen zwischen der Anzeige und dem Schieberegister anschließend bei der Daten-Bildung berücksichtigt werden.

Der Schaltplan

Schaltplan

Schaltplan

Das Programm

// ----------------------------------------------------------
// Arduino mit Schieberegister 74HC595
// und 7-Segment-Anzeige (Februar 2020)
// ----------------------------------------------------------
int SH_CP_Pin = 40;
int ST_CP_Pin = 42;
int DS_Pin = 44;

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};
 
void setup() {
 pinMode(ST_CP_Pin, OUTPUT);
 pinMode(SH_CP_Pin, OUTPUT);
 pinMode(DS_Pin, OUTPUT);
}
 
void loop () {
 for (int i=0; i<11; i++) {
   digitalWrite(ST_CP_Pin, LOW);
   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 (500);
 }
} 
// ----------------------------------------------------------
        


In dem Programm erfolgt das Reinschreiben der Daten in das Schieberegister sozusagen "zu Fuß":

 for (int i=0; i<11; i++) {
   digitalWrite(ST_CP_Pin, LOW);
   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 (500);
 }


Man kann diese Programmsequenz etwas kürzer gestalten. Hierzu kann man den Arduino-Befehl "shiftOut" einsetzen, der sich dann automatisch um die "Bits – Schieberei" kümmert. Der Programmteil würde dann wie folgt aussehen:

 for (int i=0; i<11; i++) {   
     digitalWrite(ST_CP_Pin, LOW);
     shiftOut(DS_Pin, SH_CP_Pin, LSBFIRST, Satz[i]);  
     digitalWrite(ST_CP_Pin, HIGH);        
     delay (500);  
 }


Die Testschaltung

Testschaltung

Testschaltung

Kurzvideo

Kurzvideo


Schieberegister



Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz