www.mikrocontroller.net

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


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

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: Siggi (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siggi schrieb:

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

http://www.mikrocontroller.net/articles/AVR-Tutori...

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)

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: Simon Budig (nomis)
Datum:

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

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

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

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vlad Tepesch schrieb:
> die schieberegister können die LEDs aber nicht treiben.

Warum nicht?

http://www.mikrocontroller.net/articles/AVR-Tutori...


Peter

Autor: Siggi (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Siggi (Gast)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: Siggi (Gast)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: ... ... (docean) Benutzerseite
Datum:

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

Autor: Siggi (Gast)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

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

Autor: MaWin (Gast)
Datum:

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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

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

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

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

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.