LED Matrix mit Graustufen, wie?

Gast #718950
Lesenswert?

Hallo,

ich wollte eine 8x6(x3) LED-Matrix  mit sagen wir 16 Graustufen (8 
würden eventuell reichen) bei etwa 30 fps ansteuern. LED-Matrix und PWM 
sind mir klar, aber das Problem ist, ich weiß nicht recht wie ich beide 
kombiniere, vor allem so, dass es schnell wird. Sollte ich die einzelnen 
Bytes an den Port schieben und jedes jeweils so lange an lassen bis die 
Helligkeit erreicht ist und dann zur nächsten Zeile springen? Flimmert 
das dann nicht zu stark? Geht das schnell genug für 50-150 LEDs?
Danke für eure Hilfe!
#718967
Lesenswert?

Ich erhöhe normaler Weise die Multiplexing-Frequenz um Faktor n, erhöhe 
die Zeile aber nur alle n Zähler. Auf diese Weise kann ich jedem Pixel n 
mal einen neuen Wert zuweisen. Je mehr von diesen n Stufen an sind, 
desto heller der Pixel.

Ist Geschmackssache. Beide Varianten flimmern auf unterschiedliche Art. 
Auch eine Kombination ist denkbar.
#718969
Lesenswert?

Michaels Variante:
1
x = 0 to n-1
2
    Für jede Zeile:
3
        Für jeden Pixel in Zeile:
4
            Wenn der Pixel heller als x sein soll
5
               LED an
6
            Sonst
7
               LED aus
8
        nächster Pixel
9
    nächste Zeile
10
nächstes x

Meine Variante:
1
Für jede Zeile:
2
    x = 0 to n-1
3
        Für jeden Pixel in Zeile:
4
            Wenn der Pixel heller als x sein soll
5
               LED an
6
            Sonst
7
               LED aus
8
        nächster Pixel
9
    nächstes x
10
nächste Zeile

Ist das verständlich?
#718975
Lesenswert?

Ist nur Pseudocode - wenn ich jetzt alle Optimierungen reingepackt hätte 
wär's unverständlich geworden.

Aber ja, das was du vorhast ist schon recht aufwändig für den 
Controller. Bei einer normalen PWM bedeuten 8 Farbabstufungen pi mal 
Daumen doppelten Rechenaufwand gegenüber 4 Abstufungen, da etwa doppelt 
so viele Updates an die Ports geschickt werden müssen.

Wie wolltest du die 8x6x3-Matrix mit den Ports verkabeln? Wie viele 
Zeilen/Spalten? Daraus ergibt die die Verteilung für den Rechenaufwand.
Gast #718976
Lesenswert?

bei der 'Standard' Beschaltung einer LED-Matrix mit z.B. Zeiltentreiber 
und Schieberegister für die Spalten kann man eine LED ja gar nicht 
einzeln ansteuern, sondern eben nur Zeilenweise. Der max. 
Helligkeitswert wäre dann eine Zeile 1/n Zeilen eingeschaltet, für 
weniger muß man das Schieberegister komplett neu laden und umschalten 
während eine Zeile aktiv ist. Da muß man ausrechnen wie lange das dauert 
und ob das mögich ist (mit Latches am Schieberegister sollte das gehen).
#718982
Lesenswert?

Wie gesagt, war nur Pseudocode.

Das Aktualisieren der Ports erfolgt in der Regel nach der Berechnung der 
gesamten Zeile. Man kann die je nach Speicherausstattung auch komplett 
vorberechnen. Das reduziert bei hohen Refresh-Raten gegenüber kleinen 
Frameraten der Rechenaufwand enorm.

Bei seiner Matrix-Größe kann man evtl. sogar aus die Schieberegister 
verzichten, wenn er genug I/Os hat und sonst nicht mehr viel anschließen 
will.
Gast #719116
Lesenswert?

Also zusammengefasst bedeutet das in etwa das:

graustufen=8

for k=1:graustufen
   for k=1:zeilenzahl
      Port.B.=muster
   end

   check if leuchtdauer überschritten
   modify muster

end

oder? Stimmt das so?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren