Forum: Mikrocontroller und Digitale Elektronik LED Matrix - mehrere LEDs parallel


von Myjestic E. (myjestic)


Lesenswert?

Hi,

habe eine Wandbeleuchtung, die aus 6x6 Feldern besteht hinter jedem Feld 
befinden sich 4 LEDs (in jeder Ecke eine). Nun wollte ich gerne die 
ganze Beleuchtung via Matrix ansteuern. Muss aber anstatt der sonst 
üblichen einzelnen LED immer 4 LEDs gleichzeitig anschalten um ein Feld 
homogen beleuchten zu können.

Das einfachste wäre natürlich die 4 LEDs parallel zu schalten und dann 
wie eine einzelne zu behandeln, problematisch ist dabei aber die 
Gleichverteilung des Stroms (der ja ohnehin nun 6 mal höher sein muss). 
Da es mir zu Aufwendig ist, jeder der 144 LEDs einen separaten 
Vorwiderstand zu spendieren, frage ich Euch wie ich das Problem noch 
lösen könnte...

von Thomas B. (escamoteur)


Lesenswert?

Wieso schaltest Du sie nicht einfach in Reihe?

von Myjestic E. (myjestic)


Lesenswert?

Thomas Burkhart schrieb:
> Wieso schaltest Du sie nicht einfach in Reihe?

Okay, ja stimmt, könnte ich machen. Angenommen die LEDs haben jeweils 
eine Flussspannung von 2V, dann müsste ich mindestens schon mal 8V über 
den 4 LEDs anliegen haben. Bis jetzt läuft mein ATmega zum plexen mit 
5V, und die wollte ich auch zum ansteuern nutzen.

Mit 5V hätte ich die npn-Transistoren wie im folgenden Bild zu sehen 
ist, nutzen können.
http://www.mikrocontroller.net/wikifiles/6/64/LED_Matrix_8x5.png

Dürfte ja jetzt nicht mehr gehen, wenn ich mit 5V die Transistoren 
schalte und die Kollektorspannung z.B. 12V beträgt (da Emitterspannung 
dann 8V).

Muss ich dann einfach anstatt npn, pnp nehmen oder wie realisiere ich 
das dann?

von Thomas B. (escamoteur)


Lesenswert?

Ich ziehe für sowas FETs vor, sind für mich auch irgendwie einfacher zu 
verstehen in der digitalen Welt.

Gruß
Tom

von Myjestic E. (myjestic)


Lesenswert?

Okay muss ich ohnehin machen, da die Ströme dann doch schon relativ hoch 
werden. Aber welche und wie verschalte ich die dann?

von Thomas B. (escamoteur)


Angehängte Dateien:

Lesenswert?

Kuck mal, so wie ich den Lautsprecher hier angschlossen habe.

Gruß
Tom

von Myjestic E. (myjestic)


Lesenswert?

So verstehe ich das schon, aber wenn Du Dir die Schaltung von oben mal 
ansiehtst... Die Transistoren Q9 - Q13 ersetze ich duch n-Kanal Mosfets 
(so wie in Deiner Schaltung). Was ist jetzt aber mit Q1 - Q8 da dürften 
ja N-Kanal nicht mehr gehen.

von Thomas B. (escamoteur)


Lesenswert?

Kuck mal hier. Bin aus dem stehgreif jetzt auch nicht mehr so firm mir 
FETs, brauch die nur selten

http://www.mikrocontroller.net/articles/Snippets#Wie_schlie.C3.9Fe_ich_einen_MOSFET_an_einen_Mikrocontroller_an.3F

von R. M. (rmax)


Lesenswert?

Kai I. schrieb:

> Mit 5V hätte ich die npn-Transistoren wie im folgenden Bild zu sehen
> ist, nutzen können.
> http://www.mikrocontroller.net/wikifiles/6/64/LED_Matrix_8x5.png
>
> Dürfte ja jetzt nicht mehr gehen, wenn ich mit 5V die Transistoren
> schalte und die Kollektorspannung z.B. 12V beträgt (da Emitterspannung
> dann 8V).

