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


    9 Gedanken zu „Arduino per Schieberegister 74HC595 erweitern“

    1. Pingback: Tic-Tac-Toe mit dem Arduino selber bauen - reichelt Magazin

    2. Pingback: Tic-Tac-Toe mit dem Arduino – reichelt Magazin

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

      2. 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?

    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.