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

