Hallo Forum,
ich habe mal eine Frage. Ich versuche schon seit einigen Wochen den
WS2812 an einen STM32 anzukorken.
Als IDE benutze ich STM32CubeMX und SystemWorkbench. Ich habe einen
Timer als PWM Kanal konfiguiert und per DMA angesteuert.
Nach etlichen Problemen mit den Pegeln (ein Levelshifter mit Transistor
bzw FET hat nichts gebracht) habe ich nun tabula rasa gemacht und einen
74HC14 Schmitt-Trigger als Levelshifter verwendet. Die Pegel kommen nun
sauber an.
Der DMA funktioniert nach mehreren Anläufen nun auch (fast).
Allerdings habe ich beim DMA noch ein Problem wo ich im Moment nicht
weiß wo es her kommt.
Ich bereite die Pulse für den WS2812 in einem Array vor.
Sicherheitshalber habe ich noch zu anfang einige 0-Zeiten (also Pause)
ausgegeben. Allerdings schleicht sich da immer ein Puls zusätzlich ein
von dem ich nicht weiß wo er her kommt. Dieser Puls versaut mir
anscheinend die Anteuerung. Im Prinzip klappt das alles, nur manchmal
wird eine Falsche LED angesteuert. Anbei mal den Code und ein Foto vom
Oszi wo man den zusätzlichen Puls sehen kann.
Ich habe ein wenig die Vermutung das der DMA angestoßen wird während der
Timer noch läuft, und dadurch ein Puls ausgegeben wird (das der also
nicht wartet bis der letzte PWM Zyklus "durch" ist und dann erst die
Übertragung startet.
Kleine Info noch : Ich habe das Signal softwareseitig Invertiert damit
nach dem Schmitt-Trigger wieder "normal" 0 ausgegeben wird.
Edit :
Die Pause von dem zusätzlichen Puls am anfang bis zur eigentlichen
Übertragung ist immer etwas unterschiedlich. Um wieviel genau es
variiert kann ich leider nicht sagen. Ich schätze zw 2-3 PWM Zyklen.