mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Pulslänge messen


Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich möchte gerne mit einem ATMEGA8 die Länge eines Pulses am INT1 
messen.
Die Zeit soll zwischen einer fallenden und einer steigenden Flanke 
gemessen werden.

Ich habe es so versucht:

'Timer1 mit 10ms Zeitbasis
Config TIMER1 = Timer , Prescale = 8
On Timer1 timerirq
Enable Timer1
Timer1 = 55536

'Externer Interrupt1
Config INT1 = Falling
On INT1 Int1irq
Enable Int1

Enable Interrupts

Dim Zeit1 as Word
Dim Zeit1alt as Word
Dim Int1falling as Bit


Main:
Do
  <mein code>
Loop


Timer1irq:
  TIMER1 = 55536
  Incr Zeit1

  If Zeit1 >= 1000 Then
    Print Zeit1alt
  End If
return


Int1irq:
  If Int1falling = 1 Then
    Zeit1 = 0
    Int1falling = 0
  Elseif Int1falling = 0 Then
    Zeit1alt = Zeit1
    Int1falling = 1
  End if
return



Leider funktioniert das Ganze nicht so, wie ich es mir vorgestellt habe. 
Die Zeiten, die ich am Terminal ausgegeben bekomme stimmen nicht. 
Vielleicht kann mir jemand helfen, der soetwas schoneinmal gemacht hat.

Karl

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Config INT1 = Falling

Wenn du den Interrupt so konfigurierst, wirst du dir schwer tun die Zeit 
zwischen fallender und steigender Flanke zu messen. Im Moment reagiert 
dein Interrupt nur auf fallende Flanken.

Warum so kompliziert?
Lass den Interrupt in beiden Fällen, steigend und fallend, auslösen. Du 
brauchst doch nur am Input-Pin nachsehen welchen Pegel er hat. Hat er 1 
Pegel, dann kann es nur eine steigende Flanke gewesen sein. Ist dort bei 
Auftreten des Interrupts aber ein 0 Pegel, dann kann es nur eine 
fallende Flanke gewesen sein.


NB: Du kennst den Capture Interrupt?

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.