Raspberry Pi Pico: 4-fach 7-Segment-Anzeige programmieren (TM1637)

Die Bezeichnung „TM1637“ wird oft für eine 4-fach 7-Segment-Anzeige mit Doppelpunkt verwendet. Diese Anzeige kann zur Darstellung von Ganzzahlen, Uhrzeiten und auch Text verwendet werden. Aufgrund der 4 Stellen sind die Wertebereiche von Zahlen und die Textlänge begrenzt.
Die TM1637-Anzeige wird per I2C angesteuert. Dazu sind insgesamt 4 Pins herausgeführt. Zur softwareseitigen Ansteuerung und Programmierung der 7-Segment-Anzeige ist eine externe Bibliothek für MicroPython erforderlich.

Wir wollen hier ausprobieren, wie wir den TM1637 hardwareseitig und softwareseitig ansteuern, und was wir alles mit dem TM1637 machen können. Dazu experimentieren wir im folgenden Programmcode mit Text, Zahlen und die Uhrzeit.

Aufbau und Bauteile

Raspberry Pi Pico: 4-fach 7-Segment-Anzeige programmieren (TM1637)

Raspberry Pi Pico TM1637
Pin 38 GND GND
Pin 36 VCC +3,3V VCC
Pin 27 GPIO 21 CLK
Pin 26 GPIO 20 DIO

Schnell und einfach alle Bauteile zusammen bestellen

MicroPython-Bibliothek für TM1637

Zur Ansteuerung der 7-Segment-Anzeige TM1637 ist eine externe Bibliothek erforderlich, die heruntergeladen und mit dem Dateinamen „tm1637.py“ auf dem Raspberry Pi Pico gespeichert werden muss.

Programmcode

Im Programmcode werden die Bibliotheken geladen und dann die 4-fache 7-Segment-Anzeige TM1637 initialisiert. Anschließend werden verschiedene sinnvolle Möglichkeiten der Darstellung beispielhaft realisiert:

  • 7-Segment-Test: "88:88" (alle Segmente leuchten)
  • Helligkeit einstellen (von dunkler nach heller)
  • Anzeige löschen
  • Ganzzahlen anzeigen / Wertebereich: -999 bis 9999
  • Darstellung bei Überschreitung des Wertebereichs
  • Verschiedene Texte anzeigen (ohne Unterscheidung von Groß- und Kleinschreibung)
  • Laufschrift: Hallo Welt
  • Aktuelle Uhrzeit
  • Temperatur mit der Einheit °C
  • Countdown von 9999 bis 0
  • Countdown von 01:00 bis 00:00

Damit die Anzeige richtig interpretiert werden kann, wird zusätzlich auf der Kommandozeile angezeigt, was der Wert auf der Anzeige sein soll.

Die Variable „pause“ gibt in Sekunden an, wie lange zwischen den unterschiedlichen Darstellungen gewartet werden soll.

# Bibliotheken laden
from machine import Pin, RTC, ADC, Timer
import time
import tm1637

# Display initialisieren
display = tm1637.TM1637(clk=Pin(21), dio=Pin(20))

# Pause zwischen den unterschiedlichen Darstellungen
pause = 3

print('7-Segment-Test: "88:88" (alle Segmente leuchten)')
display.write([127, 255, 127, 127])

# Pause
time.sleep(pause)

print('Helligkeit einstellen (von dunkler nach heller)')
for i in range (0, 7+1):
    display.brightness(i)
    time.sleep(0.5)

# Pause
time.sleep(pause)

print('Anzeige löchen')
display.write([0, 0, 0, 0])

# Pause
time.sleep(pause)

print('Ganzzahlen anzeigen / Wertebereich: -999 bis 9999')
display.number(1)
time.sleep(1)
display.number(12)
time.sleep(1)
display.number(123)
time.sleep(1)
display.number(1234)
time.sleep(1)
print('Überschreitung des Wertebereichs')
display.number(12345)
time.sleep(2)
display.number(-1234)
time.sleep(2)
display.number(-123)
time.sleep(1)
display.number(-12)
time.sleep(1)
display.number(-1)

# Pause
time.sleep(pause)

print('Text anzeigen')
display.show('help')
time.sleep(2)
display.show('cool')
time.sleep(2)
display.show('  ja')
time.sleep(2)
display.show('nein')
time.sleep(2)
display.show('    ')

# Pause
time.sleep(pause)

print('Laufschrift: Hallo Welt') # Default: 4 FPS = 250
display.scroll('Hallo Welt', 250)

# Pause
time.sleep(pause)

# Echtzeituhr im Mikrocontroller initialisieren
rtc = RTC()
# Datum und Uhrzeit lesen
datetime = rtc.datetime()
print('Aktuelle Uhrzeit: %02d:%02d' % (datetime[4], datetime[5]))
display.numbers(datetime[4], datetime[5])

# Pause
time.sleep(pause)

# Initialisierung des ADC4
sensor = ADC(4)
# Temperatur messen
value = sensor.read_u16()
temp = int(27 - ( (value * 3.3 / 65535) - 0.706 ) / 0.001721)
print('Temperatur: %s°C' % temp) # Wertebereich -9 bis 99
display.temperature(temp)

# Pause
time.sleep(pause)

print('Countdown von 9999 bis 0')
for count in range (9999, -1, -1):
    display.number(count)
    time.sleep(0.00001)

# Pause
time.sleep(pause)

print('Countdown von 01:00 bis 00:00')
counter = 60
points = 1
timeValue = time.localtime(counter)
display.numbers(timeValue[4], timeValue[5], points)
time.sleep(1)

# Funktion: Countdown herunterzählen
def countdown(value):
    global counter
    global points
    # Blinkender Doppelpunkt im Wechsel
    if points == 0: points = 1
    else: points = 0
    # Countdown reduzieren
    counter -= 1
    # Countdown ist abgelaufen (0 = Ende)
    if counter == 0:
        clock.deinit()
        print('Countdown Ende')
    # Countdown in Minuten und Sekunden umrechnen und anzeigen
    timeValue = time.localtime(counter)
    display.numbers(timeValue[4], timeValue[5], points)

# Initialisierung Timer für Countdown
clock = Timer(freq=1, mode=Timer.PERIODIC, callback=countdown)

Im Programmcode wurden die wichtigsten Methoden zur Darstellung von Werten beispielhaft verwendet. Es gibt aber noch weitaus mehr, die vielleicht nicht so häufig verwendet werden. Bei der Nutzung des TM1637 sollte man einen Blick in die Dokumentation der hier verwendeten MicroPython-Bibliothek werfen.

Anwendungen

Neben der Anwendung als Status-Anzeige eignet sich die TM1637-Anzeige zur Darstellung von Uhrzeiten und Zeitangaben.

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

Programmieren mit dem Raspberry Pi Pico

Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren