Zum Inhalt springen
Schieberegister 74hc595 Arduino

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 Schieberegisters 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.


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    Interessanterweise 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:

    Alle Schaltungen hier sind mit der Fritzing-Software erstellt.

    Code für das Schieberegister 74HC595

    Hier findest du den Code für ein 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


    Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!

    • Die beliebtesten Arduino-Projekte von StartHardware
    • Inklusive Schaltplan, Beschreibung und Code
    • Arduino-Schnellstart-Kapitel
    • Kompakter Programmierkurs


    0 0 votes
    Article Rating
    Abonnieren
    Benachrichtige mich bei

    Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..

    7 Comments
    Newest
    Oldest Most Voted
    Inline Feedbacks
    Alle Kommentare anzeigen
    1 Jahr zuvor

    sorry, habs gerade gesehen, Sketch ist ok, meine Bemerkung war falsch, Kommentar kann meinetwegen raus

    Werner-Wilhelm Bergmann
    2 Jahre zuvor

    Ich habe eine Ampelsteuerung mit 52 LED’s an 52 Pins am Arduino Mega.
    Kann man so etwas auch mit Schieberegistern realisieren?

    heinz
    5 Jahre zuvor

    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

    heinz
    Antworte an  Stefan Hermann
    5 Jahre zuvor

    Danke, dann mach ich mich mal auf die Suche
    Gruss Heinz

    Antworte an  heinz
    1 Jahr zuvor

    Ist da evtl. ein Fehler im Fritzing Sketch für 2 Schieberegister?
    So wie gezeigt arbeiten die beide parallel.
    Müsste nicht der Eingang des zweiten Schieberegisters mit dem Ausgang des ersten verbunden sein?

    7
    0
    Ich würde mich über deine Meinung freuen.x