Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Deutsch
  • English
Menu

Arduino Lektion #100: Schieberegister 74HC595N N2B5

Posted on 9. Dezember 201916. Februar 2025 by Stefan Draeger

In diesem Beitrag möchte ich das Schieberegister 74HC595N N2B5 vorstellen.

Mit diesem Schieberegister kann man seine vorhandenen digitalen Pins um ein vielfaches erweitern.

  • Bezug
  • Technische Daten des Schieberegisters 74HC595N N2B5
  • Aufbau
  • Aufbau & Anschluss am Arduino
    • Aufbau der Schaltung
  • schreiben eines Wertes in das Schieberegister
  • Lauflicht mit dem Schieberegister realisieren
    • Video
  • Lauflicht vorwärts & rückwärts laufen lassen
  • mehrere Schieberegister mit einander verbinden
    • Aufbau mit zwei Schieberegister
    • Text „XMAS“ mit 16 LEDs
      • 3D Druck Modelle
      • Vorbereitung
      • Quellcode
      • Video
  • Quellenangabe

Bezug

Es gibt die Schieberegister in größeren Verpackungseinheiten (5,10 usw.) mit diesen Packungen spart man auf ebay.de deutlich gegenüber dem kauf eines einzelnen Chips.

Auf ebay.de* kann man zbsp. das Schieberegister im 10er-Pack für ca. 4 € aus China bestellen.

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Technische Daten des Schieberegisters 74HC595N N2B5

  • 8bit,
  • Sockel 16 DIP,
  • Betriebsspannung 2VDC bis 6VDC
  • Ausgangsstrom 35mA
  • Betriebstemperatur -40 °C bis 85 °C

Aufbau

Der Chip verfügt über 16 Pins welche wie folgt belegt sind.

Pinbelegung des Schieberegisters 74HC595N
Pinbelegung des Schieberegisters 74HC595N
PinBeschreibung
Q0 … Q7Ausgangspins 0 bis 7
GNDGround
VCC5V Anschluss
DSSerieller Eingang
OEEin -/ Ausschalten der Ausgangspins
STCPShift Register, beim Wechsel von LOW auf HIGH wird das an DS anliegende Bit um eine Stelle weiter geschoben
SHCPStorage Register, beim Wechsel von LOW auf HIGH werden die Daten des Schieberegisters in das Speicherregister übertragen.
MRZurücksetzen des Speicher & Schieberegisters
Q7SPin für den Anschluss eines weiteren Schieberegisters

Aufbau & Anschluss am Arduino

Für den Anschluss des Schieberegisters am Arduino benötigt man nur ein paar Breadboardkabel (6 Stück) und natürlich für die Ausgänge (pro Schieberegister 8 Stück).

In meinem Beispiel verwende ich einen Arduino Nano V3.0 und ein 720 Pin Breadboard. Dieses Breadboard bietet genügend Platz für den Microcontroller, das Schieberegister sowie 8, 5mm LEDs.

Schieberegister 74HC595 am Arduino Nano
Schieberegister 74HC595 am Arduino Nano

Aufbau der Schaltung

Nachfolgend möchte ich zeigen wie du das Schieberegister am Arduino Nano V3.0 mit 8 LEDs anschließen kannst.

Aufbau der Schaltung - Schieberegister am Arduino Nano V3.0
Aufbau der Schaltung – Schieberegister am Arduino Nano V3.0
ArduinoSchieberegister
digitaler Pin D8 SHCP
digitaler Pin D9 STCP
digitaler Pin D10  DS

schreiben eines Wertes in das Schieberegister

Das Schieberegister 74HC595 verfügt über 8 digitale Ausgänge, d.h. wir können mit einem solchen Element 8 Aktoren betreiben. Im nachfolgenden Beispiel möchte ich 8 LEDs im Zustand verändern.

int shiftPin = 8; //SHCP
int storePin = 9; //STCP
int dataPin = 10; //DS

//Status der einzelnen LEDs
int led1 = 1;
int led2 = 1;
int led3 = 1;
int led4 = 1;
int led5 = 1;
int led6 = 1;
int led7 = 1;
int led8 = 1;

//maximale Anzahl der LEDs
//(Wenn ein weiteres Schieberegister angeschlossen wird
//muss diese Zahl ensprechend erhöht werden.)
const int ANZAHL_LEDS = 8;

//Array mit Daten für das Schieberegister.
int muster[ANZAHL_LEDS] = {
    led1,led2,led3,led4,
    led5,led6,led7,led8
    };
 