Die Emitterspannung wäre sogar noch niedriger, nämlich 5V-UBE, also ca. 
4,3V.

> Muss ich dann einfach anstatt npn, pnp nehmen oder wie realisiere ich
> das dann?

Ein PNP dürfte problematisch sein, weil der ja über seine 
Basis-Emitter-Diode bestrebt wäre, den Portpin in Richtung 12V 
hochzuziehen, was dem auf Dauer sicher nicht so gut tut.

Du brauchst einfach einen Pegelwandler zwischen dem Portpin und der 
Basis des Highside-NPN. Das kann ein weiterer NPN in Emitterschaltung 
sein oder ein Treiber-IC mit Open-Collector- bzw. Open-Drain-Ausgägnen.

Thomas Burkhart schrieb:
> Bin aus dem stehgreif

FYI: http://de.wikipedia.org/wiki/Stegreif

"Da die Herkunft des Wortes weithin unbekannt ist, wird Stegreif – 
passend zu den ähnlichen Redewendungen „aus dem Stand“ und „aus der Luft 
gegriffen“ – oft falsch Stehgreif geschrieben und gesprochen."

> 
http://www.mikrocontroller.net/articles/Snippets#Wie_schlie.C3.9Fe_ich_einen_MOSFET_an_einen_Mikrocontroller_an.3F

Die dort gezeigte direkte Ansteuerung funktioniert aber auch wieder nur, 
wenn die Last nicht mit einer höheren Spannung betrieben wird, als der 
µC nd die Push-Pull-Variante ist für diesen Anwendungsfall unnötig 
aufwendig.

Was noch gehen könnte, wäre ein P-FET mit Pullup am Gate, den der µC zum 
Einschalten auf Low zieht. Der Pullup muß dabei so groß sein, daß der 
zulässige Strom durch die Clamping-Dioden des Ports nicht überschritten 
wird.

von Myjestic E. (myjestic)


Angehängte Dateien:

Lesenswert?

Im Anhang ist mal der derzeitige Schaltplan, wie Verhalten sich nun Q1, 
Q3 und Q5 würde das funktionieren, wenn nein warum nicht (ich habs noch 
nicht recht verstanden). Und wie müsste das jetzt konkret aussehen?

von R. M. (rmax)


Lesenswert?

Es funktioniert aus folgenden Gründen nicht:

 * Die High-Side ist nur mit +5V anstatt +12V versorgt.
 * Die Pullups der High-Side MOS-FETs müssen an +12V, nicht an GND.
 * Für die High-Side-Schalter mußt Du P-Kanal MOS-FETs verwenden.

Weitere Punkte zur Beachtung:

 * Oben nimmst du die Vorwärtsspannung der LEDs mit 2V an, aber wie groß 
ist sie wirklich? Falls Du weiße oder Blaue LEDs mit Spannungen über 3V 
hast, kannst Du an 12V nur maximal drei in Reihe betreiben.

 * Die Pull-Downs an den Low-Side FETs sind nicht unbedingt nötig, aber 
wenn Du sie verwendest, sollten sie größer sein 22k oder 47k, weil sie 
im Normalbetrieb nur unnötig Strom ziehen.

 * Die Pull-Ups an der High-Side sollten auch größer sein, um den Strom 
durch die Begrenzungsdioden im AVR zu minimieren. Wenn sie zu groß sind, 
schaltet aber evtl. der MOS-FET zu langsam. Da mußt Du ggf. das richtige 
Maß experimentell ermitteln.

von Myjestic E. (myjestic)


Lesenswert?

Alles klar, ich werde den Schaltplan mal umbauen und morgen posten, wäre 
schön wenn Du dann nochmal danach schauen könntest :-)

von R. M. (rmax)


Lesenswert?

Kein Problem, aber bau' Dir auf jeden Fall auch nochmal einen Strang zum 
Testen auf, bevor Du damit in Großserie gehst. ;)

