Hallo zusammen,
ich möchte eine einfache LED Matrix basteln und über Multiplexing
steuern. In dem Artikel "LED-Matrix" ist das ja recht genau beschrieben:
http://www.mikrocontroller.net/articles/LED-Matrix
Nur zwei Verständnisfragen:
- Im beigefügten Schaltplan kommen die Vorwiderstände in die Zeilen
zwischen den Prozessorpin und R1, R2 usw., richtig?
- Zur Steuerung steht im Artikel:
"Der Ablauf der Steuerung ist recht einfach:
1.alle Spalten ausschalten, Muster für Spalte C1 an Zeilen R1..R7
anlegen, Spalte C1 einschalten
2.Spaltenmultiplexzeit warten
..."
--> Spalte ausschalten bedeutet, den Pin an Cx auf 1 setzen, oder?
--> Muster an Zeilen R1..R7 anlegen --> bedeutet das, für die
angeschalteten LEDs eine 0 setzen und für die ausgeschalteten LEDs eine
1?
Also wenn eine LED angehen soll, muss Rx = 0 und Cx = 1 sein - stimmt
das so?
Wenn man den positiven Anschluss einer LED an den +Pol legt, dann lässt
sie sich mit einer 0 Am Port einschalten, wenn man den negativen
Anschluss an minus legt, dann lässt sie sich mit einer 1 am Portregister
einschalten...
JK
Mike schrieb:> zwischen den Prozessorpin und R1, R2 usw., richtig?
kommt drauf an, ob du die Spalten oder die Zeilen multiplext. Laut
Artikel wird Spaltenmultiplexing betrieben, also Ja, die Widerstände
zwischen µC und "R1 - Rx"
Mike schrieb:> Spalte ausschalten bedeutet, den Pin an Cx auf 1 setzen, oder?
alle Spalten aus und nur die erste Spalte ein...aber die Spalten werden
gegen Masse geschalten mit einem entsprechenden Transistor oder Mosfet.
Mike schrieb:> bedeutet das, für die angeschalteten LEDs eine 0 setzen und für die> ausgeschalteten LEDs eine 1?
genau anders herum.
Mike schrieb:> Also wenn eine LED angehen soll, muss Rx = 0 und Cx = 1 sein - stimmt> das so?
nein. es müssen in dem Sinne beide "1" sein. Wobei Cx wie bereits
erwähnt gegen Masse geschalten wird. direkt steuerst du nur den
Spalten-Transistor/Mosfet an.
quasi so: Cx
--- |
µC |-----Rv--|<
| |
--- GND
> - Im beigefügten Schaltplan kommen die Vorwiderstände in die Zeilen> zwischen den Prozessorpin und R1, R2 usw., richtig?
Je, wenn R die Zeilen sein sollen und wie weiter unten beschrieben
bedeit werden sollen. Und ob die Prozessorpins genug Strom liefern ist
auch sehr zweifelhaft.
> Spalte ausschalten bedeutet, den Pin an Cx auf 1 setzen, oder?
Nein. Eine LED ist nicht ohne Grund ein Pfeil weil durch die Strom in
Pfeilrichtuung fliesst damit sie leuchtet.
> Muster an Zeilen R1..R7 anlegen --> bedeutet das, für die> angeschalteten LEDs eine 0 setzen und für die ausgeschalteten> LEDs eine 1?
Nein.
Erstmal vielen Dank!
Ganz hab ich's noch nicht verstanden... anbei eine Skizze zur
Verdeutlichung:
- Ich dachte ursprünglich, die roten Verbindungen wären ausreichend -
dass der Strom quasi aus PB2 durch den Vorwiderstand und die LED in PB3
fließen würde (als Beispiel). Aber ist wohl ein grundsätzlicher
Denkfehler?
- Wenn ich 4toTakoe richtig verstehe, müsste ich die blauen Verbindungen
noch ergänzen und in diese Verbindungen noch einen Transistor oder
Mosfet einbauen. Was ist da der Unterschied? Und wie würde ich den genau
einbauen?
--> Basis an PB3 bzw. PB4
--> Collector an LED
--> Emitter Masse
(???)
MfG
Mike
hatte ich eigentlich auch angenommen...
Aber die Antwort von 4ToTake hat mich etwas verunsichert:
"...aber die Spalten werden gegen Masse geschalten mit einem
entsprechenden Transistor oder Mosfet... es müssen in dem Sinne beide
"1" sein. Wobei Cx wie bereits erwähnt gegen Masse geschalten wird.
direkt steuerst du nur den Spalten-Transistor/Mosfet an."
Oder ist das nur eine (bessere) Alternative? Und wie würde ich diese
Lösung genau schalten --> dafür die blauen Verbindungen, wie ich es
verstehen würde....
Mike
Ich vermute mal, die ist nicht so recht klar, wie man sich den
jeweiligen Transistor vorstellen muss.
Stell ihn dir als Schalter vor.
Wenn du ihn von deinem Portpin aus mit einer 0 versorgst, dann ist der
Schalter offen - kein Strom kann fliessen
WEnn du ihn von deinem Portpin aus mit einer 1 versorgst, dann ist der
Schalter geschlossen - Strom kann fliessen
Beim Multiplexing 'schliesst' du genau jene Schalter (Transistoren), so
dass sich ein STromfluss durch die LED ergibt, die du leuchten lassen
willst.
Das ist also anders, als wie wenn du die LED direkt an die Portpins
hängst.
Da stellst du mit den Portpins das jeweilige Potential an den
LED-Anschlüssen ein. Mit Treibertransistoren machst du das im Prinzip
auch, aber indirekt, indem du den jeweiligen 'Schalter' öffnest oder
schliesst.
Du kannst aber nicht direkt an den Portpin gehen, weil der Portpin nicht
den für den Betrieb der LED notwendigen Strom aufbringen kann. Schon gar
nicht wenn es viele sind. Denn wenn in deinem Beispiel 2 LED leuchten
sollen, dann landen beide am gleichen Portpin. Und das ist dem zuviel.
Und da kommen jetzt die Transistoren ins Spiel. Einen Transistor kann
der µC ansteuern. Und der Transistor kann viel mehr STrom durchlassen.
Daher braucht man immer bei einer LED-Matrix (ausser vielleicht bei
einer kleinen 2*2) Treibertransistoren, weil man sonst den Strom nicht
zustandekriegt.
D.h. deine Verschaltung ist sowas wie der naive Ansatz, der in der
Praxis daran scheitert, dass der µC den Strom nicht zustandebringt. Du
hast die Prinzip-Skizze im Wiki zu wörtlich genommen.
Ich greif mal einfach eine LED als Prinzipskizze heraus
+---------+
|
PB2 ---------------+
| | Anode
| --
| \/
| ----
| | Kathode
PB3 ---------------+
|
+---------+
Damit diese LED in dieser Verschaltung leuchten kann, muss PB2 auf 1
(also +5V) und PB3 auf 0 (also 0V) sein. Denn nur dann sieht die LED an
ihrer Annode eine höhere Spannung als an ihrer Kathode und leuchet.
Bei allen anderen Kombinationen leuchtet da nichts.
In Kürze: PB2 - 1
PB3 - 0
Jetzt fügst du Treibertransistoren ein. Diese Treibertransistoren
fungieren wie Schalter.
o +5V
+----------+ |
| \ Transistor, der die Anode der LED mit
PB2--------------\ +5V verbindet
| |
| -- Anode
| \/
| ----
| |
PB3-------------\ Transistor, der die Kathode der LED mit
| \ 0V verbindet
+-----------+ |
--+--- GND
Die LED kann nur dann leuchten, wenn beide Schalter geschlossen sind.
Einer alleine reicht nicht. Damit die Schalter geschlossen werden,
müssen aber sowohl PB2 als auch PB3 eine 1 ausgeben. Denn so ist das ja
gebaut: eine 1 schliesst den Schalter, eine 0 öffnet ihn.
D.h. hier hast du in der Ansteuerung
PB2 - 1
PB3 - 1
nur dann leuchtet die LED.
Und da liegt die Diskrepanz zwischen dir und 4ToTakoe.
Du hast von ersterem gesrprochen. Er von letzterem. Und das aus gutem
Grund. Denn im Regelfall benötigt man bei einer LED-Matrix diese
Transistor-Schalter. Warum? Weil der µC den Strom nicht transportieren
kann, der notwendig ist um die LED einer Spalte gemeinsam leuchten zu
lassen.
Denn, um auf dein letztes Beispiel zurückzukommen:
Damit die beiden LED in deiner rechten LED-Spalte leuchten können, kommt
der Strom aus PB0 und PB2 heraus. Soweit noch kein Problem. Aber beide
Pfade führen über die jeweiligen LEDs zurück zu PB3. Und da liegt dann
der 'Flaschenhals'. PB3 schafft das dann nicht mehr mit dieser
Strommenge zurechtzukommen, die 'von beiden LED kommend' nach Masse
abgeführt werden muss.
Jetzt versteh ich's!!
@ Karl Heinz: Deine Erläuterungen in den beiden Beiträgen sind "genial"
- beantwortet genau meine Fragen und Unklarheiten - besten Dank! Hast
echt Talent, die Dinge auf den Punkt zu bringen, so dass sie auch ein
Anfänger wie ich begreift...
MfG
Mike