PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Digitalanzeige 7-Segment



phyro
28.06.2009, 20:11
Bin gerade bei der Planung einer Digitalen Countdown-Uhr. Ich werde 6 7-Segment Anzeigen aus LEDs bauen und auf diesen dann entsprechend Stunden : Minuten : Sekunden anzeigen.

Zur Steuerung soll der Mega168 zum Einsatz kommen. Ich habe mich schon ein wenig eingelesen und mein Plan sieht zur Zeit folgendermaßen aus:

Über einen BCD-Decoder werden die Ziffern auf die Anzeigen gebracht. Dabei werden immer alle Anzeigen über den selben Decoder mit dem selben Signal versorgt. Über einen zweiten BCD-Decoder schalte ich immer die gemeinsame Masse einer Anzeigen von der Positiven Spannung zu Masse. Dadurch wird dann nur auf einem der Anzeigen die passende Ziffer angezeigt. Durch schnelle Durchläufe wird der Reihe nach jedes Segment angesteuert.

Durch die Verwendung der zwei BCD-Decoder werden nur 4 Ports für die Ziffern und 3 Ports für die Auswahl der aktuellen Anzeige benötigt.

Ich würde gerne wissen, ob der Takt über einen Standart Quarz, wie bei beim RN-MiniControll, ausreicht um einen Countdown über einige Stunden mit akzeptabler Genauigkeit zu realisieren.

Außerdem würde mich natürlich interessieren ob das so funktionieren könnte, oder ob ich irgendwelche Denkfehler eingebaut habe.

PICture
28.06.2009, 20:30
Hallo phyro!

Wenn ich deine Beschreibung richtig verstanden habe ist der erste BCD zu 7-Segment und das zweite BCD zu 1von 10 o.ä Decoder. Es sollte so funktionieren, ich sehe da kein Denkfehler. :)

Als Taktquelle würde ich Netzfrequenz (50 Hz) empfehlen die alle handelsübliche z.B. Uhrenradios sehr genau steuert.

MfG

Skynet
28.06.2009, 20:32
Hallo! Vom Quarz keine Ahnung. Aber du könntest einen Decoder einsparen wenn die Auswahl der Anzeigen direkt vom Kontroller ansteuerst, dann benötigst man zwar 6 Ports spart aber ein Bauteil ein

Besserwessi
28.06.2009, 20:33
Wenn man die LEDs so multiplext, das nur jeweils eine leuchtet, wird das eine ziehmlich dunkle Angelegenheit. Selbst wenn man nich Treiber dazunimmt für mehr Strom, denn mehr als etwa 150 mA sind selten erlaubt.
Die übliche Ansteuerung ist das eine der 6 Stellen jeweils gang leuchtet. Die 7 Segmente treibt man dann direkt von µC, die Auswahl der Stelle über einen ULN2003 und ggf. einen Decoder.
Wenn man unbedingt IO-Pins sparen will geht statt einem Decoder auch ein Zähler wie CD4017, braucht dann nur eine extra Leitung, oder 8 IO Ports insgesamt. Der MEga168 sollte aber genug Pins frei haben. Die LED Leitungen kann man mit kleinen Einschräkungen auch noch zur Abfrage von Tastern nutzen.

Die standart Quarze sollte für so einen Countdown reichen, für eine echte Uhr über mehrere Tage gibts dann aber schon Abweichungen die anfangen zu stören. Was akzeptabel ist, hängt aber von der Anwendung ab.

phyro
28.06.2009, 20:57
Ja, dass der zweite BCD Decoder nicht unbedingt notwendig ist, weiß ich eigentlich auch. Bin auch noch am überlegen. Werde ihn dann wohl weglassen.
Werde die Anzeige aber wohl mit Akku betreiben, daher ist eine Synchronisation mit der Netzspannung nicht möglich. Reicht denn die Genauigkeit des Quarzes wenigstens für ein paar Stunden?

Ich würde für die LED Segmente (Jeweils 5 LEDs) dann entsprechende Transistoren nutzen. Allerdings habe ich zZ. keine Ahnung wie ich die für mich passenden Transistoren. Wenn jedes Segment 20mA Strom zieht sollten das ja bei einer 8 insgesamt 140mA bei 12V sein (jeweils 5 LEDs direkt an 12V).


Wenn man die LEDs so multiplext, das nur jeweils eine leuchtet, wird das eine ziehmlich dunkle Angelegenheit. Selbst wenn man nich Treiber dazunimmt für mehr Strom, denn mehr als etwa 150 mA sind selten erlaubt.

