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...
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?
Ich ziehe für sowas FETs vor, sind für mich auch irgendwie einfacher zu verstehen in der digitalen Welt. Gruß Tom
Okay muss ich ohnehin machen, da die Ströme dann doch schon relativ hoch werden. Aber welche und wie verschalte ich die dann?
Kuck mal, so wie ich den Lautsprecher hier angschlossen habe. Gruß Tom
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.
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
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.
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?
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.
Alles klar, ich werde den Schaltplan mal umbauen und morgen posten, wäre schön wenn Du dann nochmal danach schauen könntest :-)
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.
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
Vielleicht sollte man das Artikelverzeichnis etwas übersichtlicher gestalten, da ist so viel gutes drin, aber oft sieht man es nicht. Gruß Tom
@ 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
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
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 :-)
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"...?
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.
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?
>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?
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.
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.
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.
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. ;)
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.
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?
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.