Forum: Mikrocontroller und Digitale Elektronik AVR Pulslänge messen


von Karl (Gast)


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:
1
'Timer1 mit 10ms Zeitbasis
2
Config TIMER1 = Timer , Prescale = 8
3
On Timer1 timerirq
4
Enable Timer1
5
Timer1 = 55536
6
7
'Externer Interrupt1
8
Config INT1 = Falling
9
On INT1 Int1irq
10
Enable Int1
11
12
Enable Interrupts
13
14
Dim Zeit1 as Word
15
Dim Zeit1alt as Word
16
Dim Int1falling as Bit
17
18
19
Main:
20
Do
21
  <mein code>
22
Loop
23
24
25
Timer1irq:
26
  TIMER1 = 55536
27
  Incr Zeit1
28
29
  If Zeit1 >= 1000 Then
30
    Print Zeit1alt
31
  End If
32
return
33
34
35
Int1irq:
36
  If Int1falling = 1 Then
37
    Zeit1 = 0
38
    Int1falling = 0
39
  Elseif Int1falling = 0 Then
40
    Zeit1alt = Zeit1
41
    Int1falling = 1
42
  End if
43
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

von Karl H. (kbuchegg)


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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.