m@rkus33
11.04.2007, 16: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
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