Was ich noch vergessen habe, zu erwähnen: An der High-Seite mußt Du die 
Portpins nicht zwischen 0V und 5V schalten, sondern zwischen 0V und 
hochohmig. Also PORTAx mit 0 initialisieren und im laufenden Betrieb 
über DDRAx umschalten (0=hochohmig, 1=0V). Weil der FET das dann nochmal 
invertiert (bei 0V schaltet er durch, bei hochohmig zieht der Pullup das 
Gate auf 12V und er schaltet ab), entsprechen die 1 und 0, die Du ins 
DDR schreibst, direkt dem an und aus der jeweiligen Spalte in der 
Matrix. :)

Falls Du aus Timing-Günden die Pullups kleiner als 10k machen mußt, 
solltest Du externe Begrenzungsdioden verwenden, weil die internen nur 
mit max. 1mA belastet werden dürfen. Einfach jeweils eine Schottky-Diode 
mit der Anode an den Portpin und mit der Kathode an +5V.

von Falk B. (falk)


Lesenswert?

Es wäre ja vollkommen abwägig, wenn man sich vorher mal etwas zu den 
Grundlagen einer LED-Matrix und Pegelwandler schlau macht. Aber 
nein, das ewig beliebte Thema LEDs muss 1e10 mal aufgekocht werden. 
Seufz

von Thomas B. (escamoteur)


Lesenswert?

Vielleicht sollte man das Artikelverzeichnis etwas übersichtlicher 
gestalten, da ist so viel gutes drin, aber oft sieht man es nicht.

Gruß
Tom

von Falk B. (falk)


Lesenswert?

@  Thomas Burkhart (escamoteur)

>Vielleicht sollte man das Artikelverzeichnis etwas übersichtlicher
>gestalten, da ist so viel gutes drin, aber oft sieht man es nicht.

Das gibt es schon. Aber bei 600++ Artikel ist auch des 
Inhaltsverzeichnis etwas grösser.

http://www.mikrocontroller.net/wikisoftware/index.php?title=Spezial:Kategorien&limit=500

http://www.mikrocontroller.net/articles/Kategorie:Displays_und_Anzeigen

MFG
Falk

von Thomas B. (escamoteur)


Lesenswert?

Aber es könnte nicht Schaden den Artikel Link etwas nach oben zu rücken. 
Ich hab auch erst nach einiger Zeit im Forum bemerkt, dass die Artikel 
überhaupt existieren.

Gruß
Tom

von Myjestic E. (myjestic)


Lesenswert?

Natürlich habe ich die Suche genutzt und mich mit dem Thema auch 
beschäftigt. Das oben angehängte Bild stammt ja von 
http://www.mikrocontroller.net/articles/LED-Matrix

Solche Schwierigkeiten die ich hier aufgreife werden dort aber nicht 
beleuchtet, wäre sehr hilfreich, wenn die Thematik in einigen Bereich 
etwas ausführlicher beschrieben wäre.

Ebenso einige Code-Beispiele wären bestimmt sehr hilfreich, wenn ich die 
fast unüberschaubare Menge an Beiträge dazu lese.


Dennoch bin ich sehr dankbar für Eure Hilfe :-)

von Myjestic E. (myjestic)


Angehängte Dateien:

Lesenswert?

So hier mal der Ausschnitt für 2 Zeilen der Matrix, passt das so?
Und kennt jemand aus dem Stegreif :-P einen SMD NPN Transistor der den 
Basiswiderstand und den Basis-Pulldown integriert hat und am besten noch 
als "Doppelpack"...?

von R. M. (rmax)


Lesenswert?

Warum machst Du jetzt wieder einen Transistor rein?
So wie ich es beschrieben hatte, kannst Du den P-FET doch auch direkt 
mit dem Portpin ansteuern.

von Myjestic E. (myjestic)


Lesenswert?

