An einem Interrupt-Eingang beide Flanken erkennen?

Gast #305484
Lesenswert?
• ▲
▼
Hallo,

Habe das Problem, daß ich Länge eines Impulses (bis 20ms) messen
möchte.. Im Moment mache ich es so:

Warten bis High , dann Timer starten. Warten bis Low , Timer stopen,
den Timerwert  ablesen , fertig.
Nun aber das Problem, daß das Programm in dieser Routine immer hängt,
bis der Impuls auf Low geht... Das ist bei 20ms etwas ungünstig!
Ich möchte das jetzt irgendwie eleganter lösen. Per Interrupteingang?
Nur kann ich da nur eine Flanke definieren..Wie kann ich die andere
erkennen? Oder gibt es da was anderes?

mfg
Gast #305488
Lesenswert?
• ▲
▼
Der ATMega hat ne Input Capture Einheit. Damit sollte es gehen, wenn
Timer 1 frei ist. Ist eigentlich die übliche Methode. Ansonsten sind
die Interrupts umschaltbar (pos., neg. Flanke, beides oder Low Level).
Gast #305490
Lesenswert?
• ▲
▼
Selbst mit den Parametern gehts. Musst nur in der ersten ISR den Level
umschalten. Der nächste kommt dann auf die jeweils andere Flanke.

Aber wie gesagt, Längen von Signalen erfassen geht am elegantesten mit
Input Capture.

Gruß

johnny
#305491
Lesenswert?
• ▲
▼
> Der ATMega hat ne Input Capture Einheit. Damit sollte es gehen,
> wenn Timer 1 frei ist.

Timer 1 muss dazu nicht frei sein. Das geht auch, wenn Timer 1 nebenbei
noch für OC1A und OC1B verwendet wird. Man muss nur darauf achten, dass
niemand den Timerstand manipuliert.

Man setzt also bei ICP den Timer nicht auf 0, sondern merkt sich den
"Zeitstempel" der letzten Abfrage und subtrahiert diesen vom
aktuellen Zeitstempel.

Bei OC1x addiert man das Intervall zum nächsten Interrupt zum aktuellen
OCR1x-Register dazu.

Somit kann Timer 1 gleichzeitig zwei hochgenaue Interrupt-Folgen
erzeugen und einen Impuls hochgenau ausmessen.

Falls deine Programmiersprache das nicht nutzen kann, solltest du über
eine andere Programmiersprache nachdenken.

...

Antwort schreiben

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.

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.