Also meine Idee war schon so, dass immer jeweils eine Ziffer aktiv ist. Also zum Beispiel bei einer 8 dann gleichzeitig alle 7 Segmente einer Anzeige. Wird dass dann trotzdem zu dunkel?

Besserwessi
28.06.2009, 21:10
Wenn die Temperaturen nicht allzu extrem sind, kann man Abweichungen unter 100 ppm rechnen. Das wäre dann etwa 1 s auf 3 Stunden.

Die LED Segmente kann kann man noch gut direkt vom Mega168 teiben, bis etwa 20 mA. Nur jeweils ein Widerstand in Reihe.
Für die Auswahl der Stelle braucht man Transistoren oder halt ein IC wie ULN2003. Da sind 7 Darlington-transistoren mit Vorwiderständen drin, jeweils für maximal 300/500mA. Also nicht viel mehr als nötig, günstig, und eher kleiner als 7 einzelen Transistoern mit Widerständen.
Die Alternative wäre 6 mal ein BC338 oder ähnliches und Widerände dazu.
Die LEDs laufen dann aber an 5 V und nicht an 12 V.
Könnte höchstens ein Problem werden, wenn das ganz große Anzeigen sind mit 2 oder gar 4 LEDs in Reihe. Dann wäre ein anderer Treiber sinnvoll (High side).

phyro
28.06.2009, 21:24
Die Anzeige soll allerdings recht groß werden: 100mm hoch und jeweils 5 LEDs pro Segment. Daher denke ich, dass ich dann auch für jedes Segment einen Transistor benötige, denn bei Parallelschaltung mit Widerstand wird der Strom recht hoch deshalb lieber 5 in Reihen an 12 V...

PICture
28.06.2009, 21:39
Bei akkubetriebenem Gerät würde ich, wegen Stromverbrauch und Anzahl der nötigen Bauteilen, ein LCD mit Beleuchtung nach Bedarf (Taste) bevorzugen. Bei 4-Bit Ansteuerung werden auch nur 6 Portpins benötigt.

MfG

phyro
28.06.2009, 21:50
Fällt für mich aber aus. Muss groß sein (10cm Ziffernhöhe) und damit auch aus Entfernung gut ablesbar sein. Sollte günstig sein, die 210 LEDs bekomme ich für gut 10€.

Besserwessi
28.06.2009, 22:23
Bei so einer großen Anzeige wären extra Treiber wirklich nicht schlecht. Die Reihenschaltung ist dann wohl auch das richtige. Bei den LEDs sollte man auch auf den Wirkungsgrad achten, und nicht unbedingt die billigsten nehmen. Die Unterschiede können recht groß sein. Lieber da etwas mehrfür die LEDs ausgeben und dafür nur einen halb so großen Akku (oder weniger).

Als Treiber wäre so etwas wie UDN2981 für die High side und ULN2003 für die low side geeignet. Wenn mehr Strom gebraucht wird, wären eventuell auch stärkere LOW Side Treiber angesagt. Ein Betrieb mit 50-100 mA je LED ist nicht unbedingt unrealistisch, ist ja nur gepulst.

Es gibt auch fertige LED Anzeigen für 100 mm und 125 mm Höhe.

phyro
28.06.2009, 22:41
Danke für die Infos. Die Treiber sehen gut aus, waren das jetzt deine Erfahrungswerte oder schaust du so was irgendwo nach, wenn ja, wo?

Und wie sollen solch hohe Ströme zustande kommen? Ist dann dann durch höhere Spannung verursacht? Wie würden die LEDs dann angeschlossen, auch wieder 5 in Reihe an 12V?

