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

Ich würde mich freuen, wenn du diesen Beitrag bewerten würdest :-)

Durchschnittliche Bewertung 4.5 / 5. Anzahl Bewertungen: 2

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Deine Meinung ist mir sehr wichtig!

Lasse uns diesen Beitrag verbessern!

Wie kann ich den Beitrag verbessern? Was würdest du dir wünschen? Was hat dir gefehlt?

Ich hoffe, der Beitrag hilft dir weiter. Und falls du weitere Fragen hast, stelle sie gern hier im Arduino-Forum.

Du willst noch tiefer in die Materie einsteigen? Dann präsentiere ich dir die neuen E-Books von StartHardware:

  • 20 Lektionen
  • Projektbasiert und kurzweilig
  • Aus den Erfahrungen unzähliger Workshops
  • Sofortiger Download

  • Die beliebtesten Projekte von StartHardware
  • Mit Code, Schaltplan und Erklärungen
  • Fachwissen-Kapitel
  • Sofortiger Download


Willst du lieber ein Buch zum Anfassen? Dann werde mit diesem hier zum Arduino-Experten! Arduino: Kompendium: Elektronik, Programmierung und Projekte* – Damit lernst du alle Tricks!

3 thoughts on “Arduino per Schieberegister 74HC595 erweitern

  1. Hallo
    Ich weiss noch nicht viel und beschäftige mich erst seit kurzem mit Arduino Dingen.
    Meine Fragen
    Geht diese Verdrahtung auch mit zwei kleinen 7-Segment Anzeigen, statt den Leds?
    Würde es bei der 7-Segmentanzeige auch bei jedem Pin einen Vorwiderstand brauchen? Grösse?
    Für was ist der Keramikondensator notwendig?

    Grüsse Heinz

    1. Hallo Heinz,

      grundsätzlich würde das schon gehen. Jede LED braucht einen Vorwiderstand. Ich schlage 220 Ohm vor. Hängt aber von dem Display und der Versorgungsspannung ab. Besser ist es allerdings, einen Treiberbaustein zu verwenden, z.B. den HCT4511. Google den mal, da findest du bestimmt ein gutes Tutorial. Ich hab leider noch keines.

      Liebe Grüße

      Stefan

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.