LED Matrix - mehrere LEDs parallel

OP #1488152
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...
OP #1488234
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?
#1488366
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.
#1488709
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.
#1488992
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.
#1489096
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
OP #1489728
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 :-)
OP #1489806
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?
OP #1489809
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?
#1489812
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.
#1489818
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.
#1489824
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. ;)
OP #1489940
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.
#1494706
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.
OP #1494725
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.
#1494745
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.
Gast #1494984
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.
Gast #1519762
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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren