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 :)
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.
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 ?
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)
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.
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
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)
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.
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.
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 ?
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.
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 :-)
> 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
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?
> 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.
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
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?
> 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.
> 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.
>>> 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...