Forum: Mikrocontroller und Digitale Elektronik Digitaluhr mit vielen LEDs - Atmega32


von Siggi (Gast)


Angehängte Dateien:

Lesenswert?

Moin Moin!

Ich bin grad dabei eine Uhr zu basteln, die die Zeit mit 132 LEDs 
anzeigt. Also 60 für die Sekunden, nochmal so viele für die Minuten und 
12 für die Stunden. Nun habe ich ja das Problem, dass ich begrenz viele 
I/O-Pins an meinem µC habe. Also habe ich mir folgendes überlegt.

1) Ich spendiere 12 Pins für die Ansteuerung von 12 LEDs. Das ist ein 
Block.

2) Dann noch 2 Pins mit denen ich über einen Demultiplexer entweder 
Sekunden/Minuten oder Stunden auswähle (1 aus 3).

3) Und als letztes noch 3 Pins für die Auswahl (ebenso über einen 
Demultiplexer) des jeweiligen 12er Blocks (12 aus 60).

Ich hoffe das macht soweit Sinn. Nun gehts an die Schaltung. Da der µC 
nicht so viele LEDs treiben kann, werde ich die LEDs an high Potential 
anschliessen und dann über einen Low-Pegel am µC-Pin einschalten.

Für die beiden anderen Auswahlsignale 2) und 3) benutze ich ja einen 
Demultiplexer, der ebenso Low-aktive Pegel liefert. Also muss ich 
insgesamt schonmal mit PNP-Transistoren arbeiten, oder ?

Also ich habe mal die folgende kleine Schaltung zum rumprobieren 
erstellt:
Der Digitale Eingang oben links entspricht 2) und die unteren dem Punkt 
1). Habe nur zur Vereinfachung nur 3 LEDs statt 12 genommen.

EIgentlich macht die Schaltung schon fast, was ich will. Das Problem 
seht ihr in Bild 2. So ist noch alles in Ordnung, aber wenn ich nun den 
Eingang oben Links auf High setzte, stürzt der Simulator ab ;)

Hmm also falls ihr ein paar Ideen habt, wie ich das ganze noch 
optimieren kann, bzw. fehlerfrei kriegen kann, wäre ich euch sehr 
dankbar :)

Vielen Dank für Eure Hilfe :)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Das mit deiner Schaltung ist schön und gut, aber wie willst du das 
Layout machen? Der wesentlich einfachere Weg wären ein paar 
Schieberegister...
Meines Erachtens machst du dir unnötig einen Knoten ins Hirn.

Warum moppelst du das mit 2 Steuerleitungen eigentlich doppelt? Wenn dei 
linke untere alle Transistoren (=LEDs) einschaltet und die linke obere 
das selbe macht, was hast du dann gewonnen?
Besser du lässt die ganzen Transistoren unten weg und macht eine 
UND-Verknüpfung der beiden linken Signale auf den oberen Transistor.

von Siggi (Gast)


Lesenswert?

Danke schonmal für deine Tipps! Ich weiss, dass es in der von mit 
hochgeladenen Beispielschaltung unnötig aussieht 2 Steuerleitungen auf 
der linken Seite zu haben. Aber ich möchte ja insgesamt 132 LEDs 
anschliessen.
Dann bräuchte ich die oberste Leitung um zwischen Minuten/Sekunden und 
Stunden zu wählen und die untere Linke um je einen Block aus 12 LEDs aus 
den 60 LEDs (entfällt bei Stunden) zu wählen.

Aber das ist wirklich ganz schön Transistorlastig. Wie sähe denn dein 
Vorschlag mit den Schieberegsitern aus ?

von Karl H. (kbuchegg)


Lesenswert?

Siggi schrieb:

> Wie sähe denn dein
> Vorschlag mit den Schieberegsitern aus ?

http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister#Kaskadieren_von_Schieberegistern

Anstelle von 2 dann eben 132 / 8 = 17 Stück
Die im Kreis entlang des Zifferblatts angeordnet werden, verbunden mit 3 
Leitungen.

Da du aber Sekunden, Minuten und Stunden jeweils in einem eigenen Kreis 
anordnen willst, würden sich 3 getrennte Schieberegisterketten anbieten: 
9 Pins am Prozessor.
(Über Schieberegister für die Stunden kann man streiten)

Auch gibt es von TI Led-Treiber, die in einem IC gleich 24 
IC-Treiberstufen integriert haben (ist aber im Prinzip immer noch ein 
Schieberegister)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Nimm ein paar 74HC595 und einen Schieberegisterausgang pro LED...
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister

Ich würde das so machen:
Einen einzigen Schieberegisterring für 60 LEDs und dann die Sekunden-, 
Minuten- und (an jeden 5. Ausgang) die Stunden-LEDs an die 
Schieberegisterausgänge anschliessen und diese drei LED-Ketten 
multiplexen.

von Simon B. (nomis)


Lesenswert?

