Wieso geht mein Multiplexing mit meinem Sieben Segment Display und meinem Pi Pico 2040 nicht?
Ich habe ein Problem mit meinem Pi Pico - Projekt. Ich hatte alles verkabelt und programmiert, sodass mein 2 Stelliges Common Anode Sieben Segment Display funktioniert hat. Da allerdings alles über den Pico lief und ein Pin nur 16 mA liefern kann, war dieser überfordert. Damit nichts passiert, habe ich im Internet nach Lösungen gesucht. Dabei bin ich darauf gestoßen, dass man auch mit Transistoren arbeiten kann. Ich habe folgende eingebaut: BC547, C550B. Jetzt funktioniert es allerdings nicht mehr. Deswegen nehme ich gerne jeden Tipp oder jede Idee sehr gerne. Folgender Code:
from machine import Pin
import utime
# GPIO Pins für die Segmente (A
, B, C, D, E, F, G, DP)
segments = (2, 3, 4, 5, 6, 7, 8, 9)
# Segmentmuster für die Ziffern 0-9
# 0 = Segment an, 1 = Segment aus (weil gemeinsame Anode)
patterns = [
(0,0,0,0,0,0,1,1), # 0
(1,0,0,1,1,1,1,1), # 1
(0,0,1,0,0,1,0,1), # 2
(0,0,0,0,1,1,0,1), # 3
(1,0,0,1,1,0,0,1), # 4
(0,1,0,0,1,0,0,1), # 5
(0,1,0,0,0,0,0,1), # 6
(0,0,0,1,1,1,1,1), # 7
(0,0,0,0,0,0,0,1), # 8
(0,0,0,1,1,0,0,1) # 9
]
# Pins für die Segmente
pins = [Pin(seg, Pin.OUT) for seg in segments]
# Transistoren für die Stellen (LOW = an, HIGH = aus)
displays = [Pin(16, Pin.OUT, value=1), Pin(17, Pin.OUT, value=1)]
def display_digit(display, digit):
# beide Stellen ausschalten (HIGH = aus)
displays[0].value(1)
displays[1].value(1)
# Muster für die Ziffer holen
pattern = patterns[digit]
# Segmente setzen
for i in range(8):
pins[i].value(pattern[i])
# gewünschte Stelle aktivieren (LOW = an)
displays[display].value(0)
# kurze Multiplex-Zeit
utime.sleep_ms(5)
# wieder aus
displays[display].value(1)
# Test: Zähler 00 - 99
while True:
for i in range(10):
for j in range(10):
start = utime.ticks_ms()
while utime.ticks_diff(utime.ticks_ms(), start) < 1000:
display_digit(0, i) # linke Stelle
display_digit(1, j) # rechte Stelle
print(i,j)
und folgendes Schaltbild:
