Forum: Mikrocontroller und Digitale Elektronik Stm32f4+spi+coocox+ws2812


von Simon H. (simon_h851)


Lesenswert?

Sehr geehrte hobbyelektroniker ich bräuchte bitte eure hilfe. Ich muss 
mitels spi die bus leds ws2812 ansteuern. Jedoch habe ich keine ahnung 
wie ich die bitzeit richtig einstelle und dann die bits wegschicke. 
Bitte um hilfe

von Tobi (Gast)


Lesenswert?

Nimm doch eine fertige Lib, wieso das Rad zwei mal erfinden?

Meine erste Anlaufstelle ist die Seite von Uwe, habe damit sehr gute 
Erfahrungen bisher gemacht:

http://mikrocontroller.bplaced.net/wordpress/?page_id=3665

Er hat auch noch eine Lib mit bis zu 8 Ketten, falls du sowas eher 
brauchst.

von Simon H. (simon_h851)


Lesenswert?

Leider ist es nicht so einfach ich muss alles selber machen. Es ist ein 
Projekt für die schule.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Wenn Du einen "Inverter" spendierten möchtest, spricht einiges für den 
UART:

Thomas F. schrieb im 
Beitrag "Re: WS2812B über USB-UART ansteuern"
> Start + 8Bit + Parität + Stopp
>     S0123 4567Pss
>  00 11000 0110000
>  01 11000 0111100
>  10 11110 0110000
>  11 11110 0111100

So mache ich es auch bei meiner Wohnzimmerbeleuchtung mit dem Stm32f4.

PS: Das geht auch sehr gut mit DMA und das Timing lässt sich am UART 
sehr exakt einstellen.

: Bearbeitet durch User
von Simon H. (simon_h851)


Lesenswert?

Danke und auf was hast du den prescaler eingestellt?
Mein lehrer hat gemeind ich soll den High bzw. Low pegel was der ws2812 
benötigt auf 24 bit aufteilen damit ich zuerst einen langen teil 1 
ausgebe und den rest 0 damit das bitmuster die die led benötigt ausgibt.

von chris (Gast)


Lesenswert?

Simon H. schrieb:
> Leider ist es nicht so einfach ich muss alles selber machen. Es ist ein
> Projekt für die schule.

LOL.
Und dann im Forum andere die Arbeit machen lassen.
Dann lass dich doch einfach von der Lib von z.B. Uwe inspirieren und 
versuche sie zu verstehen.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Simon H. schrieb:
> Danke und auf was hast du den prescaler eingestellt?

Weiß ich nicht im Kopf. Neu ausrechnen geht schneller als suchen.

> Mein lehrer hat gemeind ich soll den High bzw. Low pegel was der ws2812
> benötigt auf 24 bit aufteilen damit ich zuerst einen langen teil 1
> ausgebe und den rest 0 damit das bitmuster die die led benötigt ausgibt.

Kann man machen. Mit "S01234567Pss" (s.o.) kann man die High-Low-Pegel 
auch auf 12 Bit aufteilen.

Es klappt sogar mit "S0123456s" und 3 x "High-Low-Pegel" in einem byte.

000 = 100100100
001 = 100100110
010 = 100110100
...
111 = 110110110

Das ist vermutlich, was Dein Lehrer meinte.

Da ein UART immer mit einer 0 als Start-Bit startet, brauchst Du beim 
UART einen Inverter. Es gibt auch Lösungen mit SPI oder mit Timern ohne 
Inverter.

: Bearbeitet durch User
von Thomas E. (picalic)


Lesenswert?

Torsten C. schrieb:
> Da ein UART immer mit einer 0 als Start-Bit startet, brauchst Du beim
> UART einen Inverter. Es gibt auch Lösungen mit SPI oder mit Timern ohne
> Inverter.

Da die 3.3V High-Pegel vom Controller aber sowieso zu klein sind 
(zumindest, wenn man das sog. "Datenblatt" zu den LEDs einhalten will), 
braucht man eigentlich eh einen externen Baustein als Pegelwandler, da 
kann man dann dafür auch gleich einen Inverter nehmen...

: Bearbeitet durch User
von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Thomas E. schrieb:
> braucht man eigentlich eh einen externen Baustein als Pegelwandler

Wenn man das hier im Forum schreibt, gibt es oft "Gegenwind" nach dem 
Motto: "Bei mir geht das auch ohne." Ich sehe das aber genau so. Dann 
geht's auch bei Vollmond ;-) und bei etwas längeren Kabeln.

: 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.