Bemerkung

Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie tiefer in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten ein.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Probleme nach dem Verkauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezielle Rabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Promotionen und Giveaways: Nehmen Sie an Giveaways und Feiertagsaktionen teil.

👉 Bereit, mit uns zu erkunden und zu kreieren? Klicken Sie auf [hier] und treten Sie heute bei!

5.2 Zahlen anzeigen

In dieser Lektion lernen wir, wie man ein 7-Segment-Display verwendet, um Zahlen mit dem Raspberry Pi Pico 2 und einem 74HC595-Schieberegister darzustellen. Das 7-Segment-Display ist eine häufig verwendete elektronische Komponente in digitalen Uhren, Taschenrechnern und Haushaltsgeräten zur Anzeige numerischer Informationen.

Durch die Kombination des 74HC595-Schieberegisters mit dem 7-Segment-Display können wir alle Segmente mit nur wenigen GPIO-Pins des Pico steuern und so wertvolle I/O-Ressourcen für andere Komponenten sparen.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

Name

ENTHALTENE KOMPONENTEN

LINK

Newton Lab Kit

450+

Newton Lab Kit

Sie können sie auch einzeln über die untenstehenden Links kaufen.

SN

KOMPONENTE

MENGE

LINK

1

Raspberry Pi Pico 2

1

KAUFEN

2

Micro-USB-Kabel

1

3

Steckbrett

1

KAUFEN

4

Jumperkabel

Mehrere

KAUFEN

5

Widerstand

1 (220Ω)

KAUFEN

6

7-Segment-Anzeige

1

KAUFEN

7

74HC595

1

KAUFEN

Funktionsweise des 7-Segment-Displays

Ein 7-Segment-Display besteht aus 7 LEDs (Segmenten), die in einer Acht-Form angeordnet sind, um Ziffern von 0 bis 9 darzustellen. Zusätzlich gibt es eine achte LED für den Dezimalpunkt. Jedes Segment ist von a bis g beschriftet, und der Dezimalpunkt wird als dp gekennzeichnet.

Hier ist die Segmentbeschriftung:

img_7seg_cathode

In einem gemeinsamen Kathoden-7-Segment-Display sind alle Kathoden (negative Anschlüsse) der LEDs miteinander verbunden und an eine gemeinsame Masse angeschlossen.

Schaltplan

sch_74hc_7seg

Das Verdrahtungsprinzip ist im Wesentlichen dasselbe wie bei 5.1 Verwendung des 74HC595-Schieberegisters, der einzige Unterschied besteht darin, dass Q0-Q7 mit den a ~ g Pins des 7-Segment-Displays verbunden sind.

Wiring

74HC595

LED-Segment-Display

Q0

a

Q1

b

Q2

c

Q3

d

Q4

e

Q5

f

Q6

g

Q7

dp

Verdrahtungsdiagramm

wiring_74hc_7seg

Code schreiben

Nun schreiben wir ein MicroPython-Programm, um die Ziffern 0 bis 9 auf dem 7-Segment-Display anzuzeigen.

Bemerkung

  • Öffnen Sie 5.2_number_display.py aus newton-lab-kit/micropython oder kopieren Sie den Code in Thonny, dann klicken Sie auf „Ausführen“ oder drücken Sie F5.

  • Stellen Sie sicher, dass der richtige Interpreter ausgewählt ist: MicroPython (Raspberry Pi Pico).COMxx.

import machine
import utime

# Definieren der Binärcodes für jede Ziffer (0-9)
SEGMENT_CODES = [
    0x3F,  # 0
    0x06,  # 1
    0x5B,  # 2
    0x4F,  # 3
    0x66,  # 4
    0x6D,  # 5
    0x7D,  # 6
    0x07,  # 7
    0x7F,  # 8
    0x6F   # 9
]

# Initialisieren der Steuerpins für 74HC595
SDI = machine.Pin(0, machine.Pin.OUT)   # Serieller Dateneingang (DS)
RCLK = machine.Pin(1, machine.Pin.OUT)  # Register-Takt (STCP)
SRCLK = machine.Pin(2, machine.Pin.OUT) # Schieberegister-Takt (SHCP)

# Funktion zum Senden von Daten an 74HC595
def shift_out(data):
    RCLK.low()
    for bit in range(7, -1, -1):
        SRCLK.low()
        bit_val = (data >> bit) & 0x01
        SDI.value(bit_val)
        SRCLK.high()
    RCLK.high()

# Hauptschleife zum Anzeigen der Zahlen 0-9
while True:
    for num in range(10):
        shift_out(SEGMENT_CODES[num])
        utime.sleep(0.5)

Wenn Sie diesen Code ausführen, zeigt das 7-Segment-Display nacheinander die Ziffern 0 bis 9 an und wechselt alle 0,5 Sekunden. Dadurch entsteht ein zyklischer Zählereffekt, bei dem sich die Zahlen der Reihe nach erhöhen und nach der 9 wieder bei 0 beginnen.

Erklärung des Codes

  1. Module importieren:

    • machine: Ermöglicht den Zugriff auf GPIO-Pins und Hardwarefunktionen.

    • utime: Enthält Zeitfunktionen für Verzögerungen.

  2. Segmentcodes definieren:

    Jeder Eintrag entspricht den Segmenten, die aktiviert werden müssen, um eine Ziffer darzustellen. Die Werte sind zur besseren Lesbarkeit im Hexadezimalformat angegeben.

    SEGMENT_CODES = [
        0x3F,  # 0
        0x06,  # 1
        0x5B,  # 2
        0x4F,  # 3
        0x66,  # 4
        0x6D,  # 5
        0x7D,  # 6
        0x07,  # 7
        0x7F,  # 8
        0x6F   # 9
    ]
    

    Angenommen, das 7-Segment-Display soll die Zahl „1“ anzeigen. Dafür müssen die Segmente b und c auf HIGH gesetzt werden, während a, d, e, f, g und dp auf LOW bleiben.

    img_1_segment

    Das bedeutet, dass das Binärmuster „00000110“ geschrieben werden muss. Zur besseren Lesbarkeit verwenden wir die hexadezimale Darstellung „0x06“.

  3. Steuerpins initialisieren:

    Weist die GPIO-Pins des Pico zur Steuerung des 74HC595-Schieberegisters zu.

    SDI = machine.Pin(0, machine.Pin.OUT)
    RCLK = machine.Pin(1, machine.Pin.OUT)
    SRCLK = machine.Pin(2, machine.Pin.OUT)
    
  4. Die Funktion shift_out definieren:

    • Sendet 8 Bit an das 74HC595-Schieberegister.

    • Überträgt die Daten beginnend mit dem höchstwertigen Bit (MSB).

    • Pulsiert die Schieberegister- und Register-Taktleitungen entsprechend.

    def shift_out(data):
        RCLK.low()
        for bit in range(7, -1, -1):
            SRCLK.low()
            bit_val = (data >> bit) & 0x01
            SDI.value(bit_val)
            SRCLK.high()
        RCLK.high()
    
  5. Hauptschleife zur Anzeige der Zahlen:

    • Durchläuft die Zahlen 0 bis 9.

    • Ruft shift_out mit dem entsprechenden Segmentcode auf.

    • Fügt eine Verzögerung von 0,5 Sekunden zwischen den Zahlen hinzu.

    while True:
        for num in range(10):
            shift_out(SEGMENT_CODES[num])
            utime.sleep(0.5)
    

Verständnis der Segmentcodes

Jeder Segmentcode entspricht den zu beleuchtenden Segmenten für eine bestimmte Ziffer. Hier ist die Zuordnung der Segmente zu den einzelnen Ziffern:

  • 0: Segments a, b, c, d, e, f (code 0x3F)

  • 1: Segments b, c (code 0x06)

  • 2: Segments a, b, g, e, d (code 0x5B)

  • 3: Segments a, b, c, d, g (code 0x4F)

  • 4: Segments b, c, f, g (code 0x66)

  • 5: Segments a, c, d, f, g (code 0x6D)

  • 6: Segments a, c, d, e, f, g (code 0x7D)

  • 7: Segments a, b, c (code 0x07)

  • 8: Segments a, b, c, d, e, f, g (code 0x7F)

  • 9: Segments a, b, c, d, f, g (code 0x6F)

Weitere Experimente

  • Hexadezimale Zeichen anzeigen:

    Erweitern Sie die SEGMENT_CODES-Liste um die Buchstaben A-F für die hexadezimale Darstellung. Zum Beispiel hat der Buchstabe ‚A‘ den Segmentcode 0x77.

  • Einen Zähler erstellen:

    Ändern Sie den Code so, dass ein Zähler hoch- oder herunterzählt. Verwenden Sie Tasten, um die angezeigte Zahl zu erhöhen oder zu verringern.

  • Mehrere Anzeigen steuern:

    Nutzen Sie zusätzliche 74HC595-Schieberegister, um mehrere 7-Segment-Anzeigen zu steuern. Implementieren Sie Multiplexing, um mehrere Anzeigen mit minimalem GPIO-Aufwand zu verwalten.

Fazit

In dieser Lektion haben Sie gelernt, wie Sie ein 7-Segment-Display mit einem 74HC595-Schieberegister verwenden, um Zahlen mit dem Raspberry Pi Pico 2 darzustellen. Durch das Verständnis der Steuerung der einzelnen Segmente über Binärcodes und die Nutzung des Schieberegisters können Sie effizient mehrere Ausgaben mit einer begrenzten Anzahl an GPIO-Pins verwalten.