Hallo zusammen, ich habe mir nach diversen Lauflichten, LED-Ansteuerungen und auch einer PWM nun einen kleinen 3x3x3 LED Cube gebastelt, den ich mit einem ATMega8 ansteuern möchte. Ich arbeite mit AVR Studio 5 (C/C++). Nun habe ich die einzelnen LEDs (jede nacheinander für sich) angesteuert, was auch klappt. Jetzt will ich natütlich eine Animation erstellen und dazu muß man nun multiplexen. Ich habe z.B. das Problem das wenn ich LED1 und LED11 ansteuern will leuchten LED2 und LED 10 auch mit, warum ist mir auch klar. Ich muß nun LED1 und LED 11 ganz schnell ein und aus schalten das es so aussieht als würde LED1 und LED11 permanent leuchten. Ich habe nun erstmal die Ausgänge zum schalten der LED1, LED2, .... definiert. #define l1on PORTD &= ~_BV(PD0) /*links vorne*/ ; PORTB &= ~_BV(PB1) /*1. Ebene*/ #define l1off PORTD |=_BV(PD0) /*links vorne*/ ; PORTB |=_BV(PB1) /*1. Ebene*/ ... ... Dann habe ich die Schaltfrequenz wie folgt realisiert. #define l1 l1on;_delay_ms(0.25);l1off; #define l2 l2on;_delay_ms(0.25);l2off; ... ... Jetzt kann ich mit l1 & l2 LED1 und LED11 schalten ohne das LED2 und LED10 mitangehen. Allerdings ist das bestimmt sehr aufwendig und der eine oder andere Programmierer wird die Hände über dem Kopf zusammenschlagen :-) Ich habe mir auch schon einige Dinge durchgelesen und mir ist die Matrix und das multiplexen ansich klar, nur verstehe ich die Umsetzung ins programmieren nicht so ganz. Ich versuche gerade eine dreidimensionales Array aufzubauen und ihn damit anzusprechen. Vielleicht hat der ein oder andere einen Tipp oder einen nützlichen Link auf dem ich noch nicht war. Gruß
:
Verschoben durch User
> Ich versuche gerade eine dreidimensionales Array aufzubauen und ihn damit anzusprechen. 2 Dimensionen (Zeile und Spalte) tun's da auch. Wo die LED räumlich sitzen ist dem Programm ja egal. Ich würde nacheinander Zeilen und Spalten durchgehen und dazu ein Abbild im Speicher halten in den die CPU das Bitmuster einschreibt. In deinem Fall sind es 3 x 9 LED, theoretisch ginge das in 4 Byte hinein. In einer timergesteuerten Interruptoutine jeweils die Bits abtackern und entsprechend die Ausgänge setzen. Über den Timer ergibt sich dann die Multiplexfrequenz. Ich halte das Projekt nicht für sehr aufwendig, teile es in saubere Häppchen die einzeln verdau- und testbar sind - dann geht's. Happen 1: ISR die alles mal leuchten läßt (Puffer überall 1) Happen 2: Erzeugen der Muster im Puffer.
Deine Schaltung ist grober Murks. Du hast 9 zeitlich nacheinander anzusprechende Reihen bei nur 3 gleichzeitg leuchtenden LEDs. Das macht bei 5V und 2.1V LEDs über 470 Ohm nur 5mA die 1/9 der Zeit sichtbar sid, also einen mittleren Strom von 560uA. Da sieht man fast nix. Deine LEDs werden bei 560uA Dauerstrom fast aus sein. Schmeiss die 470 Ohm Widerstände raus, ersetze sie durch 9 Wderstände a 120 Ohm in den Leitungen von den LEDs zu dem uC, und ersetze die 1k Widerstände durch 180 Ohm. Das bringt dann 25mA pro LED 1/3 der Zeit als durchschnittlich 8.3mA, damit kann man leuchten, und die Transistoren schalten 225mA bei
[falscher Knopf] bei 22mA Basisstrom, das geht. Und DANN fängst du mit Programieren an. Woher immer solche Murksschaltpläne stammen...
> ...erst mit großen wid anfangen 25mA sind nicht zu viel für normale LEDs, die "wid" Widerstände sind also schon gross.
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.