Forum: Mikrocontroller und Digitale Elektronik Ansteuerung 10x10 RGB LED-Matrix


von Highii H. (highii)


Lesenswert?

Hallo,

ich bin auf der Suche nach Möglichkeiten, eine 10x10 RGB-Matrix 
anzusteuern. Bei einfarbigen LEDs wäre es kein Problem. Hier eignet sich 
eine Matrix-Anordnung. Um LEDs in beliebigen Kombinationen gleichzeitig 
zum Leuchten zu bringen schaltet man schnell zwischen verschiedenen 
Kombinationen hin und her, sodass ein für das Auge konstantes Bild 
herauskommt.

Aber wie sieht es bei RGB-LEDs aus, bei der ich für jede 3 PMWs brauche. 
Jede LED soll in einer unterschiedlichen Farbe leuchten können. Da ist 
mir eine Matrix-Anordnung schwer vorstellbar, bzw. ich wüsste nicht wie 
man es realisieren kann.

Steuert man jede LED separat an, so benötigt man 300 PWMs. Was ist die 
beste Art 300 PWMs zu erzeugen? Mit vielen TLC5940? Was gibt es noch?

Wenn ich kein absolut kontinuierliches Farbspektrum möchte, könnte ich 
für Rot, Grün und Blau mit z.B. 10 PWM-Signalen (von dauerhaft 0 bis 
dauerhaft 1) schon 1000 unterschiedliche Farbtöne darstellen. Dann würde 
ich sozusagen 10 PWMs dauerhaft laufen lassen und über eine 
Beschaltungslogik die R,G und B der LEDs ansteuern, die gerade eins der 
10 PWMs brauchen. Wäre so eine Logik (bestehend aus Transistoren und 
weiß ich was) möglich?

Vielleicht habt ihr ja Ideen und Anregungen.
Danke und Gruß

: Bearbeitet durch User
von Marcel (Gast)


Lesenswert?

Es kommt auf deine Anforderungen an. Du machst normales Multiplexing, 
wie bei einfarbeigen LEDs, nur dass du jetzt 30 LEDs pro Zeile hast. (10 
LEDs mit je 3 Farben)
Nun kannst du eine Software-PWM implementieren. Mit welcher Bit-Tiefe 
ist natürlich von der Leistung des Controllers abhängig. Mit einer 4-Bit 
PWM, also 15 Helligkeitsstufen, und 10 Ebenen bei 50Hz Wiederholrate 
müsstest du das ganze mit mindestens 9kHz ansteuern. Bei 3-Bit PWM sind 
es nur noch 3,5kHz.

Die TLC5940 oder ähnliche PWM-Treiber kannst du natürlich auch im 
Multiplex benutzen. Du brauchst also nur 2, um eine eine Zeile 
anzusteuern, und machst den Rest per Multiplex.

von Highii H. (highii)


Lesenswert?

Marcel schrieb:
> Mit einer 4-Bit
> PWM, also 15 Helligkeitsstufen, und 10 Ebenen bei 50Hz Wiederholrate
> müsstest du das ganze mit mindestens 9kHz ansteuern. Bei 3-Bit PWM sind
> es nur noch 3,5kHz.

Wie kommst du genau auf 9kHz und 3,5kHz?

Mir ist noch nicht ganz klar wie es funktionieren soll. Angenommen, die 
erste LED (Zeile1, Spalte 1) soll mit maximaler Helligkeit rot leuchten 
und die LED in Zeile1, Spalte10 soll ebenfalls mit maximaler Helligkeit 
rot leuchten. Dann müsste ja an beiden LEDs dauerhaft eine 1 anliegen. 
Für 10x10 RGB LEDs bräuchte ich doch dann 30 Ports, oder? Oder mit nem 
Schieberegister umschalten?
Was mit (gedanklich) fehlt, ist der Zusammenhang zwischen den 
berechneten 9kHz und deren "Aufteilung" auf die 30 LEDs. Ich versuche 
mir gerade vorzustellen was konkret ich machen müsste, damit an einer 
bestimmten LED ein gewünschtes PWM-Signal ankommt.

von Highii H. (highii)


Lesenswert?

Marcel schrieb:
> Die TLC5940 oder ähnliche PWM-Treiber kannst du natürlich auch im
> Multiplex benutzen. Du brauchst also nur 2, um eine eine Zeile
> anzusteuern, und machst den Rest per Multiplex.

Nochmal angenommen, ich möchte, dass die erste LED (Zeile 1, Spalte 1) 
mit maximaler Helligkeit rot leuchtet und alle roten LEDs in den unteren 
Zeilen aus sind. Dann müsste ja an LED 1 dauerhaft eine 1 anliegen 
(Spannung an). Ich nehme mal an, ich erzeuge ein PWM-Signal an Spalte 1 
mit nem TLC5940, das konstant 1 ist für die Zeit, in der Zeile 1 aktiv 
beim Multiplexing ist. Dann wird das PWM-Signal 0 für alle Zeilen 2 bis 
10. Anschließend wieder 1 wenn Zeile 1 aktiv ist. Dann leuchtet für das 
menschliche Auge die erste LED rot und die darunterliegenden sind aus. 
Aber die 1. LED leuchtet doch dann nicht mit maximaler Rot-Intensität, 
da sie doch nur in 1/10 der Zeit aktiviert wird, oder?

