PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 20 RGB-LEDs - Do/Loop oder Timer



Monday
22.04.2009, 16:01
Hi Leute,

zur Zeit baue ich mir eine Deckenbeleuchtung mit 5 Halogenstrahlern und wahrscheinlich 20 RGB-LEDs zur indirekten Beleuchtung. Jede dieser LEDs soll einzeln ansteuerbar sein um später noch ein paar nette Effekte einbauen zu können ;-)

Ich habe schon ein Programm geschrieben, mit dem ich per Timer EINE LED super steuern kann.
Bei den 20 LEDs werden Shiftregister nacheinander die LEDs an, bzw ausschalten, sodass immer nur eine LED zur gleichen Zeit leuchtet. (Die Shiftregister werden zurzeit noch per Software simuliert)

Jetzt steht ich vor dem Problem, dass der Controller (Mega 8/16MHz) anscheinend gut ausgelastet ist und die LED flackert. Deshalb habe ich die SoftwarePWM aus dem Timer genommen und in eine Do-Loop-Schleife gesetzt.
Meine Frage ist jetzt, wie ich das am besten löse, um auch noch Signale einer Fernbedienung (Funk RFM12) auswerten zu können?

- Software-PWM in Do-Loop, Timer und Interupt für ändern der Farben und andere Funktionen
- Software-PWM in Timer, Do-Loop + Interupt für andere Farben und Funktionen
- Hardware-PWM und LEDs per Timer/Do-Loop durchschalten

Diese drei Lösungsansätze scheinen machbar zu sein, wobei der zweite Punkt wahrscheinlich in ASM programmiert werden müsste und der Timer genaustens eingestellt werden, sodass die LEDs nicht flackern.

Den ersten Punkt habe ich eben ausprobiert und schein ganz gut zu laufen: Der Controller schaltet alle LEDs durch, flackert nicht. Mit einem Timer kann ich kurze befehle ausführen ohne dass man es merkt. Bleibt nur noch auszuprobieren ob das Funkmodul schnell genug ausgelesen werden kann, ohne dass die LEDs ausfallen.

Was würdet ihr vorschlagen? Wie wird das bei den RGB-Würfeln mit noch mehr LEDs gelöst?

Schonmal vielen Dank für eure Hilfe
Monday

EDIT: Nachteil bei Hardware-PWM wäre ausßerdem, dass ich keinen Timer mehr frei hätte um Farben zu wechseln, das ginge dann nur noch per do-loop und wait

Thomas$
22.04.2009, 17:31
erstmal multiplexen und dann do-loop und wait wird das einfachste sein denk ich
kommst mit 16 pins hin
mfg thomas

Monday
23.04.2009, 11:29
Danke für die schnelle Antwort.
Meinst du mit multiplexen die Seriellen Shiftregister oder einen Latch z.B. 74HC573 (wegen den 16 Pins)?

Gruß
Monday

Thomas$
23.04.2009, 14:51
Die led an den pin ran hängen wen sie mehr power vertragen empfielt sich nen verstärker bzw transistor dazwichen

guenter1604
23.04.2009, 17:08
Hallo Monday,

damit du jede der 16 LEDs einzeln dimmen kannst, brauchst du 16 PWMs. Selbst wenn der ATMega nichts anderes zu tun hat, habe ich nicht mehr als 8 per Software-PWM hinbekommen. Letzten Endes habe ich die PWMs einen PCA9635 machen lassen.

Monday
24.04.2009, 10:19
Hi,
ich glaube wir missverstehen uns gerade ein bisschen.
Die 20 LEDs sind ja RGBs, d.h. ich brauche füe eine LED schon 3 PWMs. Um mehrere LEDs unterschiedlich leuchten zu lassen, dachte ich, dass ich per Shiftregister immer eine LED nach der anderen an 5V schalte und die Masse (die drei Farben) an die PWMs.
Das ganze muss natürlich so schnell gehen, dass dem Auge nicht auffällt, dass die LEDs hintereinender aufleuchten.
Wie gesagt, bisher habe ich zu Testzwecken nur eine LED angeschlossen. Ich hoffe, dass ich es am Wochenende schaffe ein Shiftregister und noch ein paar LEDs anzuschließen.

Zusammengefasst:
- 3 PWMs für alle Farben
- LEDs durchschalten (wie ein schnelles Lauflicht) um jede LED einzeln ansteuern zu können.

Thomas$
24.04.2009, 13:18
du brauchst kein shiftregister dazu . 10*2 ist 20 leds *3 farben 2*3 ist 6 + 10 = 16 also 16 pins

Monday
25.04.2009, 22:34
Hi Thomas,
ich habe einige Minuten gebraucht um deine Rechnung zu verstehen :-b , aber sie klingt absolut logisch.
Es werden je zwei LEDs an einen der 10 Ports angeschlossen. Dazu habe ich zwei mal 3 PWMs für die Farben. So kann ich mit 6 Software PWMs alle LEDs nach belieben ansteuern ;-)
Dankeschön, ich werde das ganze ausprobieren und berichten ob der Controller schnell genug ist. Ansonsten muss ich es mit einem probieren der 20MHz unterstützt.
MFG Monday

stefan_Z
26.04.2009, 21:43
Sonst schau dir mal die TLC59xx von TI.com an.
Die haben je 16 KSQ-Ausgänge und sind recht easy zu proggen.
Der eine hat auch I2C, das kommt ganz gut vonwegen Pins einsparen - und 12-Bit-PWM haben die fast alle...
16 Pins wären dann 3 RGB-LEDs plus 1 Pin Rest - das ganze 4-fach multiplexen und fertig ist die Laube!

Samplecode zu ein paar Typen (5943 und 59116 glaubich) findest du bei ledstyles.de