mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 5 Stellen 7 Segment Stopuhr mit 2 Schieberegistern Ansteuern


Autor: Fabian (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Jörg R. (solar77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

: Bearbeitet durch User
Autor: Martin Schlüter (led_martin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: MaWin (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
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.

Autor: m.n. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: m.n. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: MaWin (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
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.

Autor: ./. (Gast)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
595 sind so billig das sich multiplexen nicht lohnt.

Goenn einfach jeder Stelle ein Schieberegister.
Die "elektromagnetische" Umwelt wird es Dir danken.

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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-101...

Jö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.

Autor: m.n. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fabian schrieb:
> Hier der Link dazu:
> 
https://www.conrad.de/de/7-segment-anzeige-rot-101...

Die Versorgungsspannung der Segmente von 7,4 V hast Du offensichtlich 
nicht beachtet.
Steuer die Anzeigen statisch an mit je 5 x 4094 + ULN2803.

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fabian schrieb:
> Die Stelle 2 und 4 stehen auf dem Kopf. Dadurch stehen die
> Dezimalpunkte übereinander und es sieht wie ein Doppelpunkt aus

Nicht wirklich. Es sieht eher doof aus. Das Grad für Grad 
Celsius/Fahrenheit jann man so machen.

Fabian schrieb:
> Hier der Link dazu:
> 
https://www.conrad.de/de/7-segment-anzeige-rot-101...

Mit denen wird deine Schaltung nicht funktionieren, zu hoher 
Spannungsbedarf.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Jörg R. (solar77)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: m.n. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: m.n. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.