phyro
29.06.2009, 18:06
Also ich würde gerne diese (http://www.leds.de/p37/Standard_LEDs/LEDs_5mm/Farbige_LEDs/Superhelle_LED_gruen_120mcd_diffus_5_mm_21V.html) LEDs verwenden. Was für eine Spannung bietet sich denn an, damit der Strom hoch genug ist, um eine ausreichende Helligkeit zu erreichen? Ist eine PWM auch noch im Nachhinein möglich, falls die LEDs mal doch zu hell sein sollten?

Besserwessi
29.06.2009, 18:39
Die LEDs sind nicht schlecht, aber auch noch nicht wirklich effektiv. Was für LEDs man nehmen kann hängt auch davon ab, wie man die Segmente sonst noch gestallte (Blenden, Mattscheibe, ...). Es gibt LEDs die bei gleichem Strom deutlich mehr Licht erzeugen (ca. 10 mal ?), da braucht man dann nur etwas um das Licht auch zu verteilen.

Für eine Anzeige mit 100 mm Ziffernhöhe braichte man von den LEDs wohl etwa 3-6 LEDs je Segment. Also 21 - 42 für eine Stelle.
Die Spanung je LED wird bei etwa 2.1 V liegen, also etwa 6.3 ... 12.6 V. Dazu kommt dann noch etwa 1,5-2 V für die Treiber und ab etwa 1 V für den Vorwiderstand. Wenn man 12 V als versorgung hat, sollten also 4 LEDs in Reihe nochgehen, 4 wird schon zu knapp werden, geht aber wenn der Akku 14 V liefert. Auch wenn man den Strom erhöht, wird die Spannung nur wenig höher werden, wegen der relativ steilen Dioden kennlinie.

Man sollte Auf alle Fälle erst mal einen Test machen mit wenigstens einem Segment (z.B. 4 LEDs), um Abzuschätzen wie viel Strom man wirklich braucht. Dafür reicht schon der Betreib mit konstantem Strom. Für die Sichbarkeit bei viel Umgebungslicht hilft ein Farbfilter vor der Anzeige ziehmlich viel. Das kann schon mal einem Faktor 2 im Strom ausmachen, um die gleiche Sichtbarkeit zu bekommen.

Man kann die Helligkeit ohne große Schwierigkeit reduzieren, oder auch einige Stellen etwa heller machen, wenn dafür andere dunkler werden.

Der Treiber ULN2003 ist absoluter Standard und auch entsprechend günstig. Die high side Version nicht ganz so normal, aber auch fast überall zu kriegen.

phyro
29.06.2009, 19:43
Ja und wie werden dann die höheren Ströme an den LEDs realisiert?

Besserwessi
29.06.2009, 20:34
Der Strom der LEDs wird duch den Vorwiderstand eingestellt. Ein kleinerer Vorwiderstand für mehr Strom.

Wegen der Vielen LEDs sollte man eventuell was vorsehen, um zu verhindern das ein Segement länger als etwa 10 ms in eins leuchtet. Bei einem Hänger im Programm könnten sonst einige LEDs durchbrennen, denn den höheren Strom (>20 mA) können die meisten LEDs nicht auf Dauer ab.

Eine durchaus ernstzunehmende Alternative, wäre es die LEDs doch nicht gemultiplext zu betreiben, sondern z.B: für jede Stelle einen kleinen µC (z.B. Tiny2313) vorzusehn, der dann die LEDs direkt treiben könnte.

phyro
29.06.2009, 21:17
Hmm, aber wenn ich doch immer 5 LEDs, a 2V in Reihe an 12V schließe, dann habe ich doch keinen Widerstand, der den Strom bestimmt, daher sollte es doch dann bei 20mA bleiben oder?

Besserwessi
29.06.2009, 21:48
Man sollte immer etwas extrenes haben, das den Strom begrenzt, in der Regel einen Widerstand. Die Diodenkennlinie ist einfach zu steil und Temperaturabhängig um allein durch die passende Spannung einen einigermaßen konstanten Strom zu bekommen: nur etwa 20 mV mehr an der Diode und der Strom kann sich verdoppeln.

Wenn man die Dioden gemultiplext beteiben will, kann man mehr als 20 mA (bis etwa 100 mA) nehmen und wird es eventuell auch müssen um genug helligkeit zu bekommen. Die LEDs sind ja immer nur kurz an und können dann mehr Strom vertragen.

Vitis
29.06.2009, 23:25
also bei meiner im moment verwendeten anzeige machts kaum nen unterschied in
der helligkeit ob ich 20mA oder 40mA durch schicke.
was die helligkeit angeht, kommt mehr wie schon beschrieben auf
die multiplexgeschwindigkeit an.

Crazy Harry
30.06.2009, 11:33
Schau mal ins aktuelle Elektor 7/8-2009. Da gibts ne Schaltung für eine 6-stellige-7-Segment-Anzeige per SPI mit einem MAX7219 (glaub ich heißt der). Es wären bis 8 Stellen möglich mit dem IC.

BlackDevil
30.06.2009, 17:59
Man könnte sie auch mit Port Expandern ansteuern über I2C oder SPI ;)

Besserwessi
01.07.2009, 17:13
Wenn man mit etwa 10 mA je Segment auskommt, geht das mit Portexpandern sogar sehr gut. Dann kann man damit die Segmente direkt treiben. Braucht dann nur einen 74HC595 und 7 Widerstände je Stelle. Bei mehr als etwa 6 LEDs in Reihe (oder ca. 12 V) wird es aber schwierig mit der Spannung.

BlackDevil
01.07.2009, 19:24
Man kann ja immer noch einen LED Treiber hinter die Pins des Expanders hängen ;) So kann man ja auch einen I2C Lastschalter aufbaue, mit Triacs, Trictreiber, OpAmp und Port Expander

