Arduino per Schieberegister 74HC595 erweitern

Das Schieberegister 74HC595 ist ein Integrierter Schaltkreis (IC), der es ermöglicht, die Ausgabekanäle des Arduino-Boards fast beliebig zu erweitern.

Funktionsweise

Im Grunde wandelt das Schieberegister 74HC595 serielle Daten in parallele Daten um. Das bedeutet, die Sequenz An-An-Aus-An-An-An-Aus-An (also 11011101) wird an das Schieberegister gesendet, welches diese Daten an seine eigenen Output-Pins (von 1 bis 8) schickt. Es schaltet also seinen Pin1 an, Pin2 auch, Pin 3 aus … und so weiter. Diese Pins bleiben in ihrem Zustand, bis über den Daten-In-Pin des Schieberegister neue Informationen ankommen.

Arduino Schieberegister 74HC595 Funktionsprinzip

Das Schieberegister erhält die seriell gesendeten Daten über den DS Pin. Damit es die einzelnen Daten unterscheiden kann, wird gleichzeitig über den Shift Register Clock Pin (SHCP) eine Art Herzschlag gesendet. Als letztes benötigt das 74HC595 noch eine Reset-Verbindung zum Arduino-Board. Damit werden also drei digitale Outputs vom Arduino benutzt.

Interessanter Weise lassen sich mehrere Schieberegister wie in einer Reihenschaltung hintereinander schalten. Dadurch erhöht sich die Anzahl möglicher Outputs, ohne dass die verwendeten Arduino-Pins mehr werden.

Arduino Schieberegister 74HC595 Funktionsprinzip bei mehrfachen Schieberegistern

Weitere Informationen findest du übrigens im Datenblatt.

Schaltplan

Der Schaltplan sieht auf den ersten Blick etwas komplex aus. Im Grunde werden aber nur die drei erwähnten digitalen Outputs vom Arduino-Board mit dem Schieberegister 74HC595 verbunden. Darüber hinaus wird der Chip mit GND und 5V+ verbunden.

Wichtig! Der Clock Pin des Schieberegisters (SHCP) muss über einen 100nF Keramikkondensator (Aufdruck 104) mit dem GND verbunden werden!

Die einzelnen Outputs Q0 – Q7 sind an LEDs mit Vorwiderständen angeschlossen.

Arduino Schieberegister 74HC595 Schaltplan

Hier noch der Schaltplan für mehrere Schieberegister:

Arduino Schieberegister 74HC595 Schaltplan bei mehrfachen Schieberegistern

Alle Schaltungen hier sind mit der Fritzing-Software erstellt.

Code für das Schieberegister 74HC595

Hier findest du den Code für einen einzelnes Schieberegister:

// Ursprüngliche Autoren  : Carlyn Maw,Tom Igoe, David A. Mellis 
// Programm zählt von 0 bis 255 und zeigt die Daten binär an

int latchPin = 8;
int clockPin = 12;
int dataPin = 11;

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
    // latchPin low um flackern der LEDs zu verhindern
    digitalWrite(latchPin, LOW);
    // Daten senden in MSBFIRST Reihenfolge (alternativ LSBFIRST)
    shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);  
    // latchPin high um Daten 'anzuzeigen'
    digitalWrite(latchPin, HIGH);
    // Pause
    delay(500);
  }
}

Hier findest du den Code für zwei Schieberegister:

// Ursprüngliche Autoren  : Carlyn Maw,Tom Igoe, David A. Mellis 
// Programm zählt von 0 bis 255 und zeigt die Daten binär an
// zwei Schieberegister, eines zählt hoch, eines runter

int latchPin = 8;
int clockPin = 12;
int dataPin = 11;

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  for (int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) {
    // latchPin low um flackern der LEDs zu verhindern
    digitalWrite(latchPin, LOW);
    // Daten senden in MSBFIRST Reihenfolge (alternativ LSBFIRST)
    shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay);
    shiftOut(dataPin, clockPin, MSBFIRST, 255-numberToDisplay);
    // latchPin high um Daten 'anzuzeigen'
    digitalWrite(latchPin, HIGH);
    // Pause
    delay(500);
  }
}

Weitere Infos

Das Schieberegister 74HC595 kann laut Datenblatt nur 25 - 35 mA an kontinuierlichem Strom pro Kanal zur Verfügung stellen. Eine interessante und wesentlich kräftigere Alternative dazu bietet der STP16C596. Dieses Schieberegister hält 16 Kanäle bereit, die jeweils einen Dauerstrom von bis zu 120 mA liefern. Hier wäre das Datenblatt zu finden.

Bezugsquellen

Hast du weitere Fragen? Probier doch mal unser brandneues Forum zu Arduino aus!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.