Forum: Projekte & Code LED Matrix Ansteuerung mit STM32F4 ohne CPU Last


von Malte _. (malte) Benutzerseite


Angehängte Dateien:

Lesenswert?

Vielleicht interessiert sich ja jemand für meine Lösung um eine LED 
Matrix mit DMA Kanälen und Timern ganz ohne CPU Nutzung anzusteuern.

Ich habe das auf einem STM32F405 mit einer 5x5 RGB Matrix getestet 
(Anordnung 15x5). Eine generische Lib ist da etwas schwierig zu 
schreiben, so dass jeder der nicht zufällig meine Pinbelegung verwendet 
den Code leider anpassen muss.

Das Prinzip ist, dass ein erster Timer beim Überlauf einen DMA Kanal für 
die Zeilen triggert und gleichzeitig einen zweiten Timer kaskadiert. 
Dieser triggert dann bei einem Überlauf einen zweiten DMA Kanal für die 
Spalten.

Hat man genügend Speicher, kann man so jede LED per PWM dimmen und 
verschiedene Mischfarben erzeugen. Das funktioniert, indem der 
Helligkeitswert jeder LED in eine unäre Darstellung konvertiert wird und 
so die Werte für die Zeilen vorberechnet werden. Der Nachteil ist 
natürlich der mit der Anzahl der Bits für die Helligkeitsstufen 
exponentiell ansteigende RAM Verbrauch.
Für 9 Bit PWM sind das so pro Zeile 2^9 * sizeof(uint16_t) = 1KiB. 
Außerdem müssen die Ausgänge alle Zeilen und Spalten  jeweils auf einem 
gemeinsamen Port liegen, was das ganze mit zwei DMA Kanälen auf eine 
16x16 Matrix begrenzt. Werden auf dem Port noch andere Pins als Ausgang 
genutzt, so muss statt dem 16 Bit ODR Register das 32Bit BSR Register 
genutzt werden, was den Speicher noch mal verdoppeln würde. Vermutlich 
könnte man noch einen dritten DMA Kanal hinzufügen und so eine 16x32 
Matrix realisieren. Ansonsten ist bei der DMA und Timer wahl erstaunlich 
wenig Varianz möglich.

Einige Tage hat es mich gekostet dahinter zu kommen, dass ich von einem 
Errata betroffen war, der ohne Workaround bei Benutzung der Matrix 
Ansteuerung plötzlich für eine nicht mehr per DMA funktionierende SD 
Karte sorgte.

Und weil der interne Bus noch Geschwindigkeitsreserven liefert, kann man 
die Matrix noch als ganzes in 1/8 Schritten der Maximalhelligkeit on the 
fly herunter dimmen.
: Bearbeitet durch User
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.