Hi @ all! ich habe vor einiger zeit ein praktikum an einer FachHochschule gemacht und habe mich dort mit AVR μC auseinandergesetzt. Ich habe sie in AVR assembler programiert. Jetzt setzte ich mich wieder an die sache und will nun ein kleines feld, dass aus 5x5 LEDs besteht ansteuern und kleine bilder oder ähnliches darstellen. meine frage nun: wie muss ich die matrix aufbauen und kathode, anode verbinden? sehe ich das richtig, dass einmal cathode und einmal anode an je einem port des μC hängt? wie programmiere ich dann, dass jetzt genau eine LED angeht? vielen dank im voraus! ich weiss vielleicht stehen antworten auf meine fragen auch an anderer stelle, doch ich hab jetzt seit 2 stunden gegoogelt und hab nicht viel gefunden, weil immer vorausgesetzt wird, dass man das die sache an sich schon verstanden hat, aber ich blicke noch nicht so richtig durch... :( bin froh über jeden post, der mich ein stück weiter bringt THX!! Roman
sorry: 4min google: http://www.acm.uiuc.edu/sigarch/tutorials/ledarray/ledarray.gif http://www.acm.uiuc.edu/sigarch/tutorials/ledarray/ http://www.armory.com/~spcecdt/electronics/LED_matrix/
danke für die schnelle antwort! naja mein eigentliches problem ist, dass ich fragen wollte, ob und wie ich solch eine matrix bauen und programmieren kann, ohne einen weiteren IC zu verbauen. also es soll nur der AVR microC und die LEDs sowie quartz etc. gibt es eine möglichkeit, dies zu verwirklichen?
das häng vom strom ab, den du durch die led´s ziehen willst. wenn schon kein ic, dann besser treibertransistoren verwenden. aber 5x5 heisst ja auch 5 treibertransen, besser du verwendest da nen treiberic, das ist kleiner/einfacher und spart Platz. die matrix wie gewohnt aufbauen, durch Hi und Lo schalten der entsprechenden Aus/eingänge dann die entsprechnende LED mit Strom versorgen.
also komme ich nicht drum rum mich mit den ICs oder treiberIcs zu befassen? also ich würde erstmal mit einem strom von 20-25mA auskommen wenn ich jetzt die beiden ports, an denen eine LED hängt high schalte, brennst sie oder muss einer high und der andere low sein?
der eine poin hi, der andere lo der mega32 kann zB 20mA bei 5V vcc bei Hi heraus und bei Lo herein leiten. der 2313 lediglich 20mA hereon und 3mA heraus (wieder bei 5V). siehe Vol und Voh im datasheet
Ob Du Treiber-ICs oder -Transistoren brauchst hängt davon ab, wieviel Strom Deine LEDs brauchen. Da in einer Matrix immer nur maximal 5 LEDs gleichzeitig an sein können (bzw. sollten), mußt Du halt den Strom so einstellen, daß 5 LEDs zusammen nicht mehr als 20mA brauchen. Dann kommst Du ohne weitere Treiber aus. Ein Pin auf High und die anderen auf Low ist richtig. Wenn beide gleich sind, dann gibts ja keine Spannungsdifferenz und dann fließt auch kein Strom. Markus
ahh! cool danke! ich hatte mir schon irgendwie gedacht, dass das die angaben sind im datasheet! =] ok wenn nur 3mA beim 2313 rauskommen muss ich mich dann wirklich mit den ICs befassen! :S aber gut! vielen dank für deine hilfe! ich werde die ICs zu gemüte führen und dann bau ich das mal! wenn ich dann noch fragen haben, werde ich wieder posten! viele grüße Roman
Um groessere Mengen an LEDs anzusteuern gibt es den MM5450 bzw. MM5451 Damit lassen sich bis zu 35 LEDs ansteuern und eine Helligkeitseinstellung ist auch dabei. Da das Bauteil seriell angesteuert wird braucht man nur 2 ports (clock und data) Gruss Michael
Ich habe in meinem Schachuhrprojekt, 6 7-Segmentanzeigen gemultiplext. Das entspricht einer 8 x 6 Matrix. Als Treiber habe ich 6 NPN Transistoren in Kolectorschaltung benutzt. Bei 3V Betriebsspannung geht das dann ganz ohne Vorwiderstände. www.r-tron.de - Projekte - Schachuhr
@ Michael von Gersdorff heisst das, dass ich auch nur einen AVR aus der Tiny serie benutzen kann? wenn ich nur 2 ports brauche müsste das doch gehen, oder? @Christof Rieger wenn ich diese variante nehme, brauche ich nur die NPN tranistoren? die methode mit den 3V und ohne wiederstände spricht mir sehr zu =) welche methode ist einfacher oder empfehlenswerter? mir erscheint die mit dem MM5450 einfacher. ich weiss nicht wie ich die transistoren anschließen würde.. hast du/sie vielleicht noch einen schaltplan von der schachuhr? würde mir sehr helfen.. =)
Ähm, der Schaltplan ist auf der Seite veröffentlicht. Links Download Schaltplan.
Richtig, um den MM5451 anzusteuern brauchst du nur zwei Ports (clock und data) Der gewuenschte Zustand der 35 Ausgänge wird als Folge von 0 und 1 seriell eingelesen und nach dem letztem bitt werden alle LEDs entsprechend ein bzw. ausgeschaltet. Michael
@Roman: du solltest dir klar werden was du willst bzw. wieviel der uP sonst noch tun soll und wo deine Kriterien liegen. Ich habe den Eindruck du willst "nur" die Matrix ansteuern und so wenig Bauteile wie möglich verwenden? Nimm einen Mega8 (kann +/-20mA und braucht keinen Quarz). 5 I/O Pins liefern 5V an die Reihen der Matrix. Von den Spalten gehts über Vorwiderstände zurück zu weiteren 5 I/O Pins (schalten gegen Masse). Per default sind nun alle I/O Pins hochohmig. Um eine LED anzusteuern jeweils eine Spalte und Reihe als Ausgang mit dem entsprechenden Pegel schalten, kurz warten, hochohmig und weiter zur nächsten LED. Da zu einem Zeitpunkt nur eine LED leuchten kann hat diese Variante natürlich auch Nachteile: sie kann z.B. kaum erweitert werden, bei 25 LEDs liegt der Duty Cycle aber noch in vertretbarem Rahmen. Bei Einsatz von Low-Current LEDs reichen die 20mA auch für entsprechende Helligkeit. Für "dunkle" LEDs könnte man den Zyklus auslassen und der Duty Cycle wird verbessert. grüsse leo9
hm ich bin etwas unentschlossen.. es ist natürlich schön mit einem Tiny zu arbieten, aber der fast auch weniger an daten. naja und außerdem habe ich noch nicht allzuviel erfahrung. ich denke ich werde die schaltung mit den transistoren nehmen, da ich da direkt die ports über den microC ansprechen kann, sehe ich das richtig? das würde dann erstmal reichen um sich wieder ordentlich einzuarbieten und dann später kommt die lösung mit dem mm5451. oder ist das eher der schwierigere weg mit den transistoren? weil wenn ich "nur" clock und data ausgeben muss, klingt das nicht sooo schwer mit dem mm5451! nur weiss ich dann noch nicht genau, wie ich das anschließen muss, aber das werde ich dann wohl rausfinden. werde mal ne nacht drüber schlafen und bin dann morgen wieder hier! ich sag erstmal danke für heute! =) Grüße Roman
Wo kann man den MM5451 beziehe und was soll er kosten. Ist eine zwar keine schnelle aber Nette Out-Porterweiterung für Microkontroller. Dürfte aber für dieses Projekt etwas mit Kanonen aus Spatzen geschossen sein.
@ leo9 ja ok, der eintrag kam zeitgleich.. nun ich will über die LEDs ein paar animationen ablaufen lassen und in den PC oder ähnlichem einbauen. es kommt mir nicht unbedingt auf die teile drauf an. es ist nur so, dass ich mich mit ICs nicht auskenne und deshalb versuche einen bogen um sie zu machen... =( das ganze mit dem mega8 zu machen, gefällt mir nun eigentlich am besten, weil die schaltung dazu recht einfach sein wird! =) das stimmt mich fröhlich, weil ich halt noch nicht so viel ahnung habe! naja wie gesagt, ich schlaf ne nacht drüber und werde dann sehen was ich machen werde. bisher habe ich verschiedene kleine projekte gemacht, bei denen ich den 2313 verwendet habe. das einzig neue ist ist die matrix und die ansteuerung einer LED durch die 2 ports, statt durch einen. THX Roman
@ Christof Rieger 22:47 ja denke ich auch.. =) es sollen erste gehversuche, was eine matrix angeht, werden
so ich habe mir noch viele gedanken gemacht.. also wenn ich das projekt mit einem mega8 realisiere, dann kann ich pro Reihe, bzw pro zeile nur eine LED gleichzeitig ansprechen? sprich es leuchten 5 LEDs bei 5x5 matrix maximal? für mein projekt wäre es von vorteil, wenn ich wirklich jede LED einzeln ansprechen kann, und an und aus machen kann, wann immer mir danach ist. wie gesagt, ich kenne mich nicht mit matrizen nicht so aus. kann man da auch beliebige LEDs ansteuern?
Der Trick ist hierbei, daß man die gewünschten LEDs abwechselnd darstellt. Wenn man schnell genug hin und herschaltet, dann sieht man das nicht mehr. Da die LEDs dann nur noch 1/5 der Zeit an sind, brauchst Du eben entsprechend mehr Strom. Markus
achso, gut also dann kann ich doch alle 25 "gleichzeitig" "an" machen. dann brauche ich den mega8, lowcurrent-LEDs, wiederstände brauche ich bei den strömen ja gar nicht (oder?), quarz fällt auch weg, naja und dann das übliche.. an programierei werde ich dann noch ranklotzen ^^ grüße Roman
Widerstände brauchst Du schon. Eine LED nimmt sich nicht einfach ihren Strom, sondern der Strom wird quasi durch die angelegte Spannung gesteuert. Auch die AVRs begrenzen den Strom nicht. Wenn Du den Port überlastest, dann geht er eben kaputt. Zu den Transistoren: Beim 5-fach-Multiplex sind die LEDs ja nur 1/5 der Zeit an, also auch nur 1/5 so hell wie im Dauerbetrieb. Üblicherweise nimmt man dann den 5fachen Strom (wieviel genau steht im Datenblatt, Helligkeitseindruck im Vergleich zum Strom). Die I/O-Ports für die Spalten müssen maximal 5 LEDs gleichzeitig treiben, wenn dann auch noch der 5fache Strom nötig ist, dann ergibt das den 25fachen LED-Strom, d.h. bei einer Maximalbelastung von 25mA die ein I/O-Pin verträgt darf eine LED im Mittel maximal 1mA bekommen. Das reicht durchaus aus, aber je nach Anwendungsfall (wie hell ist es dort?) kann es Dir zu wenig sein. Dann brauchst Du doch noch Transistoren. Markus
puh nur 1mA bei vollauslastung.. ich denke das wird nicht reichen! ich will und brauche dann schon fullpower.. soll ja effekt haben.. ;) also meine frage dann, welche transistoren muss ich dann wie benutzen, also das errechnet sich dann mit dem strom, den die LEDs brauchen?
Also Roman, jetzt mal Klartext. Willst du die Schaltung mit mit 3V oder 5V oder eventuell mit einer anderen Spannung betreiben ? Wenn du richtig Power brauchst kommst du um die Transistoren nicht drumrum. Dann ist sogar anzuraten sowohl in die Matrix-Spalte als auch in die Matrix-Zeile Transistoren zu setzen. Als LED bieten sich dann Ultrahelle LED's an mit >=3000 mcd. Der maximale Zeilen Strom beträgt dann 100mA und der Maximale Spaltenstrom 500mA. Diese Anzeige siehst du im dunkelen noch über mehrere 100m weit. Du brauchs vor den 10 Transistoren und den Wiederständen keine Angst zu haben, deine LED Matirix ist vom Aufbau her aufwendiger. Wenn du genau weist was du willst, kann ich dir beim Schaltplan helfen.
super vielen dank! also ich habe mich nun entschlossen! ich werde das bauen und in die front meines pc-towers einsetzen. ich werde die 5V aus dem Netzteil des PCs nehmen. alle teile werde ich bei reichelt kaufen. ich nehme folgende LEDs: http://www.reichelt.de/inhalt.html?SID=10QYHQo9S4AQoAAGP3lIcf68daab1e96dd09c316cdc0ff9642717;ACTION=3;LASTACTION=4;SORT=artikel.artnr;GRUPPE=A5331;WG=0;SUCHE=slk%205mm%20bl;CONNECT=AND;SORT_SEARCH=standard;ARTIKEL=SLK%25205MM%2520BL;START=0;END=16;STATIC=0;FC=667;PROVID=0;TITEL=0;CASE=ignore die sollen auf voller helligkeit leuchten können, egal wie viele grad an sind. mein netzteil hat genug power um die voll zu versorgen. ultrahelle LEDs müssen es nicht sein, weil ich gute erfahrungen mit den oben genannten gemacht habe und sie reichen voll aus. ich hoffe ich habe alles genau genug beschrieben, damit sie den rest berechnen können. wie berechnet man das eigentlich, welche transistoren man benutzen muss? und was macht ein transistor genau? danke für die hilfe! grüße Roman
Ein Transisror ist von Hause aus ein Stromverstärker. Kleinsignaltransistoren verstärken den Strom im Verhältnis 1:50 bis 1:300. Das heißt, wenn ein Transistor eine Stromverstärkung ß=100 hat und es fließt ein Strom von 1mA von der Basis aus durch den Transistor zum Emitter dann KANN vom Collector zum Emmitter ein Strom von 100mA fliesen. Bei den üblichen bipolaren Silizium Transistoren (z.B. BC547) hat man in diesem Zustand eine Spannungsdifferenz zw. Basis und Emitter von ca. 0,7V. Das Geniale ist, dass du mit den vorgeschlagenen LED's und einer Versorgungsspannung von 5V meinen Schachuhraufbau exakt kopieren kannst und weder für die LED's noch für die Transistoren Vorwiederstände brauchst. Der Transistor: / Emitter (der mit dem Pfeil) |7 Basis ---| Transistor NPN-Typ (Schaltet durch wenn die Spannung |\ an der Basis um 0,7V größer ist \ Collektor als die am Spannung am Emitter.) Warum braucht man keine Wiederstände. Aufbau einer Spalte: Collector mit +5V verbinden 5 LED's mit der Anode zusammen schalten und mit dem Emitter verbinden. Die 5 Kathoden der LED's auf 5 Ports des µControllers verteilen. Die Basis des Transistors direkt mit einem weiteren Port verbinden. Für den kompletten Aufbau werden 5 Spalten aufgebaut. Wobei nicht jede LED Kathode ihren eigenen Port erhällt sondern sich den Port mit den anderen 4 LED's teilt die dann in der gleichen Zeile liegen. nu zeichne das erst einmal auf und stell die Zeichnung ins Forum ein, dann gehts weiter.
Super vielen Dank! endlich habe ich auch vor den transistoren keine "angst" mehr! =D gut ich werde bald einen schaltplan machen! ich werde mich mich damit wahrscheinlich am wochenende beschäftigen. Das war jetzt ein großer schritt näher an mein projekt! wunderbar, dass ich die selbe schaltung nehmen kann. ich werde dann eine liste mit teilen machen, sowie den schaltplan! =) THX! Roman
So nun habe ich den Schaltplan mal gemacht und hoffe, dass soweit alles ok ist... - Die NPN-transistoren nehme ich von reichelt. bestellnummer: BC 547B den rest habe ich eigentlich zu hause. so der hardware komme ich ja immer näher freu
kann mir denn keiner sagen, ob der schaltplan richtig ist? ich wollte nämlich ne sammelbestellung machen und die anderen leute warten.. =) grüße Roman
> Warum braucht man keine Wiederstände.
Ja, warum denn?
ich weis es auch nicht warum man die widerstände weglassen kann, aber im schaltplan habe ich sie jetzt einfach nicht eingeplant! ne erklärung fände ich auch ganz gut, obwohl ich mir vorher auch keine gedanken darüber gemacht hab warum ich keine benötige! =) war froh, dass ich sie einfach nicht brauche?! gruß Roman
mann braucht keine widerstände, weil die led's (geschweige denn atmels usw..) heutzutage ganz billig sind, darum! :-)))
@roman: natürlich braucht man widerstände, das ohm-gesetz ist doch unumgänglich! @christof: also ich würde da vorsichtiger sowas von keinen widerständen verbreiten; nimm' einen guten niederohmigen netzteil, einen guten schaltransistor und eine led und takte das ganze mit einer beliebigen frequenz und ohne vorwiderstand; wie lange, glaubst du, wird die led überleben?
Das Datenblatt eines AVRs sagt's : jeder Ein-/Ausgang kann 20mA direkt treiben ! Demzufolge sind dort Widerstände eingebaut. Allerdingens gilt es die Gesamtverlustleistung des Käfers im Auge zu behalten.
Hi richtig. Er kann 20mA treiben. Er treibt bei einem Kurzschluß aber deutlich mehr. Matthias
So, nu ma ende mit dem spaß-talk am ende! ;] ich muss jetzt echt bald die teile bestellen und wollte nun mal fragen, ob es irgendetwas an meinem schaltplan auszusetzen gibt!? also es haben bis jetzt schon 31 leute einen blick drauf geworfen und niemand hat etwas bemängelt. kann ich nun davon ausgehen, dass alles richtig ist? hab ich die transistoren richtig angeschlossen? ich mache nun heute die bestellung fertig! ich würde mich freuen wenn ich jetzt noch in der endphase auf eure unterstützung hoffen kann! ich bin halt newbie, aber das soll sich ja ändern, deshlab gibt es doch foren um sich auszutauschen und zu lernen, oder?! wie gesagt, ich würde mich tierisch freuen wenn ich heute ein richtiges statement zu meiner schaltung bekommen würde.. am besten von Christof Rieger, weil er mir ja sagte, dass ich keine widerstände brauche! also zu hause hab ich noch genug 270ohm und 100ohm, geht es auch mit denen? also ich bedanke ich im voraus! gruß Roman
...Zitat: "wie gesagt, ich würde mich tierisch freuen wenn ich heute ein richtiges statement zu meiner schaltung bekommen würde.. am besten von Christof Rieger, weil er mir ja sagte, dass ich keine widerstände brauche!"/Zitat Ende! was für absurde logik! mir wäre auch am liebsten ein "richtiges statement" von meiner frau, dass ich eh keine brille brauche, obwohl ich eine seit 20 jahren trage...was weiss denn der inkompetente augenartzt, der alte schmarotzer...:)))
nee! so meinte ich das ja nich! es ging mir darum, dass Christof ja sagte ich bräuchte keine widerstände! ^^ tja und alle anderen sind so zeimlich anderer meinung! und wenn ihr du sagst, dass ich welche brauche, würde ich mich freuen wenn du mir dann auch die entsprechenden empfehlen könntest. =D das meinte ich mit "richtiges statement"...=) ich muss nun ja fertig werden und naja, dazu brauche ich die werte.. also mit dem beispiel deiner frau: willst du damit sagen, dass du eine brille auf jeden fall brauchst aber naja ein statement deiner frau haben willst, die dir sagt, "du brauchst keine"? heisst das dann übertragen, dass ich auch auf jeden fall widerstände einplanen muss?? ihr seid alle zeimliche PROs, aber ich bin noch klein und muss alles lernen... ich weis halt nicht ob ich widerstände brauche oder nicht! manche sagen ja und manche nein.. =( deshalb bin ich ein bissl verwirrt und würde mich deshalb freuen wenn Christof sich nochmal melden könnte und allen seine Theorie von den widerständen erklären könnte, weil es doch viele unstimmigkeiten gibt.. =( ich bin nun erstmal etwas verwirrt und zöger die bestellung noch raus! also ich formuliere nochmal ;) : ich bin froh über jedes statemant zu meinem schaltplan, weil ich jede hilfe brauche! wenn ich widerstände brauche, welche sollte ich nehmen? sorry wenn mein "richtiges statement" falsch angekommen war ;D gruß Roman
ok, ok, nehm' meine worte zurück; zu deinem schaltplan_5x5.jpg: 1. 2x kondensator ca. 22pF von XTAL0 und XTAL1 zu masse schalten; ohne sie funktioniert der interne quarzoszi unzuverlässig; 2. widerstand ca. 10k von RESET zu VCC schalten; 3. beide widerstände bei SCK und MOSI sind eigentlich überflüssig; wenn du sie trotzdem haben willst- dann 200 bis 470 ohm, 1k ist zu viel (probleme beim programmieren mit schnellem pc) 4. und jetzt zum besten part: led matrix; und ja, strombegrenzende widerstände braucht man leider auf jeden fall; die gute nachricht-sie sind nicht so viel; so, wie du die matrix gezeichnet hast, würde ich sie nicht machen, aber dennoch: zuerst einmal 5x widerstände zwischen jeder basis und µc-pin, würde so ca. 4-7k nehmen, sie müssen den basisstrom begrenzen, aber gleichzeitig eine vollsättigung erlauben die leds: sie brauchen auch strombegrenzung; du betreibst sie wohl im zeit multiplex, hetzutage sind die leds mit gutem wirkungsgrad, ich würde dich nicht mit theorie quellen: nehmen wir an, du multiplexierst zeilenweise, also zuerst wird PD6 low, dann PD5, dann PD4 usw. R=U/I; in deinem fall ist U=5-0.7-2=2.3V; das ist der spannungsabfall über eine led, z.b. LED1; für I gilt folgendes: für eine led sind z.b 10mA ganz gut; wir haben aber im schlimmsten fall 5 eingeschaltete leds und die µc-pins können maximal 20ma sinken, oder max. 4ma pro led; das bedeutet I=4mA, daraus ergibt sich: R = 2.3V / 0.004 mA = 575 Ohm; wenn du ein auge zumachst und mir versprichst, die schaltung nur bei dir zu hause zu betreiben, kannst du die µc-spezifikationen ein wenig überschreiten und z.b. 470 ohm nehmen... besser ist jedoch, low current leds zu kaufen, die benötigen ca. 2mA, somit bist du mit 4 mA pro led bei 570-580 Ohm bestens bedient. die so mühsam errechneten 5 widerstände musst du zwischen jedem emitter und led-spalte (gem. anode) schalten. voraussetzung dafür ist, wie gesagt, dass du die matrix ZEILENWEISE multiplexierst... sooo und nun frohes basteln :) übrigens, ich helfe dir, weil ich gerade eine 3x5 led matrix auf ungefähr deiner weise gemacht habe. sie zeigt verschiedene scrollende texte, uhrzeit und temperatur, ist also machbar, was du vorhast, nur muttig weiter!
>> voraussetzung dafür ist, wie gesagt, dass du die matrix ZEILENWEISE >> multiplexierst... Ja, aber warum sollte er das tuen wollen ? So wie ich die Beschaltung sehe macht die doch nur mit einem Spaltenweisem Multiplexing auch Sinn ? In dem Momement kann er pro Pin 20mA ziehen. Da aber übr alle Pins zur gleichen Zeit nur ca 100mA erlaubt sind reduziert sich dies auf 100/5 = 20 mA. Ich meine also statt Zeilenweise und < 4mA pro LED, steuert er Spaltenweise mit 20 mA pro LED. Am Dutycycle der LEDs ändert sich bei eine 5x5 Matrix ja nichts, egal ob Spalten- oder Zeileweise gemultiplext wird. Gruß Hagen
achso, ja, natürlich hat hagen recht und es ist sogar besser, spaltenweise zu steuern, denn da könnte mann bis zu 20ma durch die leds jagen; dann werden natürlich die widerstände zwischen gem. kathode jeder led-spalte und pd6, pd5, pd4 usw. eingeschaltet und deren wert wäre (5-2-.7)/.002; es war spät in der nacht und ich wollte dem junden einfach eine lösung geben, mene bezog sich auf widerstand zw. emitter und gem. anode, daher die zeilenweise-ansteuerung; doch in dem fall ist hagen eindeutig voraus mit dem strom :)))
Du brauchst 5 Widerstände von PORTD zu den LEDs, Pi * Daumen = 120 Ohm. Gemultiplext wird Spaltenweise, d.h. immer nur ein Transistor ein. PORTD treibt die LEDS etwa 20mA je Pin und die Transistoren müssen die Summe treiben, 5 * 20mA = 100mA, deshalb ja die Transistoren. Zu den Transistoren keine Widerstände, da die ja in Kollektorschaltung arbeiten. Am Quarz noch 2* 15 ... 33pF, dann sollte es klappen. Peter
Quarz 10000Hz wirst Du schwer kriegen, nimm lieber 7,3728MHz. Peter
Sorry Roman, das ich dich solange habe warten lassen, war zimlich im Stress. Was die Randbeschaltung des Controllers angeht hast du besimmt nützliche Tips von den Kollegen bekommen. Nun zu der Auflösung warum du in der Matrix und vor den Transistoren keine Wiederstände brauchst. Deine Versorgungspannung beträgt 5V. Da ein Transistor nur dann öffnet, wenn zwischen der Basis und dem Emitter eine Spannung von 0,7 V abfällt hast du am Emitter gegen Masse gemessen nur noch 4,3 Volt. Wollte nun der Strom der in die Basis herreinfließt weiter ansteigen so wüder sich die Spannung zwischen Collector und Emitter veringen und damit auch die Spannung zwischen Basis und Emitter was wiederum zur Follge hätte, das der Strom in die Basis wieder sinken würde, Du siehst also, das der Strom der in die Basis fließt sich in dieser Schaltungsvariante komplett selbst regelt und somit ist kein Basisvorwiederstand nötig. In Fachkreisen nennt man das eine 100% Rückkopplung. 4 Volt benötigt die von dir gewählte LED, verbleiben am Controllerport noch 0,3 V. Und Bingo bei einer Erzwungenen Portspannung von 0,3V Stellt sich Lt. Datenblatt Seite 79 Figure 70 bei 25 Grad ein Strom von 20mA ein. Damit sind keine Vorwiederstände nötig. In der Realität wird der Strom sogar noch etwas niedriger sein, da die Belasttung der Ports die die Basen der Transistoren treiben dort auch die Spannung leicht absinken läßt. Noch ein Tip, die Hauptbelastung tragen die Ports, die mit den Kathoden der LED's verbunden sind. Desshalb würde ich sie auf zwei Ports verteilen. Macht zwar Programmtechnisch mehr arbeit dürfte aber auch ein hauch mehr Power auf die Dioden bringen und den Genzlastbetrib des controllers vermeiden.
@emil Du bist an der Sache dicht dran aber Roman will Blaue LED's mit 4 Volt Durchlassspannung verwenden. Der braucht keine Wiederstände und der Trick mit der Kollektorschaltung wurde extra gewählt um einmal einen Spannungsabfall von 0,7V zu erwingen und zum anderen auf die Basisvorwiederstände verzichten zu können. Selbst, wenn die LED's nur eine Betribsspannung von 3,5V hätten würde der Basisstrom auf Maximal 4 mA ansteigen, da dann die Portspannung vom Basistreiberport bei dieser Belastung bereits um 0,5V einbricht. Selbst bei der Verwendung von 2V LED's würde der Basisstrom nicht über 13mA ansteigen und selbst das dürfte sowohl der Controller als auch die Transistoren noch ab können. Wobei ich bei 2V LED's Vorwiederstände doch dem Vorzug geben würde.
@Christof, "...aber Roman will Blaue LED's mit 4 Volt..." Bist Du Hellseher ? Du bist der erste, der in diesem Posting von blauen LEDs spricht. Aber auch blaue LEDs haben eine Z-Dioden Kennlinie, d.h. benötigen unbedingt einen Widerstand zur Stromeinstellung. Allerdings wird dann der Spannungsabfall zu gering für eine Stabilisierungswirkung, d.h. die Kollektorschaltung sollte dann nicht mehr verwendet werden. Und mit einem Basisstrom von 4mA komme ich bei typischen Beta = 300 auf 1,2A, da bricht also definitv nicht der Port zusammen. Es ist generell davon abzuraten, Ports so zu betreiben, das sie zusammenbrechen, wenn der Hersteller diese Betriebsart nicht explizit vorgesehen hat. Ganz abgesehen davon, daß ein Zusammenbrechen lastabhängig ist, d.h. je nach Anzahl der leuchtenden LEDs sind sie unterschiedlich hell. Peter
@ peter dannegger ziemlich weit oben habe ich ein link angegeben: "ich nehme folgende LEDs: http://www.reichelt.de/index.html?SID=10QYHQo9S4AQoAAGP3lIcf68daab1e96dd09c316cdc0ff9642717;ACTION=3;LASTACTION=3;SORT=artikel.artnr;GRUPPE=A5331;WG=0;SUCHE=slk%205mm%20bl;CONNECT=AND;SORT_SEARCH=standard;ARTIKEL=SLK%205MM%20BL;START=0;END=16;FAQSEARCH=LED%20KLAR%20%2080%20MCD;FAQTHEME=-1;FAQSEARCHTYPE=0;FAQAUTO=1;STATIC=0;FC=668;PROVID=0;TITEL=0;ARTIKELID=31603 " daher hatte christof die hellseherischen fähigkeiten ;) hier kannst du nun die kompletten daten der LEDs einsehen. ich hoffe das hilft dir weiter. ok, dann diskutiert mal noch weiter über die widerstände, weil ich da wenig zu sagen kann... aber ich habe nun den schaltplan geändert. ich denke ich habe alle tipss eingebaut, aber die widerstände noch nicht eingezeichnet. da müssen die profis noch auskunft geben ;) Danke und grüße Roman
Hi Leute, ihr macht mich ständig konfus. Die einen sagen das man ohne Vorwiderstände arbeiten kann (unter bestimmten Bedingungen) die anderen wiederum meinen man muß immer Vorwiderstände nehmen. Desweitern: die einen behaupten das bei gemultiplexter Anzeige, zB. 20% Dutycylce == 1/5, die Helligkeit sinkt und deshalb der Strom erhöht werden sollte. Wiederum lese ich aber in Datenblättern von Osram und Agilent das die eben auf LEDs bezogen nicht ganz richtig ist. PHysikalisch kann man also durch einen Dutycycle Strom sparen da das menschliche Auge eben psychologisch eine LED in gewissen Bereichen viel heller wahrnimmt als die ein Lux-Meter tut. D.h. unterschreitet man bei einer LED eine gewissen Dutycycle NICHT, so ist es auch NICHT nötig den Stom zu erhöhe um den Helligkeitsverlustzu kompensieren. Denn unser Auge arbeitet nicht als kontinuierler Lichmesser. So jedenfalls sind die Aussagen bei Agilent und Osram. Diese Aussage würde für mich persönlich auch erklären warum mit einer gepulsten LED tatsächlich Strom gespart werden kann. Für das Auge leuchtet sie nämlich noch genauso hell. Was ist nun richtig ? Gruß Hagen
ich denke, das kann jeder für sich ersichtlich machen, indem man einfach paar leds nimmt (mit vorwiderständen, versteht sich :)) und sie dann mit gleich- und danach mit wechselspannung versorgt...bei meiner 3x5 matrix sind die leds im statischen betrieb mit 2.7v betriebspannung ungefähr so hell, wie bei 5.5v betriebsspannung, 1/3 duty cycle multiplex'd, brauchen also ungefähr den doppelten strom, um gleichermassen hell zu leuchten, wie im statischen betrieb... traurig, aber wahr :)))
Ok, inetwa also 1/3 Duty * 2 facher Strom == 1/1 Duty * 1 facher Strom. Angenommen die LED zieht bei 1/1 Duty 20mA/t, dann zieht sie 1/3 2 20 mA == 13mA/t im Pulsbetrieb ohne Helligkeitsverlust. Das ist doch schon eine Ersparnis ? Gruß Hagen
@peter dannegger Peter, wie sollen den bitteschön 1,5A fliesen, du hast nominal 4V Spannungsabfall an der Diode und 0,7 V über der Collektor Emitterstrecke, damit bleiben 0,3V die am Controller abfallen müssen. Nach Kennlinie Seite 79 Figure 70 bei 25 Grad stellt sich dann ein Strom von 20mA ein. Wenn 4mA in die Basis eines Transistors mit einem Beta von 300 reinfliest, dann lässte er über der C-E-Strecke einen Stromfluss von 1,2A zu aber nur dann, wenn der Rest der Schaltung diesen Strom überhaupt fließen lassen kann. Die restlichen komponeten Begrenzen aber den Stromfluss. Glaubt es mir, es funktioniert tadel los. Die Verlusstleistung an den Transistoren beträgt je ca.70mW und am Controller 30mW, wenn alle LED's an sind. Da wird nicht warm.
@hagen: ahaaa, so meinst du das; ist natürlich richtig, ja, man spart tatsächlich durch multiplexen; habe vor langer zeit einen spektrum-analyzer mit 16x16 led matrix gebaut, der hat im statischen betrieb und vollaussteuerung so an die 2.7A gezogen, im multiplexen nur ca. 0.5A (mittelwerte, versteht sich).
wunderbar! ich schenke Christof nun mein glauben! also seine lösung klingt sehr schlüssig und einwandfrei, soweit ich das beurteilen kann. ich werde nun die bestellung fertig machen. ich denke die hardware ist dann bald fertig und die ersten tests können gemacht werden :))) ich möchte mich an dieser stelle erstmal bei allen leuten bedanken! naja erstmal gucken ob das alles läuft ;) wenn weitere probleme auftauchen werde ich mich wieder melden. grüße Roman ps: werde natürlich schrieben, wenn ich fertig bin =D
@Christof, "...würde der Basisstrom auf Maximal 4mA ansteigen..." Ich hatte aufzeigen wollen, daß das ja erst bei etwa 1,2A der Fall wäre, die fließen hier aber lange nicht. Das die 4mA irgendwas begrenzen ist also falsch. Ein Bastler darf natürlich Schaltungen aufbauen, wo die Stromeinstellung durch die zufälligen Streuungen aller Bauteile erfolgt. Z.B. kann ein 7805 ja schon von 4,9...5,1V differieren. Ich entwickele aber Profischaltungen, wo ich durch gezielte Dimensionierung den Arbeitspunkt einstellen kann und er auch relativ unabhängig von Bauteilestreuungen ist. Wenn ich eine Schaltung abliefern würde, wo bei Änderung nicht garantierter Bauteileparameter Bauteile kürzer leben oder große Unterschiede in der Helligkeit auftreten, würde mich mein Chef zu Recht feuern. Wenn z.B. im nächsten Stepping die AVRs eine andere Ausgangscharakteristik haben, darf es nicht passieren, daß man eine komplette Fertigungsserie in die Tonne kloppt und nochmal ne Platine entwickeln muß. Einmal entwickelt muß ein Produkt laufen !!! Und die 2 Cent für nen Widerstand sind dafür kein Kostenfaktor. Die Widerstände hätten auch den Vorteil, wenn sich die Modefarbe (blau) ändert, andere LEDs einsetzen zu können. Um nun aber genügend Spannungsabfall für die Widerstände übrig zu haben, muß man bei blauen LEDs pnp-Transistoren mit Basiswiderstand oder P-MOSFETs verwenden. Nimms mir also bitte nicht übel, wenn ich an Schaltungen den Maßstab anlege, daß sie 100% nachbausicher, d.h. auch für die Massenfertigung geeignet sind. Peter
@peter dannegger Klar, in der Beziehung hast du natürlich Recht. Die Produkte die du Entwikelst kosten mit Sicherheit auch mehr als 3,50 Euro. Damit sollte man sich natürlich auf solche Nebenefekte nicht verlassen.
Noch ein Nachtrag: Bei 3,5 Volt LED erreicht man bei 5V Versorgungsspannung schon die Schmerzgrenze des Controlers hier würden dann nähmlich ca. 40mA in den Port abfliesen. Allerdings würde die LED mit mehr als 20mA durchflossen werden, was die Spannung über der LED auch leicht ansteigen ließe und damit würde sich wieder ein niedrigerer Strom einstellen. Auf jeden Fall sollte man die Ports die die Kathoden der LED's versorgt auf zwei Portgruppen aufteilen. Die Betriebsmöglichkeit mit 2,0 Volt LED ohne Vorwiederstäde ist natürlich nonsens, da dürfte man nicht lange Freude an der Schaltung haben ;-) Strom >60mA. @peter dannegger Zugegeben Peter in manchen Dingen bin ich ein kleiner Kanikazie, was lt. Datenblatt geht wird gemach. Ich verbinde auch gnadenlos eine Controllerport über einen 150 Ohm Wiederstand mit der Gate eins Triacs (funktioniert gut ;-).
wenn ich nun aber ungerne die ports die zur kathode der LED führen aufteilen will, kann man dann nicht doch eben kleine widerstände einbauen und dann geht das auch alles auf einem port? also schöner wäre das auf jeden fall, wenn es um das programmieren geht... gruß Roman
In deinem Fall ist die LED mit Typisch 4,0V und Max 4,5V bei 20mA angegeben. Die Grenzbelasung des Controllerports wird nur erreicht, wenn alle LED's gleichzeitig an sind. Ich denke das kannst du riskieren. Es geht ja auch nur um einen Moddingefekt und nicht um eine sicherheitsrelevante Anwendung.
ganz genau! also das riskier ich ruhig. ich habe noch mehrere 2313 zu hause und wenn doch mal einer dabei drauf geht nehm ich ein neuen... und ich werde auch höchstselten alle 25 LEDs zum lechten lassen! außerdem sind es ja nur bruchteile von sekunden, die ich die LEDs an lasse. gut ich werde montag die teile bekommen und dann wird erstmal ordentlich gebastelt! freu =D
so es ist vollbracht! ich kann jede LED ansprechen und alles funktioniert herrlich! die LEDs sind ziemlch hell und ich bin voll zufrieden! aus technischen gründen habe ich die matrix ein bisschen gedreht. ich werde gleich noch ein post hinterherschicken, in dessen anhang sich dann eine zeichnug der gedrehten matrix befindet. ich habe aber trotzdem noch ein paar fragen: ich habe im anhang mal eine programm reingepackt, dass auf dem LED-feld ein großes X anzeigt, dann kurz wartet und dann ein großes + anzeigt. ich weiss nicht, aber mir erscheint die methode, die ich gewählt habe als sehr umständlich... es funktioniert, aber naja es ist viel schreibarbeit... ich habe nun noch kein timer eingebaut. es funktioniert komplett mit schleifen. also ich wäre froh, wenn ihr ein bisschen konstruktive kritik an meinem programm üben könntet :) gruß Roman
hier ist das bild von der gedrehten matrix, damit es klar wird, wenn ich im programm schrieb, dass ich eine zeile lade
so und damit ihr auch mal seht, was das programm leistet, habe ich ein gif gemacht, dass zeigt wie das ganze dann aussieht =D
Und Roman klappt doch. Wenig Aufwand große Wirkung. Bleiben alle Bauteile wie versprochen Cool ? Ich habe mir dein Programm noch nicht angesehen, aber am besten gehst du so vor. Eine Routine schreiben die in züklischen Abständen 5 festgelegte Bytes aus dem RAM-Speicher liest und diese auf die LEDs aus gibt. Den Aufruf der Routine kannst du entweder über TimerInterupts oder über TimerPolling machen. Der Vorteil, für den Wechsel der Zeichenausgabe musst du nur noch die fünf Bytes im RAM-Speicher ändern.
kein bauteil erwärmt sich und alles läuft wie gesagt reibungslos. ok, wenn du dir das programm angeschaut hast, kannst du mir ja vielleicht anhand dessen mir verbesserungsvorschläge geben. :) oder du schreibst ein kurzes programm, die deine methode erläutert, weil ich mich mit den timerinterupts noch nicht so gut auskenne... danke im voraus gruß Roman
Hey, Kollegen Von euch hat jemand betimmt einen ähnlichen Quelltext Auszug parrat, ich habe so etwas ähnliches zwar auch bei meiner Schuhr programmiert, aber das dürfte für einen Anfänger undurchschaubar sein. Bin selbst momentan etwas knapp an Zeit.
wie ich sehe finden die bilder mehr interesse als mein code... naja aber trotzdem haben leute ihn sich doch angeguckt! warum ist mein thread so eingeschlafen? :( bitte schreibt doch kurz ein kommentar zu meinem code... sagt mir verbesserungsvorschläge oder so?! gruß Roman
Ok, mit fallen mehere Dinge auf: 1.) Du "löschst" die Zeile und Spalte und gleich danach setzt du sie mit den neuen Werten. Ich meine das "Löschen" ist überflüssig. 2.) Der Code könnte übersichtlicher sein. Dazu wird das Display in einer Schleife Spalte für Spalte angesteuert, und die Pixel-Daten werden als Tabelle im FLASH gespeichert. Das macht vieles übersichtlicher und kostet weniger Resourcen. 3.) Du benutzt keine eigene Namen für die Register als Substitution. Man benennt meistens über eigene Namen per Defines die Register um den Code lesbarer zu gestalten. 4.) Die Wait-Schleifen sind meiner Meinung nach viel zu umständlich, das läst sich einfacher realisieren. 5.) An PORTD gibts du zB. 0b00110010 aus. Bei einer 5x5 Matrix, wobei du an PORTB 5 Spalten angeschlossen hast, verstehe ich aber nicht warum du an PORTD mit 0b00110010 mehr als 5 Zeilen ansteuerst. Dein Code könnte vereinfacht so aussehen: .equ LED_ROW = PORTB .equ LED_COL = PORTD .def Temp = r16 .def Spalte = r17 // in Register ZH:ZL Zeiger auf Flash Daten mit 5 Bytes Print: ldi Spalte, 0b00010000 Print0: lpm Temp, Z+ out LED_ROW, Spalte out LED_COL, Temp rcall Wait1ms lsr Spalte brne Print0 ret Ausgabe eines Kreuzes dann so: ldi ZL, low(Kreuz) *2 ldi ZH, high(Kreuz) *2 rcall Print Kreuz: .db 0b00110010, 0b01010001, 0b01100011, 0b01010001, 0b00110010 Gruß Hagen
Ach ja du multiplext ja mehrmals, dann könnte Print auch so aussehen: // in Register XH:XL Zeiger auf Flash Daten mit 5 Bytes Print: clr Count Print0: ldi Spalte, 0b00010000 movw Z, X Print1: lpm Temp, Z+ out LED_ROW, Spalte out LED_COL, Temp rcall Wait1ms lsr Spalte brne Print1 dec Count brne Print0 ret Nun wird in XH:XL der Zeiger auf die Daten an Print übergeben. Print wiederholt nun die Ausgabe 256 mal mit Hilfe des Zählers Count. Gruß Hagen
wow, vielen dank! du hast mich sehr viel weiter gebracht! wie kompliziert mein code doch war... mein befehlssatz den ich kannte war sehr klein ^-^ aber jetzt verstehe ich die art des matrizenansteuers und multiplexieren viel besser!! danke mal sehen wie ich das nun weiter benutzen und was sich jetzt noch für möglichkeiten ergeben!!! mir schien das alles bei mir schon sehr umständlich und vor allem unübersichtlich!! -_- aber nu wird das um einiges einfacher! freu gruß Roman
Gut, wenn du fertig bist lass uns deinen Source sehen, damit alle was davon haben ;) Fragen nach solchen Codeschnipseln tauchen immer wieder auf. Übrigens in der Codesammlung findest du einen Source von mir der erklärt wie man zb. mit 5 Pins eines ATTiny15L insgesamt 20 LEDs ohne Treiber ansteuern kann. Mit Hilfe des gewählten Muliplexings kann zusätzlich noch jede LED in 16 Stufen individuell in der Helligkeit eingestellt werden. Mit 6 Pins wären 30 LEDs machbar. Gruß Hagen
Hi, ich habe vor kurzem angefangen mich mit der µC (ATmega8) programmierung zu befassen. Ich habe ähnliches vor wie Roman. Allerdings kam ich ein wenig ins stutzen als ich mir sein Schaltplan angeschaut habe. Er setzt Transistoren ein, damit die Ausgangsports nicht zu stark belastet werden. Ist ja alles schön und gut. Aber ist es nicht richtig, dass die i/o Ports ebensoviel Strom aufnehmen dürfen, wie sie abgeben können? Sprich, in seiner Schaltung kann sich maximal der Strom von 5 LEDs addieren, welcher komplett in einen Port des µCs fließt. Ist der Port dann nicht überlastet? Oder habe ich jetzt was verwechselt? Gruß Daniel
Richtig, zumindestens bei den neueren AVR's. Allerdings hat er ja die Rows an einem Port und die Cols an einem anderen Port. Bei 20mA pro LED * 5 = 100mA pro Port. Das dürfte gerade so noch ohne Treiber gehen. Oder man nimmt Lowcurrent LEDs mit 5mA. Gruß Hagen
100mA pro Port ist als dauerlast OK. Dürfte bei einer Matrix eh kein Problem sei, wann sind schon mal alle LED's gleichzeitig an.
Hallo, es tut mir leid, das ich diesen alten Thread hier nochmal ausgrabe: Hier in diesem Thread steht am anfang dieser link : http://www.armory.com/~spcecdt/electronics/LED_matrix/LED_matrix_schem.gif Nun meine Frage zu diesem Schaltbild: Wieso wurden hier immer 2 Transistoren verwendet? kann ich das nicht auch jeweils mit einem machen? Wieso muss ich erst mit einem Trans. den anderen Schalten, der dann erst meine Vcc bzw. gnd schaltet? Außerdem: Angenommen ich schalte diese Transistoren mit einem µC, also 5V. Ich möchte die ganze Sache aber an einem 12V Netz betreiben, muss ich dann noch etwas beachten, oder kann ich einfach mit +5V den Transistor schalten und der Transistor hängt dann eben mit dem Collektor an +12V und schaltet mir diese zu den LED´s? Die Versorgnung des µC geht über einen 7805. Vcc für die LEDs ist dann direkt die +12V. Vielen vielen Dank im Vorraus, Gruß, Hans M.
guck mal nach Darlington...Es geht um die Verstärkung des Schaltstroms. Mit NPN-Transistoren kann man problemlos höhere Spannungen schalten (Open-Collector). Bei PNPs ist das etwas schwieriger wegden des Bezugspotenteials.
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.