Kann ich dann überhaupt mein Multiplexing alle LEDs mit maximalter roter 
Leuchtkraft leuchten lassen? Wenn ich das möchte, dann muss ich doch 
jede LED einzeln ansteuern, oder? Und das wäre bei 10x10 RGB LED 300 
Ports, oder?

: Bearbeitet durch User
von innerand i. (innerand)


Lesenswert?

Wenn die LEDs tatsächlich durchgehend leuchten sollen, dann muss auch 
jede LED einzeln angesteuert werden. Also Multiplexen ist dann nicht 
mehr.

Wenn man jetzt multiplexen will, aber trotzdem die "volle" Leuchtkraft 
haben möchte, dann kann man als Workaround den Strom durch die LED 
erhöhen.

von Sean G. (atmega318)


Lesenswert?

Hallo
Ich habe vor kurzem was ähnliches gemacht mit TLC5916 und einem AVR, 
mehr Helligkeit als das brauchst du nicht (5V 2A Netzteil geht in die 
Knie, mit Lupe vor matrix kann man an eine 3m entfernte wand ein 1.5m 
grosses Abbild projizieren...) Hier habe ich was dazu geschrieben:
Beitrag "Re: 16x10_RGB-Matrix"

von Highii H. (highii)


Lesenswert?

innerand innerand schrieb:
> Wenn man jetzt multiplexen will, aber trotzdem die "volle" Leuchtkraft
> haben möchte, dann kann man als Workaround den Strom durch die LED
> erhöhen.

Im Datenblatt einer LED finde ich für if=20mA. Bei den "Absolut Maximum 
Ratings" steht für "Peak forward Current (tau<10ms) 150mA". Ist dann die 
150mA die erhöhte Stromstärke oder gibt es noch eine Art Faustregel, 
dass man sie nochmals um (z.B.) 10% erhöhen kann?

Angenommen ich möchte die die LED mit z.B. 4Bit PWM betreiben (also 15 
Helligkeitsstufen). Dann ist beim Multiplexing eine Zeile immer 16 Takte 
aktiv und dann wird auf die nächste Zeile umgeschaltet, oder?

von Sean G. (atmega318)


Lesenswert?

Nein, über die 150mA sollte man nicht gehen, deshalb auch Absolute 
Maximum... Eher weniger. Ich habe nur ca. 60mA Pulsstrom bei Multiplex 
1:8. Und das ist alles andere als angenehm zum reinschauen (sehr, sehr 
hell und auch bei vollem Sonnenlicht noch gut sichtbar.) Ich habe 
übrigens 8 Bit bei <50% CPU Last, benutze aber BAM. Nach Korrektur 
bleiben dann 5 Bit übrig, das sind ja aber immernoch 32k Farben.

von Marcel (Gast)


Lesenswert?

highii H. schrieb:
> Wie kommst du genau auf 9kHz und 3,5kHz?

Du hast eine Bildwiederholfrequenz f (sollte 50Hz+ sein, damit es nicht 
flimmert), eine n-Bit tiefe Software PWM und x Ebenen. Damit muss dein 
Timer, welcher die einzelnen Reihen nacheinander ausgibt, mit f * (2^n - 
1) * x laufen. Sind bei 50Hz, 4-Bit PWM und 10 Ebenen 7500Hz. Du musst 
also alle 1/7500 Sekunden die Reihe wechseln und die einzelnen LEDs 
entsprechend der PWM an- bzw ausschalten. Angenommen du brauchst 500 
CPU-Zyklen für die PWM und die Ausgabe, dann gehen 3.750.000 Zyklen pro 
Sekunde dafür drauf. Wenn dein Controller mit 20MHz läuft sind das knapp 
19% Auslastung. Da hast du also noch Luft nach oben. Das ganze sollte 
aber auch im Software-PWM Artikel auf der Seite stehen.

Volle Helligkeit mit 20mA auf den LEDs finde ich persönlich 
überbewertet. Weniger tuts auch. Aber wenn du das Maximum rausholen 
willst, ohne die LEDs zu sehr zu strapazieren, würde ich das ganze in 2 
10x5 Matrizen aufteilen und jede mit 100mA Pulsstrom betreiben. Damit 
kommst du auf 100mA/5LEDs = 20mA/LED.

von Jan B. (berge)


Lesenswert?

Was den Verdrahtungsaufwand und generell Hardwareaufwand massiv 
reduzieren würde, wäre wenn du einfach WS2812 LEDs einsetzen würdest. Da 
ist der Controller direkt drauf für die PWM und du brauchst nur seriell 
die gewünschten Farbwerte reinzuschieben. Die LEDs gibts recht günstig, 
ggfs. auch in einem LED Stripe, falls das für deine Anwendung geht.

Schau einfach mal bei Ebay.

LG Jan

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.