mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik An einem Interrupt-Eingang beide Flanken erkennen?


Autor: Dietrich Arndt (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieder mal: Was für ein Controller ist das? Ohne die Information kann
hier keiner helfen!

Autor: Dietrich Arndt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ups, vergesse immer, daß es nicht nur AVR's gibt.. :(

Atmega8 , schreibe mit Bascom. INT1 ist noch frei.

Autor: Sebba (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nabend!

Schau dir das Datenblatt nochmal kurz an
und erklär mir dann nochmal kurz wozu
man den 2. Modus verwenden könnte
(ISC11 = 0; ISC10 = 1)

Bis bald

Autor: johnny.m (Gast)
Datum:

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

Autor: Dietrich Arndt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke an alle!

Bin noch grün, was AVR's angeht. Habe mich auf die Bascom
-Beschreibung verlassen. Und da gibt es nur Config INTx  (LOW LEVEL,
FALLING ,RISING)

Autor: johnny.m (Gast)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

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

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.