PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : zeit zwischen Int0 messen



m@rkus33
11.04.2007, 15:01
Hi @all

habe ein kleines Problem. Ich habe einen impulsgeber in einer fertigen Schaltung an dem ext. Int0 hängen. hier werden die reinen impulse hochgezählt. Jetzt möchte ich zusätzlich die Zeit messen die zwischen den Impulsen vergangen ist. Der Int0 ist auf fallende Flanke komfiguriert. Pulsein geht ja nicht, weil ich die Dauer zwischen den impulsen messen will und nicht die Breite des impulses.
Ich möchte die Messung mit dem Timer1 machen. Aber wie bringe ich das hin, das bei der fallenden flanke der timer1 startet und bei der nächsten fallenden Flanke der Timer1-Wert ausgelesen wird und wieder auf 0 gesetzt ird und sofort wieder bei der nächsten fallenden Flanke das Spiel von vorne los geht???

Bei meinem Code kann ich zwar den Timer im Int0 auslesen, aber beim ersten Impuls stimmen die Werte nicht und wenn kein Impuls kommt habe ich immer nur den alten wert.

Nen Tip?



$regfile = "m8def.dat"
$crystal = 7372800
$baud = 9600
$lib "i2c_twi-slave.lbx"

Dim Impcount As Word
Dim Impulse As Long
Dim Imp_time As Word

Config Int0 = Falling
Config Pind.2 = Input 'Int0 bei Mega8
Portd.2 = 1

Config Pinc.0 = Output 'status LEDs
Config Pinc.1 = Output

Config Scl = Portc.5 'i2c Comm.
Config Sda = Portc.4

Config Twislave = &H40 , Btr = 2 , Bitrate = 100000

Config Timer1 = Timer , Prescale = 64
Const Timervorgabe = 54016

Enable Timer1

Enable Interrupts
Enable Int0

Impcount = 0
Impulse = 0

On Int0 Irq0



Do

Portc.1 = 1
'** mach irgendwas****
Portc.1 = 0

Loop
'-----------------------------------------------------------





'--------------------------------
Twi_stop_rstart_received:
Return
'--------------------------------

Twi_addressed_goread:
Return
'--------------------------------

Twi_addressed_gowrite:
Return

'--------------------------------

Twi_gotdata:
Return
'--------------------------------


Twi_master_needs_byte:
Portc.0 = 0

Select Case Twi_btr
Case 1 : Twi = Low(impcount)
Case 2 : Twi = High(impcount)
End Select

Print "Timerwert:" ; Impcount ; "Impulse:" ; Impulse 'testzwecke

Portc.0 = 1

Return

'--------------------------------

Twi_master_need_nomore_byte:
Return



'-------- IrQ ----------------

Irq0:

Portc.1 = 0
Imp_time = Timer1
Timer1 = 0
Impcount = Imp_time

Incr Impulse

Portc.1 = 1

Return



End