Bemerkung
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Vertiefen Sie sich mit anderen Enthusiasten in die Welt von Raspberry Pi, Arduino und ESP32.
Warum beitreten?
Expertenunterstützung: Lösen Sie Probleme nach dem Verkauf und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
Lernen & Teilen: Austausch von Tipps und Anleitungen zur Verbesserung Ihrer Fähigkeiten.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Giveaways: Nehmen Sie an Giveaways und Feiertagsaktionen teil.
👉 Sind Sie bereit, mit uns zu erkunden und zu kreieren? Klicken Sie auf [hier] und treten Sie heute bei!
5.1 Verwendung des 74HC595-Schieberegisters
In dieser Lektion lernen wir, wie man das 74HC595-Schieberegister verwendet, um mehrere LEDs mit nur wenigen GPIO-Pins am Raspberry Pi Pico 2 zu steuern. Der 74HC595 ist ein integrierter Schaltkreis (IC), der es ermöglicht, die Anzahl der digitalen Ausgänge durch serielle Eingabe zu erweitern. Dies ist besonders nützlich, wenn viele Ausgänge gesteuert werden müssen, aber nur begrenzte GPIO-Pins zur Verfügung stehen.
Benötigte Komponenten
Für dieses Projekt benötigen wir die folgenden Bauteile.
Ein komplettes Kit ist besonders praktisch, hier ist der Link:
Name |
ENTHALTENE TEILE IM KIT |
LINK |
|---|---|---|
Newton Lab Kit |
450+ |
Alternativ können die Komponenten auch einzeln über die untenstehenden Links erworben werden.
SN |
KOMPONENTE |
MENGE |
LINK |
|---|---|---|---|
1 |
1 |
||
2 |
Micro-USB-Kabel |
1 |
|
3 |
1 |
||
4 |
Mehrere |
||
5 |
8 (220Ω) |
||
6 |
8 |
||
7 |
1 |
Funktionsweise des 74HC595-Schieberegisters
Das 74HC595 ist ein 8-Bit-Serial-In, Parallel-Out-Schieberegister mit Ausgangsspeicher. Es ermöglicht die Umwandlung von seriellen Daten in parallele Ausgaben und erlaubt somit die Steuerung von bis zu 8 Ausgängen mit nur 3 GPIO-Pins des Pico.
Wichtige Pins des 74HC595:

DS (Pin 14): Serielle Dateneingabe
SHCP (Pin 11): Schieberegister-Takteingang
STCP (Pin 12): Speicheregister-Takteingang (Latch-Pin)
OE (Pin 13): Ausgangsaktivierung (Low-aktiv, mit GND verbinden)
MR (Pin 10): Master-Reset (Low-aktiv, mit 3.3V verbinden)
Q0-Q7 (Pins 15, 1-7): Parallele Ausgänge
VCC (Pin 16): Mit 3.3V verbinden
GND (Pin 8): Mit GND verbinden
Schaltplan

