Forum: Mikrocontroller und Digitale Elektronik Timer-Interrupt mit anderem Interrupt starten (STM-Board)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von leonhh (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Hallo,

also es geht um ein STM32F4-Board. Ich möchte dass ein Timer-Interrupt 
erst dann ausgelöst wird, wenn ein High-Pegel an einem Eingang erkannt 
wird und anschließend immer weiter läuft unabhängig davon, ob das Signal 
wieder auf High geht. Also einfach nur ein einmaliger Startschuss.

Ich habe mir das so vorgestellt, dass ich in der Main.c-Datei eine 
globale Variable var=0 einführe und mit dem externen Interrupt des 
Signals diese Variable auf 1 setze.
Dann würde ich in der Callback-Funktion des Timer-Interrupts einfach die 
if-Bedingung mit var==1 UND-verknüpfen...

Wäre das so in Ordnung oder gibt es noch bessere Möglichkeiten. Ich habe 
mal irgendwo gelesen, dass man globale Variablen vermeiden sollte ;)

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
leonhh schrieb:
> Dann würde ich in der Callback-Funktion des Timer-Interrupts einfach die
> if-Bedingung mit var==1 UND-verknüpfen...

Warum so kompliziert?
Der externe Interrupt setzt einfach das Run-Bit des Timers.

von Dr. Sommer (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Der Timer kann sich auch komplett selbstständig starten, wenn eine 
steigende Flanke ankommt ("Slave Mode"). Dadurch hast du nur eine sehr 
kurze Latenz zwischen Flanke und Start des Timers und die Software wird 
nicht beeinflusst. Lies im Datenblatt nach, wie das geht.

von TM F. (p_richner)


Bewertung
0 lesenswert
nicht lesenswert
Wie @Peter D. bereits geschrieben hat in Pseudo-Code:
1
ISR(INTERRUPT_ext)
2
{
3
    enable_timer = 1;
4
}
5
6
ISR(timer)
7
{
8
    ....
9
}

Dies wird einfach bei jedem Intterupt ausgeführt. Hat keinen Einfluss 
auf die Funktion, benötigt nur ein paar Taktzyklen mehr.

MfG

: Bearbeitet durch User
von leonhh (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
ich habe nur das Problem, dass der Timer bereits im Encoder-Mode 
arbeitet, was laut CubeMx wohl den Slave-Mode ausschließt

von TM F. (p_richner)


Bewertung
0 lesenswert
nicht lesenswert
leonhh schrieb:
> dass der Timer bereits im Encoder-Mode
> arbeitet

Wenn der Timer bereits läuft, warum/wie willst du ihn erneut 
einschalten?

von leonhh (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
ich habe doch bereits geschrieben, dass der Timer erst dann laufen soll, 
wenn das Signal anliegt..der läuft dann eben im Encoder-Modus, weil er 
bestimmte Aufgaben zu erledigen hat.

von Peter D. (peda)


Bewertung
0 lesenswert
nicht lesenswert
leonhh schrieb:
> weil er
> bestimmte Aufgaben zu erledigen hat.

Welche denn?
Oft ist es besser, wenn man beschreibt, wozu das Ganze gut sein soll, 
d.h. was die eigentliche Aufgabe ist. Dann wird einem nicht eingeweihten 
Leser das Problem viel klarer.
Anhand eines Teils eines Lösungswegs läßt sich nur schwer auf die 
Aufgabe zurück schließen.

: Bearbeitet durch User
von leonhh (Gast)


Bewertung
-1 lesenswert
nicht lesenswert
Der Timer, der im Encoder-Modus läuft, fungiert als Zähler von zwei 
Quadratursignalen bzw. deren Änderungen. (Auslesung von Drehsensor, 
Encoder-Funktion ist genau für diese Anwendung vorgesehen). Dieser 
Drehsensor hat aber noch ein weiteres Signal, das nur einmal pro 
Umdrehung kommt.. und erst wenn dieses Signal zum ersten Mal 
durchgelaufen ist, soll der Zähler staten

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]
  • [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.