Hallo,
ich habe versucht anhand von den Examples von Coocox, die ich auch hier
im Forum gefunden habe, mit dem STM32F4Discovery Timer Input Capture mit
DMA zu realisieren.
Leider bekomm ich das ganze nicht zum laufen.
Bitte um Hilfe.
Danke für die Antwort Nils!
Ich habe den Timer mittlerweile zum Laufen gebracht (hab das Sample von
Progger verwendet)
Gibt auch schön Interrupts aber der DMA-Request funktioniert nicht.
Ich habe auch schon das 1400 Seiten Manual von ARM durchforstet, kann
aber nichts finden, warum DMA hier nicht funktioniert. Anscheinend
übersehe ich da was Entscheidendes.
Ich will nicht PWM einlesen, sondern die Zeit zwischen mehreren
Umschaltvorgängen des übergeordenten Systems wissen. Das Ganze ist zur
Fehleranalyse gedacht. DMA brauch ich aus Ressourcengründen.
Die Cortex M4(F) haben keine Timer, nur einen Systick. Ihr meint die
STM32F4-Timer. Daher bringt das Manual von ARM auch nichts, sondern eher
das STM32F4 Reference Manual von ST.
Ich hänge leider noch immer beim DMA fest.
Per Interrupt lässt sich der Timerwert auslesen, nur mit DMA
funktioniert es nicht.
Kann es sein, dass Interrupt und DMA Request nicht gleichzeitig
funktionieren?
Raffael T. schrieb:> Ich kämpfe auch gerade mit den Cortex F4 Timern.> @ progger0815: hast du schon eine Lösung?
Nun sind wir bereits zu dritt. Mein Problem: Ich muss ca. 60ms lang alle
Interrupts ausschalten, um eine Kette mit bis zu 2000 WS2812-LEDs in
einem exakten und Jitter-freien Timing mit Daten-Bits zu versorgen.
Andererseits muss ich auch in dieser Zeit die Flanken eines
ALPS-Encoders (Dreh-Drück-Knopf) auslesen. Dort kommen bei schnellen
Drehungen ca. alle 8ms Flankenwechsel. Ich würde also ca. 7
Flankenwechsel verlieren.
Vielleicht gibt es 2 verschiedene Möglichkeiten:
1. Der DMA-Controller schiebt die Daten-Bits Jitter-frei auf einen
GPIO-Pin oder
2. Der DMA-Controller schiebt nach jedem Flankenwechsel vom
ALPS-Encoder die Input-Capture-Werte in den FIFO oder noch
besser ins RAM.
Lösung 2 wäre m.E. das, was progger0815 auch möchte.
Ich blicke nach Lektüre der Datenblätter ohne Programm-Beispiel auch
noch nicht ganz durch.
Hat das schon mal jemand hinbekommen, oder inzwischen ein
Programm-Beispiel gefunden?
Torsten C. schrieb:> Andererseits muss ich auch in dieser Zeit die Flanken eines> ALPS-Encoders (Dreh-Drück-Knopf) auslesen. Dort kommen bei schnellen> Drehungen ca. alle 8ms Flankenwechsel. Ich würde also ca. 7> Flankenwechsel verlieren.
Manche STM32 Timer, z.B. TIM1/8, kennen eine Quadratur Encoder Mode.
Dann werden die Flanken auch bei abgeschalteten Interrupt erkannt..
Uwe Bonnes schrieb:> Manche STM32 Timer, z.B. TIM1/8, kennen eine Quadratur Encoder Mode.> Dann werden die Flanken auch bei abgeschalteten Interrupt erkannt..
Danke für den Tipp. :-) Dann kann ich zwar keine SW-Entprellung machen,
aber da nur jeder zweite Counter-Stand genutzt wird, sollte das gehen.
Ich will nicht länger auf alternative Lösungen warten und habe für
schnelle Drehungen zur Sicherheit eine Entprellung mit 2 Widerständen
und einem Kondensator bestückt. Ich bin heute nur noch nicht zum
ausprobieren gekommen.
Aber die Ursprungsfrage von progger0815 ist leider noch nicht
beantwortet. Mich interessiert trotzdem, wie's gehen würde.
Und um den Prozessor nicht mit zu blockieren, will ich auch
Möglichkeit 1 ^^ weiter verfolgen.
Erstens haben die Timer auch noch Filteroptionen. Schau Dir die erstmal
an, bevor Du extern Filters. Aus ausserdem macht Prellen nichts, solange
das Prellen nicht bis zur naechsten Taktflanke des anderen Kanal dauert.
Uwe Bonnes schrieb:> Schau Dir die erstmal an, bevor Du extern Filterst.
Wieder ein guter Tipp, danke. In dem Teil ist noch einiges verborgen,
was ich noch nicht entdeckt habe.
Uwe Bonnes schrieb:> solange das Prellen nicht bis zur naechsten Taktflanke> des anderen Kanal dauert
Das kann bei schnellen Drehungen leider passieren. Aber wenn die Flanken
immer erst übernommen werden, wenn die Signale mehrere Takte stabil
sind, werden ja vielleicht beide Flanken verzögert und dann würde ja
trotzdem korrekt gezählt werden.
Mit 'nem größeren Drehknopf (Foto) kommt man auch nicht mehr so leicht
auf sooo hohe Frequenzen, als wenn man direkt an der Welle dreht.
Aber ich glaube, nun haben wir - ohne es zu wollen - langsam diesen
Thread für ein anderes Thema gekapert.
Eine eigene Frage?
Dieser Thread ist über 13 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.