mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STm32 / Zeit zwischen ext. Interrupts


Autor: Daniel Düsentrieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rainer Unsinn (r-u)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Axel Schwenke (a-za-z0-9)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: m.n. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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'.

Autor: Daniel Düsentrieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: unverschämt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: unverschämt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.