Weil ich mir denke, dass es den Controller-Eingängen nicht so gut tut, 
wenn er die 12V des FET Pull-Ups abbekommt. Zum anderen ist es mir 
angenehmer die Ausgänge der Zeilen in gleicher Weise schalten zu können 
wie die der Spalten.  Ach ja und der PEgel wäre dann nur 5 gegen 2 Volt, 
dass sollte Probleme machen oder?

von Myjestic E. (myjestic)


Lesenswert?

>Was ich noch vergessen habe, zu erwähnen: An der High-Seite mußt Du die
>Portpins nicht zwischen 0V und 5V schalten, sondern zwischen 0V und
>hochohmig. Also PORTAx mit 0 initialisieren und im laufenden Betrieb
>über DDRAx umschalten (0=hochohmig, 1=0V). Weil der FET das dann nochmal
>invertiert (bei 0V schaltet er durch, bei hochohmig zieht der Pullup das
>Gate auf 12V und er schaltet ab), entsprechen die 1 und 0, die Du ins
>DDR schreibst, direkt dem an und aus der jeweiligen Spalte in der
>Matrix. :)

Sorry, habe gerade nochmal Deinen Text genau gelesen, ja stimmt, so was 
habe ich schonmal getestet. Also den Ausgang als OC nutzen. Würde meine 
Variante dennoch funktionieren?

von R. M. (rmax)


Lesenswert?

Kai I. schrieb:
> Weil ich mir denke, dass es den Controller-Eingängen nicht so gut tut,
> wenn er die 12V des FET Pull-Ups abbekommt.

Dank der eingebauten Begrenzungsdioden bekommt er keine 12V ab. Der 
Pullup muß nur groß genug sein, so daß nicht mehr als 1mA durch die 
Diode fließt, oder man muß eine externe Begrenzerdiode verwenden.

> Zum anderen ist es mir angenehmer die Ausgänge der Zeilen in
> gleicher Weise schalten zu können wie die der Spalten.

Du schreibst die Daten für Zeilen und Spalten doch eh in zwei 
verschiedene Register, dann ist es doch egal, ob Du zweimal das PORT- 
oder ein DDR- und ein PORT-Register nimmst. Mehr Unterschied ist es ja 
nicht.

> Ach ja und der PEgel wäre dann nur 5 gegen 2 Volt,
> dass sollte Probleme machen oder?

Ich verstehe nicht ganz, wie Du das meinst.

von Myjestic E. (myjestic)


Lesenswert?

Ich meinte natürlich gegen 12V.

Deine Variante würde ich eher als Zweitvariante priorisieren. Mir 
gefällt die Transistorvariante besser, es sei denn es würde etwas 
dagegen sprechen.

von R. M. (rmax)


Lesenswert?

Kai I. schrieb:

> Also den Ausgang als OC nutzen.

Genau, nur mußt Du im Gegensatz zu einem echten OC noch dem maximalen 
Strom für die interne Diode gegen VCC noch beachten.

> Würde meine Variante dennoch funktionieren?

Klar, Du machst ja nichts anderes als dem Portpin einen diskreten 
Inverter mit OC nachzuschalten.

von R. M. (rmax)


Lesenswert?

Kai I. schrieb:
> Ich meinte natürlich gegen 12V.

Ich verstehe immer noch nicht, was Du damit sagen wolltest.

> Mir gefällt die Transistorvariante besser, es sei denn es würde
> etwas dagegen sprechen.

Der Minimalist in mir spricht sich dagegen aus. ;)

von Myjestic E. (myjestic)


Lesenswert?

R. Max schrieb:
> Kai I. schrieb:
>> Ich meinte natürlich gegen 12V.
>
> Ich verstehe immer noch nicht, was Du damit sagen wolltest.

Mh so recht weiß ich es selber nicht mehr, sorry. Belassen wir es lieber 
dabei :-)

>
>> Mir gefällt die Transistorvariante besser, es sei denn es würde
>> etwas dagegen sprechen.
>
> Der Minimalist in mir spricht sich dagegen aus. ;)

