TI-Launchpad LM4F120: WS2812 driver demo with SPI-DMA

OP #3395400
Lesenswert?
• ▲
▼
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
Angehängte Dateien:

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.