STm32 / Zeit zwischen ext. Interrupts

Gast #4719421
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.
Gast
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'.
Gast
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?
Gast
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).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.