Ist keine Großserie, sollen vielleicht 2 Platinen werden, da mache ich 
mir lieber den Aufwand und programmiere das so wie gehabt. Bei 
Großserien würde ich Dir auf alle Fälle recht geben, da kann so was 
richtig ins Geld gehen.

Also ich werde das so mal testen. Vielen Dank erstmal.

von Myjestic E. (myjestic)


Lesenswert?

Mir ist noch eine Frage eingefallen :-)
Kann ich bei den Timings die ich verwenden will, den internen Quarz des 
ATmega324 nutzen oder bekomme ich da Schwierigkeiten mit der 
Genauigkeit?

von R. M. (rmax)


Lesenswert?

Der Interne Taktgeber ist kein Quarz, sondern ein RC-Oszillator.

Aber beim multiplexen von LEDs kommt es nicht so sehr auf die 
Genauigkeit an, sondern darauf, daß es schnell genug ist. Wenn der 
interne Oszillator also für Deine Zwecke schnell genug ist, dann ist er 
auch gut genug.

Aber es kann natürlich noch andere Gründe geben, die einen genaueren 
Takt erfordern, z.B. wenn das, was Du auf der LED-Matrix angezeigt 
werden soll, per UART ankommt.

von Myjestic E. (myjestic)


Lesenswert?

R. Max schrieb:
> Der Interne Taktgeber ist kein Quarz, sondern ein RC-Oszillator.

Huch, ja okay.
>
> Aber beim multiplexen von LEDs kommt es nicht so sehr auf die
> Genauigkeit an, sondern darauf, daß es schnell genug ist. Wenn der
> interne Oszillator also für Deine Zwecke schnell genug ist, dann ist er
> auch gut genug.

Naja bei 100Hz, sollten die internen 8 Mhz wohl ausreichen. Meine 
Bedenken waren nur die internen Counter die ich gerne in μs zählen 
lassen möchte. Also z.B. alle 100μs, damit ich nicht mir x,x ms umgehen 
muss.

>
> Aber es kann natürlich noch andere Gründe geben, die einen genaueren
> Takt erfordern, z.B. wenn das, was Du auf der LED-Matrix angezeigt
> werden soll, per UART ankommt.

Nein habe ich nicht vor, habe zwar eine Schnittstelle dran um das ganze 
via Bootloader komfortabler hochladen zu können, aber eine UART Ein- / 
Ausgabe habe ich nicht geplant. Zum Debuggen reichen auch die internen 8 
Mhz.

von R. M. (rmax)


Lesenswert?

Kai I. schrieb:

> Meine Bedenken waren nur die internen Counter die ich gerne in μs zählen
> lassen möchte. Also z.B. alle 100μs, damit ich nicht mir x,x ms umgehen
> muss.

Ich verstehe das Problem nicht, denn dein Code muß ja nicht mit diesen 
Zeiten rechnen (er sollte es zumindest nicht müssen). Die Zeiten ergeben 
sich doch einfach aus der Einstellung der Timer und der Taktfrequenz. 
Solange es insgesamt schnell genug läuft, so daß es nicht flackert, ist 
es doch völlig wurscht, ob die Zykluszeiten glatte oder krumme Werte 
ergeben, wenn man sie genau ausrechnet oder -mißt.

von Kai I. (Gast)


Lesenswert?

Okay, na dann sehe ich wieder Schwierigkeiten wo keine sind :-P. Dann 
nehme ich den internen Oszillator. Werde morgen mal erstmal die Platine 
rausschicken und die Bauteile ordern. Ich werde mal ein Feedback geben 
ob alles geklappt hat. Danke nochmal.

von Kai I. (Gast)


Lesenswert?

So, wie versprochen das Feedback. Funktioniert alles bestens. Einziger 
Wermuthstropfen war, dass ich durch hektisches Layout zusammenklickern 
den pnp-FET kopiert habe und dummerweise Drain und Source vertauscht 
habe... Naja, nach ein bisschen Leiterplattenkratzen und auf dem Rücken 
auflöten gehts :-P

Also vielen Dank nochmal!

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.