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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.