Zur Ansteuerung der beliebten RGB-Leds auf Basis der WS2811/WS2812 chips habe ich mal einen Treiber für den Stellaris ARM LM4F120 erstellt. Um das zeitaufwändige Bit-Banging oder das speicherfressende Timer/DMA Verfahren zu vermeiden, habe ich mal die SPI Schnittstelle mit DMA probiert. Das es vorzüglich funktioniert stelle ich es hier mal rein. Das ausgepackte ZIP kann direkt als Projekt in eclipse importiert werden. Als Basis habe ich das Standardprojekt des TI-Launchpads verwendet und entschlackt. Zusätzlich wird natürlich die system lib aus dem Starterpack gelinkt. Die Demo läßt einfach eine Lichtspur in zufällig wechselnden Farben über den RGB-Strip laufen. Über die beiden Taster kann man die Helligkeit in 10 Stufen regeln. Die aktuelle Helligkeit wird als Overlay auf dem strip angezeigt. Die Länge des strips muss man in ws2812.h definieren. Er steht jetzt auf 15, da ich das ganze mit einem kurzen Reststück betrieben habe. Es geht aber jede beliebige Länge für die der Speicher reicht. Hier ein paar Hinweise zur Funktion: Zu Erzeugung eines WS2812 konformen Taktsignals wird ein SPI port verwendet (die SPI ports heißen bei TI SSI port). Standardmäßig wird nur die SSI2 Senderichtung mit Port PB7 genutzt. TIPP: PB7 habe ich als open drain eingestellt, da der strip ein 5V Taktsignal will. An PB7 ist demnach noch ein Widerstand nach +5V vorzusehen, sonst bleibts dunkel. Der SSI wird mit ca. 3,2Mhz getaktet, wobei jeweils 4 gesendete bits einem WS2812-Bit entsprechen (so kommt man auf die geforderten 800kHz). Um ein 0-bit zu senden wird ein 0b1000 übertragen, für ein 1-bit 0b1100. Jeweils 2 solcher Übertragungen werden zu einem byte zusammengefasst. Das ganze wird auf Basis der gewünschten RGB Werte vorbereitet und per DMA an den SSI übergeben. Pro led werden 24 bit benötigt, so dass der DMA buffer pro led 12 bytes umfasst. Bei den üblichen Timer/PWM Lösungen ist das i.d.R. deutlich mehr. Viel Spaß pitschu
hey klasse bin auch dabei sowas gerade auf dem STM32F4 zu realisieren schön zu sehen das es prinzipiell möglich ;)
Ben W. schrieb: > bin auch dabei sowas gerade auf dem STM32F4 zu realisieren Wie weit bist du damit? Ich würde mich für die DMA/SPI Lösung auf dem STM32 interessieren. Also falls du von deinen Erfahrungen berichten könntest wäre das super... Danke!
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.