void setup() {
 //setzen der Pins als Ausgang
 pinMode(storePin, OUTPUT);
 pinMode(shiftPin, OUTPUT);
 pinMode(dataPin, OUTPUT);

 //setzen des Pins am digitalen Pin D8
 //auf LOW quasi Status "AUS"
 digitalWrite(storePin, LOW); 

 //Schleife über das Muster welches
 //auf das Schieberegister geschrieben
 //werden soll.
 for (int i=0; i<ANZAHL_LEDS; i++) {
  digitalWrite(shiftPin, LOW);
  digitalWrite(dataPin, muster[i]);
  digitalWrite(shiftPin, HIGH);
 }

  //aktivieren des Musters
 digitalWrite(storePin, HIGH);
}
 
void loop () {
 //bleibt leer
}

Der Code bewirkt das alle LEDs aktiviert werden. (led1 … led8 steht auf 1)

alle LEDs am Schieberegister 74HC595 aktiviert
alle LEDs am Schieberegister 74HC595 aktiviert

Wenn man nun eine LED deaktivieren möchte so kann man den Wert auf 0 setzen.

Lauflicht mit dem Schieberegister realisieren

Nachdem wir im ersten Beispiel ein einfaches Muster ausgegeben haben, wollen wir nun ein Lauflicht erstellen.

int shiftPin = 8; //SHCP
int storePin = 9; //STCP
int dataPin = 10; //DS

//globale Variable 
//dient als Index für die aktive LED
//im Lauflicht
int activeIndex = -1;

void setup() {
  //setzen der Pins als Ausgang
  pinMode(storePin, OUTPUT);
  pinMode(shiftPin, OUTPUT);
  pinMode(dataPin, OUTPUT);

  //setzen des Pins am digitalen Pin D8
  //auf LOW quasi Status "AUS"
  digitalWrite(storePin, LOW);
}

void loop () {
  writeMuster();
  //eine kleine Pause von 150ms.
  delay(150); 
}

void writeMuster() {
  //den aktiven Index um 1 erhöhen
  ++activeIndex;
  //Das "Ausgangsmuster" wo alle LEDs 
  //deaktivert sind.
  int muster[8] = {0, 0, 0, 0, 0, 0, 0};

  //Wenn der aktive Index größer als die
  //maximale Anzahl der LEDs ist, dann...
  if (activeIndex > 7) {
    activeIndex = 0; //den activen Index auf 0 setzen.
    //Dieses sorgt dafür dass, das Lauflicht wieder von vorne beginnt.
  }

  //den Wert im Array manipulieren
  //es wird an der Stelle "x" im Array eine 1 gesetzt
  muster[activeIndex] = 1;

  //Von 0 bis 8 mache...
  for (int i = 0; i < 8; i++) {
    digitalWrite(shiftPin, LOW);
    digitalWrite(dataPin, muster[i]);
    digitalWrite(shiftPin, HIGH);
    Serial.print(muster[i]);
  }
  //schreiben der Daten
  digitalWrite(storePin, HIGH);
  delay(20); //eine kleine Pause
  //zurücksetzen 
  digitalWrite(storePin, LOW);
}

Video

Lauflicht vorwärts & rückwärts laufen lassen

Nachfolgend der Code um das Lauflicht vorwärts & rückwärts laufen zu lassen.

// Definition der Pins für das Shift-Register (74HC595)
int shiftPin = 8;  // SHCP (Schieberegister-Takt)
int storePin = 9;  // STCP (Latching, Speichern der Daten)
int dataPin = 10;  // DS (Dateninput für das Register)

// Bitmuster für das Lauflicht (Indexwerte für aktive LEDs)
int lauflicht[14] = { 1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1 };

// Globale Variable zum Speichern der aktuell aktiven LED-Position
int activeIndex = -1;  // Start bei -1, wird in writeMuster() inkrementiert

bool forward = true;  // Gibt an, ob das Licht vorwärts oder rückwärts läuft

void setup() {
  Serial.begin(9600);  // Serielle Kommunikation starten (9600 Baud)

  // Setzen der Pins als Ausgang
  pinMode(storePin, OUTPUT);
  pinMode(shiftPin, OUTPUT);
  pinMode(dataPin, OUTPUT);

  // Initialisieren des Store-Pins auf LOW (keine Daten gespeichert)
  digitalWrite(storePin, LOW);
}

void loop() {
  writeMuster();  // Bitmuster an das Shift-Register senden
  delay(150);     // Kleine Pause von 150 ms für das Lauflicht
}

void writeMuster() {
  activeIndex++;  // Erhöht den Index für das nächste Bitmuster

  // Falls der Index größer als 13 wird, auf 0 zurücksetzen (Restart des Musters)
  if (activeIndex > 13) {
    activeIndex = 0;
  }

  // Schieberegister mit neuen Werten befüllen
  for (int i = 0; i < 8; i++) {  // 8-Bit-Schieberegister durchlaufen
    digitalWrite(shiftPin, LOW);  // Schiebetakt-Pin auf LOW setzen

    // Prüfen, ob das aktuelle Bit dem Muster entspricht, falls ja, HIGH setzen
    digitalWrite(dataPin, (lauflicht[activeIndex] == i ? 1 : 0));

    // Schiebetakt-Pin auf HIGH setzen, damit das Bit ins Register geladen wird
    digitalWrite(shiftPin, HIGH);

    // Debug-Ausgabe in die serielle Konsole (zeigt den aktuellen Zustand)
    Serial.println("IDX" + String(activeIndex) + ">>" + String(lauflicht[activeIndex] == i ? 1 : 0));
  }

  // Speichern der neuen Werte im Schieberegister (Daten auf Ausgänge übernehmen)
  digitalWrite(storePin, HIGH);
  delay(20);  // Kurze Pause für Stabilität
  digitalWrite(storePin, LOW);  // Zurücksetzen des Store-Pins
}

mehrere Schieberegister mit einander verbinden

Bisher habe ich nur ein Schieberegister an den Arduino Nano V3.0 angeschlossen. Eigentlich bräuchte man für die bisherigen Aufgaben kein Schieberegister denn der Arduino Nano verfügt über 13 digitale Pins welche frei programmiert werden können. Somit könnte man also auch 13 LEDs anschließen und ein Lauflicht etc. aufbauen. 

Nun möchte ich jedoch 16 LEDs an dem Microcontroller betreiben und somit werden min. 2 Schieberegister benötigt.

Aufbau mit zwei Schieberegister

Das erste Schieberegister wird wie aus dem ersten Beispiel angeschlossen.

zwei Schieberegister /4HC595 am Arduino Nano
zwei Schieberegister /4HC595 am Arduino Nano
ArduinoSchieberegister #1Schieberegister #2
digitaler Pin D8 SHCP SHCP
digitaler Pin D9 STCP STCP
digitaler Pin D10  Q7S DS

Die Pins für die 16 LEDs sind mit blauen Drähten „markiert“.

Text „XMAS“ mit 16 LEDs

Da dieser Beitrag zum 09.12.2019 veröffentlicht wird, möchte ich nun ein ein Beispiel passend zur Weihnachtszeit präsentieren.

Text "XMAS" für 16 LEDs
Text „XMAS“ für 16 LEDs

Der Schriftzug verfügt über 6 Löcher, mit einem Durchmesser von 5mm für die Aufnahme von LEDs. Erstellt habe ich die Buchstaben mit dem Onlinetool TinkerCad.com und gedruckt wurden diese mit dem 3D Drucker Creality Ender2.

3D Druck Modelle

Hier findest du diese Modelle zum bequemen Download.

Schriftzug „XMAS“ für 16 LEDsHerunterladen

Vorbereitung

Für den betrieb müssen wir zunächst die 16 LEDs mit entsprechende Vorwiderstände und einer Platine verbinden.

Wir benötigen dazu:

  • 16x LED, 5mm, rot,
  • 16x Vorwiderstand, 220 Ohm,
  • 16 Stiftleisten, Rastermaß 2,54mm
  • 1x Lochrasterplatine,
  • 1x ca.1m, 0,20mm Kupferdraht (jeweils weiß & lila)

Sowie

  • Lötkolben, Lötzinn, hitzebeständige Unterlage
  • Seitenschneider
Platine mit Vorwiderständen für die LEDs
Platine mit Vorwiderständen für die LEDs

Quellcode

Arduino Quellcode für den Schriftzug „XMAS“Herunterladen

Video

Quellenangabe

Für dieses Tutorial habe ich mir zuvor die Informationen des Beitrages „Das Schieberegister 74HC595 am Arduino“ vom Makerblog.at durchgelesen und durchgearbeitet, daher werden sich sicherlich einige Elemente in diesem Beitrag wiederfinden.