phyro
02.07.2009, 05:23
Ich werde das jetzt einfach nur mit einem LED Treiber und dem BCD-Decoder realisieren. Und dabei dann je Segment 5 LEDs und einen Vorwiderstand an den LED-Treiber anschießen. Ich bin mal gespannt wie es klappt.

Was gibt es denn für Sicherheitsmechanismen um zu verhindern, dass das Programm beim Multiplexen irgendwann hängt und die LEDs dann kaputt gehen?

BlackDevil
02.07.2009, 11:16
Watchdog, fällt mir da spontan ein

Vitis
02.07.2009, 16:20
im prinzip könntste kondensatoren in reihe schalten, wenn geladen
ist segment aus :)

Besserwessi
02.07.2009, 21:10
Als möglichkeit degegen ein dauerndes Leuchten könnte man beim BCD Decoder (für die Auswahl der Stellen) eine Enable PIN nutzen, der nur über einen Kondensator aktiviert werden kann. Alternativ auch die Auswahl auf Stellen 8,9,10.
Braucht aber einen extra Pin und etwas mehr Software.

phyro
11.07.2009, 23:58
Ich hab mich mal hingesetzt und einen Schalplan erstellt. Würde gerne mal hören ob das so funktioniert, ist meine erste µController Schaltung und mir fehlt daher die Erfahrung.

BlackDevil
12.07.2009, 08:21
Warum machst du es nicht per Multiplex?

Besserwessi
12.07.2009, 10:31
Die Schaltung sieht so recht gut aus. Die ist auch für eine Gemultiplexte Anzeige mit 6 Stellen. Was allerdings noch fehlt sind die Vorwiderstände hinter den High Side Treibern.

Beim 7 Seg. Decoder müßte man mal im Datenblatt nachschauen ob die Steuereingänge so richtig sind.

Der Regler sollte wohl ein 7805 und kein 7812 sein.

Wenn man genug IO Pins frei (3 mehr) hat, kann man die Funktion des BCD-7Seg Decoders auch in Software machen und das IC einsparen.

phyro
12.07.2009, 10:58
Danke, die Vorwiderstände kommen direkt auf die Platine mit den Anzeigen. Daher sieht man die hier jetzt nicht. Genau, der Regler ist ein 7805, hab aber kein Teil dafür in Eagle gefunden und daher hier dann einen Kompatiblen genommen mit selber Bauform.

Wofür genau ist denn eigentlich die Induktivität und die beiden Kondensatoren an AREF und AVCC? Die habe ich jetzt einfach mal von der RN-Minicontroll übernommen. Aber im Beispiel im RN-Wissen hier (http://www.rn-wissen.de/index.php/AVR-Einstieg_leicht_gemacht) sind die Pins einfach so an 5V angeschlossen.

Ist es den überhaupt wichtig welche Ports ich nehme, oder kann ich für mein Vorhaben, entweder an oder aus, jeden beliebigen Port verwenden.

Besserwessi
12.07.2009, 11:06
Die Kondensatoren an VCC und AVCC sind zur Entstörung des µC. Die werden auch Entkoppelkondensatoren genannt. Der Kondensator an AREF dient zum filtern der Referenzspannung. Wenn man den AD nicht nutzen will, oder keine hohen anforerungen hat, kann man den auch weglassen. Die Induktivität zwischen den 5 V und AVCC dient zum Filtern der Versorgung AVCC, aus der unter anderem der AD gespeißt wird. Das hilt um weniger Störungen beim AD wandler zu haben. Wenn die Versorgungsspannung sonst sauber ist oder man keine so hohen Anforderungen an den AD hat, geht es auch ohne. Dann AVCC direkt mit VCC verbinden.

phyro
12.07.2009, 18:34
Für den Fall, dass ich später mal einen DCF77 Empfänger anschließen möchte, welche Controller-Pins sollte ich da freihalten?

Besserwessi
12.07.2009, 19:59
Das DCF77 Signal ist extrem langsam. Da ist es relativ egal welchen Pin man nimmt. Mit der LED Anzeige wird man ja ohnehin nicht in den Bereich von extrem kleinen Stromverbrauch (<0.1 mA) kommen. Einen gewissen Vorteil solten Pins wie int0, oder ICP haben, wegen der möglichkeit Interrupts auszulösen. Wenn das Modul mit I2C arbeitet Wären die I2C Pins natürlich die richtige Wahl.

phyro
08.08.2009, 18:58
Die Uhr ist nun fertig.

Danke nochmal für die Hilfe.

Hier könnt ihr das Ergebnis sehen! (https://www.roboternetz.de/phpBB2/viewtopic.php?p=454832#454832)