Siggi schrieb:
> Ich bin grad dabei eine Uhr zu basteln, die die Zeit mit 132 LEDs
> anzeigt. Also 60 für die Sekunden, nochmal so viele für die Minuten und
> 12 für die Stunden. Nun habe ich ja das Problem, dass ich begrenz viele
> I/O-Pins an meinem µC habe.

Wieviele LEDs leuchten denn maximal gleichzeitig?

Wenn Du für Stunde/Minute/Sekunde nur je eine LED verwenden willst, also 
max. 3 LEDs gleichzeitig leuchten, könntest Du Charlieplexing verwenden. 
Dann kommst Du mit 12 IO-Pins aus.

Sobald Du allerdings ganze Kreisabschnitte leuchten lassen möchtest, 
wird das unpraktikabel, weil man mit Charlieplexing zu einem Zeitpunkt 
max. eine LED leuchten lassen kann und das Tastverhältnis zu ungünstig 
werden könnte.

Viele Grüße,
        Simon

von Siggi (Gast)


Angehängte Dateien:

Lesenswert?

Lothar Miller schrieb:
> Nimm ein paar 74HC595 und einen Schieberegisterausgang pro LED...
> http://www.mikrocontroller.net/articles/AVR-Tutori...
>
> Ich würde das so machen:
> Einen einzigen Schieberegisterring für 60 LEDs und dann die Sekunden-,
> Minuten- und (an jeden 5. Ausgang) die Stunden-LEDs an die
> Schieberegisterausgänge anschliessen und diese drei LED-Ketten
> multiplexen.

Die Idee mit den Schieberegistern ist wirklich gut :) Habe meine 
Schaltung mal mit hochgeladen. So müsste das funktionieren, oder ? 
(Minuten und Stunden habe ich nun nicht mit eingezeichnet. die würden 
dann auch noch einen Transistor, wie oben, bekommen und mit an die 
Schieberegsiter angeschlossen werden)

von Vlad T. (vlad_tepesch)


Lesenswert?

die schieberegister können die LEDs aber nicht treiben. entweder du 
schaltest da noch einen UDN oder ULN dazwischen, oder benutzt einen 
TPIC595 oder einen der vorhin erwähnten Treiber von TI.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jetzt machst du aus dem Q1 noch einen PNP.
Und wenn nur 1 LED gleichzeitig leuchten soll, dann reicht 1 einziger 
Vorwiderstand für die gesamte Kette aus.
Und dann das Ganze noch erweitern mit einem Q2 für die Minuten und einem 
Q3 für die Stunden und fertig.

EDIT:
> die schieberegister können die LEDs aber nicht treiben.
Doch das geht locker.

von Peter D. (peda)


Lesenswert?


von Siggi (Gast)


Lesenswert?

Da die 5V Betriebsspannung von oben kommen, müssen die Schieberegsiter 
noch nur den Strom nach Masse ableiten. Im Datenblatt steht zu den 
74HC595 Schieberegistern, dass die 70 mA über VCC bzw. GND ableiten 
können. Ich habe meine Widerstände so dimensioniert, dass durch jede 
Diode (wenn eingeschaltet) knapp 7 mA fliessen. 8 mal 7 mA = 56 mA < 70 
mA. Funktioniert das nicht ?

von Karl H. (kbuchegg)


Lesenswert?

Siggi schrieb:

> Diode (wenn eingeschaltet) knapp 7 mA fliessen. 8 mal 7 mA = 56 mA < 70
> mA. Funktioniert das nicht ?

Doch, das funktioniert schon.
Es gibt ja auch low-Current LED, die schon mit wesentlich weniger Strom 
eine Helligkeit erzeugen, dass du zum Ablesen eine Sonnenbrille 
brauchst.

von Siggi (Gast)


Lesenswert?

Lothar Miller schrieb:
> Jetzt machst du aus dem Q1 noch einen PNP.

Warum PNP?

> Und wenn nur 1 LED gleichzeitig leuchten soll, dann reicht 1 einziger
> Vorwiderstand für die gesamte Kette aus.

Da bin ich noch am überlegen, wie ich es haben möchte :-)

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> dass die 70 mA über VCC bzw. GND ableiten können.
... ohne dass sie sofort kaputtgehen.

> Ich habe meine Widerstände so dimensioniert, dass durch jede Diode
> (wenn eingeschaltet) knapp 7 mA fliessen. 8 mal 7 mA = 56 mA < 70 mA.
> Funktioniert das nicht ?
Wie gesagt: wenn du nur 1 LED einschalten willst, ist 1 Widerstand 
ausreichend. Du willst doch niemals alle gleichzeitig einschalten, oder?

BTW: Nimm "High Efficency" bzw. "Low Current" LEDs

von Siggi (Gast)


Lesenswert?

Siggi schrieb:
> Lothar Miller schrieb:
>> Jetzt machst du aus dem Q1 noch einen PNP.

Wieso denn PNP? Geht nicht auch NPN? in diesem Fall? Oder ergibt sich 
sonst ein anderer Vorteil?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Warum PNP?
PNP: Emitter an 5V, Basis über Widerstand am Portpin, Kollektor an die 
LED-Sammelleitung. Dann arbeitet der Transistor im Schaltbetrieb.

So wie du es gezeichnet hast, kommen bei den LEDs maximal
5V-Ube = 5V-0.7V = 4.3V an. Es fallen also am Transistor 0.7V ab. 
Solltest du dann aber mal auf die Idee kommen, alle 60 LEDs 
einzuschalten, dann muß dein Transistor 420mA schalten, was zu einer 
Verlustleistung von 0,3W führt. Das musst du bei der Transistorauswahl 
beachten...

EDIT:
So ein PNP wie der obere Transistor in deiner zu Beginn geposteten 
Schaltung wäre richtig.

von ... .. (docean) Benutzerseite


Lesenswert?

Siggi schrieb:
> Da der µC
> nicht so viele LEDs treiben kann, werde ich die LEDs an high Potential
> anschliessen und dann über einen Low-Pegel am µC-Pin einschalten.

btw. auch das funzt meinst nicht, AVRs können zB nur 20mA als Quelle 
(also raus) und -20mA rein (also wenn bei LOW die Led angeht)

aber da ist ja eh schon anders

von Siggi (Gast)


Lesenswert?

Lothar Miller schrieb:
> So wie du es gezeichnet hast, kommen bei den LEDs maximal
> 5V-Ube = 5V-0.7V = 4.3V an. Es fallen also am Transistor 0.7V ab.
> Solltest du dann aber mal auf die Idee kommen, alle 60 LEDs
> einzuschalten, dann muß dein Transistor 420mA schalten, was zu einer
> Verlustleistung von 0,3W führt. Das musst du bei der Transistorauswahl
> beachten...

Ok vielen Dank! Das hab ich geändert. Ganz kurz nur nochmal für mein 
Verständnis. Das mit den 0,7 V habe ich verstanden. Ist es richtig, dass 
bei PNP Transistoren die Spannung zwischen Emitter und Kollektor nur 
etwa 0,2 V beträgt? Somit fällt also weniger am Transisor ab und bei den 
LEDs kommen dann etwa 4,8 V an. Das ist der Vorteil richtig?

Für den Fall, dass alle LEDs leuchten sollen, muss ich aber trotzdem 
bedenken, dass der Transistor einen erheblichen Strom schalten muss?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Ist es richtig, dass bei PNP Transistoren die Spannung zwischen
> Emitter und Kollektor nur etwa 0,2 V beträgt?
Nicht ganz. Es hat rein gar nichts mit PNP oder NPN zu tun, sondern nur 
mit der Ansteuerart und dem Basisstrom.

Es ist ganz einfach so, dass zwischen Basis und Emitter eines jeden 
Transistors 0,7V abfallen. Und wenn bei deiner NPN-Schaltung an der 
Basis 5V vom uC anliegen, können am Emitter nur 4,3V sein. Und wenn am 
Emitter nur 4,3V sind, dann fallen an der CE-Strecke 5V-4,3V = 0,7V ab.
Du könntest den Transistor weiter aufsteuern, wenn du an der Basis 5,7V 
anlegtest. Dann bliebe nur noch Ucesat (=ca. 0,2V) übrig.

Wenn du aber den Emitter eines PNP-Transistors an 5V anlegst und die 
Basis über einen Widerstand in Richtung GND ziehst, dann kannst du 
soviel Strom durch die Basis schicken, dass der Transistor komplett 
durchsteuert. Und damit hast du auch wieder die Ucesat als 
Spannungsabfall.

von Vlad T. (vlad_tepesch)


Lesenswert?

Peter Dannegger schrieb:
> Warum nicht?
>
> http://www.mikrocontroller.net/articles/AVR-Tutori...
>
>
> Peter

naja, hier werden die "Absolute Maximum Ratings" aber zum Standardfall 
gemacht.

von MaWin (Gast)


Lesenswert?

> Charlieplexing verwenden.

Komplementary LED drive, um genauer zu sein:
http://ww1.microchip.com/downloads/en/AppNotes/91029a.pdf

> Dann kommst Du mit 12 IO-Pins aus.

Und ohne weitere Bauteile ausser 12 Vorwiderständen, allerdings im 1:3 
Multiplex.

Daher kann es sinnvoller sein, 9+9+4 zu verwenden, und die LEDs laufen 
mit vollem Strom den uC liefern kann ohne Multiplex.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>>> Dann kommst Du mit 12 IO-Pins aus.
Aber das Layout möchte ich mal sehen. Ich möchte behaupten, mit den 
Schieberegistern könnte man einseitig hinkommen...

von Siggi (Gast)


Angehängte Dateien:

Lesenswert?

Okay danke für Eure Hilfe schonmal :)
Mit dieser Schaltung werd ichs mal versuchen :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.