Hallo Leute,
ich versuche aktuell mit einem STM32F29ZI... Pulse zu zählen. Ich möchte
nicht messen wie lang dieser ist, sondern nach jeder steigenden Flanke
einen Counter inkrementieren.
Es sollte möglichst ohne Interrupts ablaufen.
Nun habe ich mich in dem Datenblatt bereits informiert. Dort finde ich
den Punkt mit der External Clock (ETR - PIN) ziemlich interessant.
Allerdings würde ich gerne 4 Pulse "parallel" erfassen und unabhängig 4
COunter pro pos. Flanke inkrementieren. Mit dem ETR-PIN würde ich ganze
4 Timer dafür brauchen. Gibt es eine weitere Möglichkeit mehrere Channel
eines TImers für diese Aufgabe in betracht zu ziehen?
Ich Danke euch!
Hallo,
mit 400 - 600Hz rechne ich. Pollen ist recht schwierig, da die Pulse
recht kurz sind. Das Hauptprogramm sollte außerdem nicht durch dieses
pollen beeinträchtigt werden.
Wenn du nicht pollen willst UND deine Pulse kurz sind, kommst du um eine
Interruptgeschichte wohl nicht herum.
Eine Möglichkeit wäre noch, dass du die Pulse per Monoflop verlängerst,
aber da musst du mal genau nachrechnen, ob du das in der Haubtschleife
noch mitbekommen kannst.
Gruß
Uwe
Ich gehe mal davon aus als Controller verwendest du den STM32F429ZI.
Dieser hat doch alleine 10 Standard Timer, was spricht gegen deren
Einsatz, solange du diese nicht für was anderes brauchst.
Einfacher und unkomplizierter kannst du meiner Meinung nach diese
Auswertung ohne Interrupts nicht machen.
Felix K. schrieb:> Es sollte möglichst ohne Interrupts ablaufen.
Warum denn das? Das wäre die sicherste Lösung sodass du keinen Puls
verpasst. Pollen ist wesentlich unzuverlässiger und erheblich
aufwendiger.
Ich habe ein ähnliches Problem. Dabei habe ich mich für Interrupts
entschieden. Die Interrupt-Funktion ist ja sehr kurz (Hochzählen einer
Speicherzelle). Das braucht in der Summe weniger Rechenzeit, als wenn
ich die ganze Zeit irgendetwas polle...
Interessanter Ansatz..
Alles, was dem Chip an passender Hardware mitgegeben wird, willst du
nicht einsetzen, warum auch immer.
Bei der Alternative polling hast du Angst (zu Recht) was zu verpassen.
Dann bleibt wohl nur ein externer Zähler :-)
H.Joachim S. schrieb:> Bei der Alternative polling hast du Angst (zu Recht) was zu verpassen.
Man könnte auch mit einem Timerinterrupt (und wie schon erwähnt mit
Monoflops verlängerten Pulsen) pollen. Da müsste man mal rechnen, wie
oft der Interrupt kommen muss und welche µC-Last das bewirkt.
Dietrich L. schrieb:> Da müsste man mal rechnen, wie> oft der Interrupt kommen muss und welche µC-Last das bewirkt.
Na ja, laß die Interruptroutine 100 ns dauern. Dann wird der µC bei 600
Impulsen/s mit rund 60 ppm belastet. Da bleibt dann nicht mehr viel Zeit
für andere Sachen. Man müßte mal probieren, ob das mit vier Kanälen auch
noch funktioniert.
Wo war noch mal das Problem?
m.n. schrieb:> Wo war noch mal das Problem?
Vielleicht ist im Hauptprogramm mit Hilfe von Delay-Schleifen eine Uhr
Programmiert, und die geht ja dann durch die ISR-Zeiten später nach...
Das Problem scheint darin zu liegen, dass der TO befürchtet, dass der
Chip sich schneller abnutzt, wenn er die komfortablen Hardwarefeatures
desselben nutzt...
Up to 17 timers: up to twelve 16-bit and two 32-bit timers up to 180
MHz, each with up to 4 IC/OC/PWM or pulse counter and quadrature
(incremental) encoder input
Thomas E. schrieb:> Vielleicht ist im Hauptprogramm mit Hilfe von Delay-Schleifen eine Uhr> Programmiert, und die geht ja dann durch die ISR-Zeiten später nach...
Wer mit Delays eine Uhr programmiert, hat es nicht anders verdient ;-)
m.n. schrieb:> Dietrich L. schrieb:> Da müsste man mal rechnen, wie> oft der Interrupt kommen muss und welche µC-Last das bewirkt.>> Na ja, laß die Interruptroutine 100 ns dauern. Dann wird der µC bei 600> Impulsen/s mit rund 60 ppm belastet. Da bleibt dann nicht mehr viel Zeit> für andere Sachen. Man müßte mal probieren, ob das mit vier Kanälen auch> noch funktioniert.>> Wo war noch mal das Problem?
Genau das habe ich mir auch überlegt. Bei 4 Interrupts, die aller 600hz
kommen ist die Belastung nicht ohne!
Ich verweigere den Einsatz von den Timern ja nicht... Ich wollte bloß
nach einer effizienteren Lösung suchen, mehrere Kanäle eines Timers für
diese Anwendung zu nutzen.
Abschließend ist also zu sagen, dass wohl 4 Timer mit jeweils externen
clockmode am sinnvollsten für einen unterbrechungsfreien Ablauf des
Hauptprogramms ist.
Ich danke euch
Ein Hardwarezähler im µC braucht zum inkrementieren des Zählstandes
keinen Interrupt. Auch das Vergleichen mit einem Sollwert benötigt
keinen Int. Das geschieht über die Compareregister, welche nur beim
Match einen Int generieren, falls gewünscht. Ansonsten kann das
Match-Flag auch gepollt werden, da es i.d.R. nur mit einem Bruchteil der
Zählfrequenz getriggert wird.
Uwe K. schrieb:> Wenn du nicht pollen willst UND deine Pulse kurz sind, kommst du um eine> Interruptgeschichte wohl nicht herum.
Wie das? Hat ein STM32 keine Timer/Counter, die Impulse an einem Pin
zählen können? Das ist also schonmal ein dritter Weg, der weder pollt,
noch einen Interrupt braucht.
>Genau das habe ich mir auch überlegt. Bei 4 Interrupts, die aller 600hz>kommen ist die Belastung nicht ohne!
@Felix: Du hast die Ironie im vorigen Beitrag nicht verstanden. 60 ppm.
Schmeiß mal google an. Der Zeitverbrauch ist ein Witz. Minimal. Ohne
Interrupt mit Zählern noch weniger.
Thomas E. schrieb:> Vielleicht ist im Hauptprogramm mit Hilfe von Delay-Schleifen eine Uhr> Programmiert, und die geht ja dann durch die ISR-Zeiten später nach...
Dafür gibt es ja DMA!
Felix K schrieb:> Genau das habe ich mir auch überlegt. Bei 4 Interrupts, die aller 600hz> kommen ist die Belastung nicht ohne!
Du hast wohl keinen Sinn für Ironie. Laß mich Deine Aussage korrigieren:
Bei 4 Interrupts, die mit 600 Hz kommen, ist der µC ohne Belastung.
Im Gegenteil: der ..429 langweilt sich ohne Ende - egal wie ungeschickt
man es auch anstellt (mache würden auch dämlich schreiben ;-)
In meiner Jugend habe ich auch nicht gerne mit Interrupts programmiert.
Das ist wie eine Blockade, die man erst einmal überwinden muss.
So wie der erste Sprung vom Dreier, oder das erste Ansprechen einer
weiblichen Person.
Wir sollten dem TO gut zureden, und vielleicht mal ein Auge auf seinen
Interrupt Code werfen, damit er die Scheu verliert.