Verdrahtungsdiagramm
Code schreiben
Wir schreiben ein Programm, das die LEDs steuert, die mit dem 74HC595-Schieberegister verbunden sind. Dabei werden die LEDs nacheinander eingeschaltet.
Bemerkung
Sie können die Datei
5.1_microchip_74hc595.inoaus dem Verzeichnisnewton-lab-kit/arduino/5.1_microchip_74hc595öffnen.Oder diesen Code in die Arduino IDE kopieren.
Wählen Sie das Raspberry Pi Pico 2 Board und den richtigen Port aus und klicken Sie auf „Hochladen“.
// Pins für das 74HC595 definieren
const int DS = 0; // GPIO 0 -> DS (Pin 14)
const int SHCP = 1; // GPIO 1 -> SHCP (Pin 11)
const int STCP = 2; // GPIO 2 -> STCP (Pin 12)
// Binäre Muster zur LED-Steuerung
int datArray[] = {
0b00000000, // Alle LEDs aus
0b00000001, // LED 0 an
0b00000011, // LEDs 0 und 1 an
0b00000111, // LEDs 0, 1 und 2 an
0b00001111, // LEDs 0, 1, 2 und 3 an
0b00011111, // LEDs 0 bis 4 an
0b00111111, // LEDs 0 bis 5 an
0b01111111, // LEDs 0 bis 6 an
0b11111111 // Alle LEDs an
};
void setup() {
// Steuerpins als Ausgänge initialisieren
pinMode(DS, OUTPUT);
pinMode(SHCP, OUTPUT);
pinMode(STCP, OUTPUT);
}
void loop() {
// Muster aus datArray durchlaufen
for (int num = 0; num < 9; num++) {
// STCP auf LOW setzen, um Daten vorzubereiten
digitalWrite(STCP, LOW);
// Daten ins Schieberegister schieben
shiftOut(DS, SHCP, MSBFIRST, datArray[num]);
// STCP auf HIGH setzen, um die Daten zu übernehmen
digitalWrite(STCP, HIGH);
delay(500); // 500 ms warten, bevor das nächste Muster angezeigt wird
}
// Nach der Sequenz alle LEDs ausschalten
digitalWrite(STCP, LOW);
shiftOut(DS, SHCP, MSBFIRST, 0b00000000);
digitalWrite(STCP, HIGH);
delay(500);
}
Nach dem Hochladen des Codes sollten die mit dem 74HC595 verbundenen LEDs nacheinander aufleuchten, entsprechend den im datArray definierten Mustern.
Sobald alle LEDs eingeschaltet sind, werden sie der Reihe nach wieder ausgeschaltet.
Verständnis des Codes
Definition der Steuerpins:
DS (Data Serial Input): Empfängt serielle Daten.SHCP (Shift Register Clock Input): Steuert das Verschieben der Daten in das Register.STCP (Storage Register Clock Input): Steuert das Übernehmen der Daten zu den Ausgangspins.
const int DS = 0; // GPIO 0 -> DS (Pin 14) const int SHCP = 1; // GPIO 1 -> SHCP (Pin 11) const int STCP = 2; // GPIO 2 -> STCP (Pin 12)
Erstellung von Datenmustern:
Ein Array
datArrayspeichert verschiedene Binärmuster zur Steuerung der LEDs.Jedes Bit repräsentiert den Zustand einer LED (1 = an, 0 = aus).
int datArray[] = { 0b00000000, // Alle LEDs aus 0b00000001, // LED 0 an 0b00000011, // LEDs 0 und 1 an 0b00000111, // LEDs 0, 1 und 2 an 0b00001111, // LEDs 0, 1, 2 und 3 an 0b00011111, // LEDs 0 bis 4 an 0b00111111, // LEDs 0 bis 5 an 0b01111111, // LEDs 0 bis 6 an 0b11111111 // Alle LEDs an };
Setup-Funktion:
Setzt die Pins
DS,SHCPundSTCPals Ausgänge zur Steuerung des Schieberegisters.
void setup() { // Initialisieren der Steuerpins als Ausgänge pinMode(DS, OUTPUT); pinMode(SHCP, OUTPUT); pinMode(STCP, OUTPUT); }
Loop-Funktion: Die
for-Schleife durchläuft jedes Muster imdatArray-Array.Datenübertragung:
shiftOutsendet die Daten bitweise an das Schieberegister.MSBFIRSTgibt an, dass das höchstwertige Bit zuerst gesendet wird.
shiftOut(DS, SHCP, MSBFIRST, datArray[num]);
Datenübernahme:
STCPwird aufLOWgesetzt, um das Schieberegister auf neue Daten vorzubereiten.Nach dem Übertragen der Daten wird
STCPaufHIGHgesetzt, um die neuen Werte zu übernehmen und die LED-Zustände zu aktualisieren.
digitalWrite(STCP, LOW); // shiftOut(...) digitalWrite(STCP, HIGH);
Verzögerung:
delay(500);sorgt für eine halbe Sekunde Pause zwischen den Mustern für eine bessere Sichtbarkeit.Ausschalten der LEDs:
Nachdem alle Muster durchlaufen wurden, werden alle LEDs ausgeschaltet, indem
0b00000000gesendet wird.digitalWrite(STCP, LOW); shiftOut(DS, SHCP, MSBFIRST, 0b00000000); digitalWrite(STCP, HIGH); delay(500);
Fehlersuche
Keine LEDs leuchten auf:
Überprüfen Sie alle Kabelverbindungen.
Stellen Sie sicher, dass der 74HC595 richtig mit Strom versorgt wird.
Vergewissern Sie sich, dass die GPIO-Pins des Pico korrekt mit dem Schieberegister verbunden sind.
Falsches LED-Verhalten:
Kontrollieren Sie die Binärmuster im
datArray.Prüfen Sie, ob die Widerstände korrekt platziert sind, um den Strom zu begrenzen.
Weitere Möglichkeiten zur Erweiterung
Steuerung anderer Geräte:
Verwenden Sie den 74HC595 zur Ansteuerung von Relais, Motoren oder anderen leistungsstarken Geräten.
Verkettung mehrerer Schieberegister:
Mehrere 74HC595 hintereinanderschalten, um mit denselben drei GPIO-Pins noch mehr Ausgänge zu steuern.
Erstellung von LED-Mustern:
Entwickeln und implementieren Sie komplexere LED-Animationen und Muster durch Anpassung des
datArray.Integration mit Sensoren:
Kombinieren Sie das Schieberegister mit verschiedenen Sensoren, um reaktionsschnelle und interaktive Systeme zu entwickeln.
Aufbau einer LED-Matrix-Anzeige:
Mehrere Schieberegister verwenden, um eine größere LED-Matrix für Anzeigen oder Beschilderungen zu erstellen.
Fazit
In dieser Lektion haben Sie gelernt, wie Sie das 74HC595-Schieberegister mit dem Raspberry Pi Pico nutzen, um mehrere LEDs mit nur drei GPIO-Pins zu steuern. Diese Technik ermöglicht eine Erweiterung der digitalen Ausgänge und eröffnet neue Möglichkeiten für komplexe und interaktive Projekte, ohne dass zusätzliche GPIO-Ressourcen erforderlich sind. Durch das Verständnis der seriellen Datenübertragung und das Speichern von Daten in parallelen Ausgängen können Sie effizient eine Vielzahl von Aktoren, Anzeigen oder anderen Peripheriegeräten in Ihre Elektronikprojekte integrieren.
