Hallo oh allwissendes Forum,
Ich probiere und überlege jetzt schon ne ganze Weile rum, finde aber
einfach keinen gescheiten Ansatz...
Ich habe 5 7-Segment tafeln. Jede mit 10 pins, a-g DP und 2x common
Anode. Über Transistoren und Widerstände angeschlossen an +5V und 0V.
Ich habe 2 in reihe geschaltete 74HC595N Schieberegister die ich dann
mit 3 Pins vom yC beschreibe. Ich habe also ein 16 Bit Muster.
die ersten 8 Bit sind für die 5 Anoden gedacht (Anzeige kann somit für
spätere Zeiten auf bis 8 Stellen erweitert werden), die zweiten 8 bit
für die einzelnen Segmente.
Ich möchte jetzt eine Funktion schreiben in C die mir die Uhrzeit
hochzählt und auf der 5dig 7segment Anzeige ausgibt. Man soll also sehen
können wie die Uhr "rennt".
Dabei stehen die Stellen für Minute, Sekundex10, Sekunde,
Millisekundex100, Millisekundex10
ist es besser wenn ich jede einzelne Stelle einzeln ausgeb oder immer
zeilenweise alle 5 Stelen bediene?
Kann mir vielleicht auch jemand einen kleinen Anschupser geben?
Fabian schrieb:> ist es besser wenn ich jede einzelne Stelle einzeln ausgeb oder immer> zeilenweise alle 5 Stelen bediene?
a) der Plan ist sehr schlecht lesbar
b) die Verschaltung der Segmente scheint fehlerhaft zu sein
Zu Deiner Frage: Jedes Stelle einzeln ausgeben > multiplexen. Das ergibt
sich schon aus der Schaltung.
Welche 7-Segment Anzeigen verwendest Du?
Ich würde, auch wenn man ihn jetzt nicht braucht, den letzten
Dezimalpunkt auch anschließen. Der eine Draht mehr erhöht den Aufwand
nicht wesentlich, und wenn die Software später mal weiterentwickelt
wird, was bei Bastelprojekten nicht unüblich ist, kann man ihn nutzen.
Mit freundlichen Grüßen - Martin
Fabian schrieb:> ist es besser wenn ich jede einzelne Stelle einzeln ausgeb
Ja. 1:5 Multiplex ist besser als 1:7. So ist auch deine Schaltung.
Willst du jetzt den Code von uns ? Selber schreiben, kombiniere
Schieberegister statt 8 bit Portausgabe und 5 Stellen Multiplex z.B. per
2/1000 Sekunden Timer.
Fabian schrieb:> Kann mir vielleicht auch jemand einen kleinen Anschupser geben?
Für eine 5-stellige 10 mm Anzeige im Multiplex-Betrieb, ginge folgende
Schaltung: http://mino-elektronik.de/fmeter/fm_software.htm#bsp13
Für 13/14 mm Anzeigen eignet sich eine statische Ansteuerung der
Segmente: http://mino-elektronik.de/7-Segment-Variationen/LCD.htm#led1
Da die Routinen für die Ansteuerung schon vorhanden sind, ist die
Zählfunktion für eine Uhr kein großes Thema. Bei Bedarf könnte ich Dir
Leerplatinen für beide Anzeigen anbieten.
Fabian schrieb:> zwei_SchiebeRegister_7_Segment_Schaltplan.jpg
Probiers das nächste Mal, den Screenshot wie vorgeschlagen mit einem
verlustlosen Komprimierverfahren zu posten...
> ist es besser wenn ich jede einzelne Stelle einzeln ausgeb oder immer> zeilenweise alle 5 Stelen bediene?
Es ist besser, das Multiplexverhältnis niedrig zu halten, weil man dann
1. keine so hohe Multiplexfrequenz braucht und
2. der Impulsstrom für die selbe wahrgenommene Helligkeit kleiner ist.
Für einen mittleren Strom von 10mA brauchst du beim Multiplexen der 7
(mit Punkt sogar 8) Segmente einen Strom von 70..80mA. Beim
segmentweisen Multiplexen brauchst du nur 50mA für den selben mittleren
Strom.
Und der Witz ist: wenn du dein Programm debuggst und zufällig die PWM
anhältst, dann können dir mit 80mA schon mal Segmente abfackeln, wo bei
50mA evtl. noch nchts passiert wäre...
Lothar M. schrieb:> Und der Witz ist: wenn du dein Programm debuggst und zufällig die PWM> anhältst, dann können dir mit 80mA schon mal Segmente abfackeln, wo bei> 50mA evtl. noch nchts passiert wäre...
Bei statischer Ansteuerung entfällt dieses Problem gänzlich.
m.n. schrieb:> Für eine 5-stellige 10 mm Anzeige im Multiplex-Betrieb, ginge folgende> Schaltung
Schrottschaltung. Der niedrige Strom reicht höchstens für 2mA
Dunkelanzeigen.
595 sind so billig das sich multiplexen nicht lohnt.
Goenn einfach jeder Stelle ein Schieberegister.
Die "elektromagnetische" Umwelt wird es Dir danken.
ich weiß dass ich mit der millis() Funktion meine zeit bekomme.
ich will keinen fertigen Code hier geschrieben bekommen, aber einen
hinweis vielleicht. Also ich schreibe jedes mal ein 16 Bit muster in
mein Schieberegister: 00010000 00000011 würde dann bedeuten Stelle 5
zeigt eine 1, oder?
Jörg R. schrieb:> b) die Verschaltung der Segmente scheint fehlerhaft zu sein
Die Verschaltung ist bewusst so gewählt. Die Stelle 2 und 4 stehen auf
dem Kopf. Dadurch stehen die Dezimalpunkte übereinander und es sieht wie
ein Doppelpunkt aus (dadurch ändert sich die Segmentreihenfolge).
Durch den leicht geneigten winkel der Anzeigen passt das hoffentlich.
Die Anzeigen sind bestellt, aber noch nicht da.
Jörg R. schrieb:> Welche 7-Segment Anzeigen verwendest Du?
Hier der Link dazu:
https://www.conrad.de/de/7-segment-anzeige-rot-1012-mm-74-v-ziffernanzahl-1-kingbright-sa40-19surkwa-1050581.htmlJörg R. schrieb:> Zu Deiner Frage: Jedes Stelle einzeln ausgeben > multiplexen. Das ergibt> sich schon aus der Schaltung.
Dass ich nicht die ganze Zeile auf einmal ansteuern kann ist mir gestern
auch wenig später klar geworden. Sonst würde ja jede stelle die gleiche
Ziffer anzeigen.
Solche Monsteranzeigen würde ich statisch ansteuern, Platz hast Du ja
genug auf der Platinenrückseite.
Also je Anzeige ein 74HC595 und ein Widerstandsarray (8*330R).
Die Anzeigenspannung auf 10V stabilisieren, dann reichen die 5V Hub des
74HC595 völlig aus (die Dezimalpunkte brauchen noch ne Z-Diode 3,9V in
Reihe).
Peter D. schrieb:> Solche Monsteranzeigen würde ich statisch ansteuern,
Na ja.
Aber statt Vorwiderstände besser Konstantstromsenken, wie PCA9626, der
kann 100mA (= 5 x 20mA) und auch höhere Spannungen ab.
Bleibt das Schalten der 700mA Anoden, vielleicht per UDN2981, der
schaltet offiziell zwar nur 500mA, da aber nur 1 Kanal zu einer Zeit
aktiv ist, könnte man auch mit 700mA durchkommen.
Hallo Fabian,
siehe Dir mal den Chip TPIC6B595 an. Wie oben schon geschrieben
benötigen die Displays > 7 Volt. Die Anoden deiner Displays legst Du
fest auf 8 bis 10 Volt und die Kathoden über entsprechende
Vorwiderstände an die Ausgänge der TPIC6B595. Du benötigst 5 Stück, also
für jede Stelle einen.
Jörg R. schrieb:> siehe Dir mal den Chip TPIC6B595 an.
Welche Schieberegister/Treiber man verwendet, ist im Prinzip egal. Man
sollte sie nur einfach beschaffen und innerhalb ihrer Grenzwerte
betreiben können.
Der HC595 ist daher etwas grenzwertig. Im Fehlerfall kann eine
Überspannung auch den µC erreichen und beschädigen.
Entscheidener ist die statische Ansteuerung, die die o.g. Probleme und
potentiell hohe Störausstrahlung vermeidet.
m.n. schrieb:> Entscheidener ist die statische Ansteuerung, die die o.g. Probleme und> potentiell hohe Störausstrahlung vermeidet.
Entscheidend ist das aber nur für diejenigen, die mit der Auslegung von
Multiplexanzeigen überfordert sind. Da soll es ja Einige geben. Alle
anderen nutzen die Bauelementeeinsparung gerne.
so langsam sind alle Klarheiten beseitig.
Also die 7 Segmentanzeigen werde ich über Transistoren ansteuern. Daher
sollte es mit dem 74HC595 wohl keine Probleme geben, oder?
Wenn ich statt 2 5 Schieberegister nehme habe ich halt ein 40 Bitmuster,
anstelle von 16.
Wenn ich jetzt aber eine Zeitfunktion habe die im 1/100 sek. Bereich
hoch zählt und die Uhr mitläuft, wie Schreibe ich das dann in meine
Schieberegister?
ich weiß wohl wie ich eine bestimmte Zahl ausgebe über das Bitmuster,
aber ich verstehe noch nicht so ganz wie ich das hinbekomme, dass die
Uhrzeit automatisch in mein 16 oder eben 40 Bit Muster umgebwandelt und
ausgegeben wird.
Fabian schrieb:> ich weiß wohl wie ich eine bestimmte Zahl ausgebe über das Bitmuster,> aber ich verstehe noch nicht so ganz wie ich das hinbekomme, dass die> Uhrzeit automatisch in mein 16 oder eben 40 Bit Muster umgebwandelt und> ausgegeben wird.
Weiter oben habe ich einen Link für die statische Ansteuerung einer
6-stelligen Anzeige gegeben. Da findest Du auch ein Programm zur
Ansteuerung (http://mino-elektronik.de/progs/avr/Digit_6/Digit_6LED.c),
welches zwar keine Zeitanzeige erzeugt, aber beispielhaft eine Zahl bis
999999 permanent hochzählt und und beim Überlauf wieder bei -99999
beginnt.
Es müßte auch auf einem Arduino laufen.
Fabian schrieb:> Also die 7 Segmentanzeigen werde ich über Transistoren ansteuern. Daher> sollte es mit dem 74HC595 wohl keine Probleme geben, oder?
Wenn Du bipolare NPN Transistoren nehmen willst, nimm besser 4094
Schieberegister oder beim ..595 einen 1k Widerstand in Reihe zur Basis.
Beim ULN2803 brauchst Du keine zusätzlichen Bauteile, wobei ich
Abblockkondensatoren als selbstverständlich voraussetze.
Fabian schrieb:> aber ich verstehe noch nicht so ganz wie ich das hinbekomme, dass die> Uhrzeit automatisch in mein 16 oder eben 40 Bit Muster umgebwandelt und> ausgegeben wird.
Nun, du musst die Ziffernwerte (0-9) eben durch 7-Segment Codes
ersetzen, und dann seriell raussenden, und das jede 1/100 Sekunde neu.