Forum: Mikrocontroller und Digitale Elektronik LED Matrix programmieren


von kewiee (Gast)


Angehängte Dateien:

Lesenswert?

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
von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

> 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.

von MaWin (Gast)


Lesenswert?

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

von MaWin (Gast)


Lesenswert?

[falscher Knopf]

bei 22mA Basisstrom, das geht.

Und DANN fängst du mit Programieren an.

Woher immer solche Murksschaltpläne stammen...

von Maddin (Gast)


Lesenswert?

...erst mit großen wid anfangen, umändern wenn muxing läuft!

M.

von MaWin (Gast)


Lesenswert?

> ...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
Noch kein Account? Hier anmelden.