9 thoughts on “Arduino Lektion #100: Schieberegister 74HC595N N2B5”

  1. Norbert Olinger sagt:
    16. Februar 2020 um 18:37 Uhr

    Ich finde die Erklärungen angemessen,
    Mich hat der Beitrag positive angesprochen.
    Ich möchte den Beitrag der 2 Schieberegister test weise aufbauen.
    Für die Probleme die sich sicherlich noch einstellen,
    bitte ich jetzt schon um Unterstützung.
    Mein Ziel wird sein, unterschiedliche Funktionen aufzurufen.

    Antworten
    1. Stefan Draeger sagt:
      16. Februar 2020 um 19:26 Uhr

      Hi,

      danke für dein Kommentar.
      Gerne helfe ich dir weiter.
      Du kannst dich gerne per E-Mail (info@draeger-it.blog) oder über das Kontaktformular an mich wenden.

      Gruß,

      Stefan Draeger

      Antworten
  2. Bernd sagt:
    3. Dezember 2020 um 22:00 Uhr

    Hallo,
    Super Anleitung, vielen Dank.
    Kurze Frage:
    wieso werden die LEDs hier so „durcheinander“ zugeordnet?
    zB:
    void x(int led1, int led2, int led3, int led4, int led5){
    leds[0] = led2;
    leds[1] = led1;
    leds[2] = led3;
    leds[3] = led5;
    leds[4] = led4;
    }

    Danke und schöne Vorweihnachtszeit
    Bernd

    Antworten
    1. Stefan Draeger sagt:
      4. Dezember 2020 um 10:14 Uhr

      Hallo Bernd,

      bei der Verkabelung ist mir aufgefallen das die positionierten LEDs nicht ganz mit den Reihen / Spalten passte, daher habe ich das im Code entsprechend angepasst.

      Gruß,

      Stefan Draeger

      Antworten
  3. Peter Tanzer sagt:
    4. Dezember 2020 um 21:09 Uhr

    Hallo Stefan,
    muss bei „schreiben eines Wertes in das Schieberegister“ nicht das digitalWrite(storePin, LOW); am Anfang und am Ende digitalWrite(storePin, HIGH); in die for Schleife mit rein? Sonst speichert er den Wert nicht. Ist bei mir so. Habe es auf einem ESP8266 D1 mini probiert.
    Aber super Anleitung. Ohne die wäre ich nicht im Ansatz auf die Lösung gekommen. Die PIN Bezeichnung ist bei jedem Bord unterschiedlich. Hatte beim D1 mini mit shiftPin = D5, storePin = D6, dataPin = D7, Erfolg. Vielleicht nützt es jemanden. Viele Grüße und vielen Dank für den guten Einstieg!
    Gruß, Peter

    Antworten
  4. Stefan Vrampe sagt:
    15. März 2021 um 20:22 Uhr

    Vorsicht mit dieser Schaltung. Das Datenblatt von TI gibt 35 mA pro Ausgang als zulässige Leistung an, bei 220 Ohm kommen da schon 23 mA raus; ist also kein Problem.
    Die maximale Leistung durch VCC oder GND wird aber mit 70 mA angegeben. Bei mehr als drei eingeschalteten LEDs wird der Chip deutlich ausserhalb seiner Spezifikation betrieben.

    Soll die Schaltung dauerhaft stabil betrieben werden, würde ich Treiber nachschalten, z.B. einen aus der ULN2001 bis ULN2004 Reihe.

    Antworten
  5. Jörn sagt:
    21. Juli 2021 um 22:39 Uhr

    Hallo Stefan,

    dein X-Mas Schriftzug hat mich auf eine ähnliche Idee gebracht.

    Ich möchte gerne eine Leuchtreklame mit 7 Buchstaben (jeweils mit 4 bis 9 Leds pro Buchstaben) also insgesamt 50 Led illuminieren. Die Buchstaben sollen der Reihe nach aufleuchten und dann zusammen blinken bzw. faden.

    Kann ich das mit einem Schieberegister realisieren? Ich brauche doch dafür pro Buchstaben nur ein Beinchen vom Schieberegister mit dann z.B. parallel 9 Leds, oder?

    Zusätzlich möchte ich weitere 14 Leds gleichzeitig aber unterschiedlich faden lassen.
    Geht das mit einem weiteren Pin-Beinchen?

    Vielen Dank und viele Grüße
    Jörn

    Antworten
  6. Pingback: Vorstellung RFID Starter Kit für den Arduino UNO R3 - Technik Blog
  7. Pingback: LED Bargraphanzeigen & Joystick am MAKER Nano - Technik Blog

Schreibe einen Kommentar Antworten abbrechen

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

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}