Hallo! Ich habe eine Verständnisfrage: Ich möchte die Zeit zwischen externen Interrupts messen. Habe gelesen, dass sich dafür der Capture/Compare Mode eignet. Wie muss ich nun vorgehen? Kann ich über den gleichen Pin, an dem ich die externen Interrupts erkenne, auch den Timer für den Capture/Compare Mode benutzen? MfG, DD
Ich lese es so / würde vermuten, dass er sich die Timer-Werte im Register merkt, sobald der Input Capture Pin auslöst (immer, sobald der Timer in diesem Modus läuft). Zusätzlich kannst Du einen Interrupt auslösen - ja, durch dasd gleiche Ereignis am gleichen Pin.
Daniel Düsentrieb schrieb: > Ich habe eine Verständnisfrage: > > Ich möchte die Zeit zwischen externen Interrupts messen. > Habe gelesen, dass sich dafür der Capture/Compare Mode eignet. Nicht so richtig. Die Funktion einer Capture-Einheit besteht darin, den aktuellen Stand eines Timers abzuspeichern, wenn ein Hardware-Ereignis stattfindet. Welche Arten von Hardware-Ereignissen möglich sind, hängt vom konkreten Timer-Subsystem ab. Das Minimum das jeder µC haben sollte, sind steigende/fallende Flanken an einem IO-Pin. Ein Interrupt hingegen ist die softwareseitige Reaktion auf ein Hardware-Ereignis. Wenn du ein Ereignis per Capture erfaßt, dann brauchst du dafür nicht auch noch extra einen Interrupt auszulösen. Zumal die Capture-Einheiten ohnehin die Möglichkeit bieten, bei der Auslösung selber einen Interrupt anzumelden. Statt Hardware-Capture kann man die gleiche Funktion auch in Software nachbilden. Dazu läßt man einfach einen Timer durchlaufen und in der ISR für den entsprechenden Interrupt liest man den Zählerstand aus und schreibt ihn in eine Variable. Hardware-Capture hat den Vorteil, daß die Verzögerung zwischen dem Hardware-Ereignis und dem Auslesen des Timers minimal ist. Und auch nicht durch Interrupt-Sperren o.ä. beeinflußt wird. > Wie muss ich nun vorgehen? > > Kann ich über den gleichen Pin, an dem ich die externen Interrupts > erkenne, auch den Timer für den Capture/Compare Mode benutzen? Lies das Hardware-Manual deines STM32. Insbesondere den Teil über die Timer und deren Capture-Funktion. Die unterschiedlichen STM32-Familien haben da durchaus unterschiedliche Fähigkeiten.
Daniel Düsentrieb schrieb: > Kann ich über den gleichen Pin, an dem ich die externen Interrupts > erkenne, auch den Timer für den Capture/Compare Mode benutzen? Nimm die Eingänge eines Timers TIMx_CHy. TIM1 und TIM8 haben vier Eingänge, die anderen zumeist zwei. Zu jedem Capture-Ereignis kann ein Interrupt ausgelöst werden. Falls Du nur zwei Eingänge brauchst, kann man mit CH1 den Timer löschen (Start der Messung) und mit CH2-Capture die Zeit direkt 'einfangen'.
Danke für eure Antworten! Bei diesem ganzen Thema ist mir noch eine grundsätzliche Frage aufgekommen. Bsp.: Ich habe einen Timer mit 4 Kanälen zur Verfügung. Ich habe vier verschiedene Anwendungen für diese Kanäle. Ch1 Externer Interrupt Falling Ch2 LED blinken lassen 1Hz CH3 Externer Interrupt Rising CH4 LED blinken lassen 2Hz Das heißt ja, jeder Channel dieses Timers muss individuell initialisiert werden. Ist das grundsätzlich überhaupt möglich?
Daniel Düsentrieb schrieb: > Ist das grundsätzlich überhaupt möglich? Ja. Die Kanäle haben sowohl Eingang als auch Ausgang. Sie beziehen sich auf denselben Zähler (ggf. 16 bit), der mit einstellbarer Frequenz auf/ab zählt. In deinem Beispiel definiert 1 Hz die Einstellungen und damit die Auflösung der Capture Inputs (heisst beim Timer nicht externer Interrupt).
PS: Guck mal in die Beispiele der genutzten Blibliothek. Oder mal http://www.diller-technologies.de/stm32.html anschauen. Behandelt aber nicht alles und bezieht sich auf die SPL (vor CubeMX / HAL).
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.