Laufzeitmessung von Schall
Hi !
Zum projekt : ich möchte die laufzeit des von einem beeper ausgegeben schalls zum micro messen. Daraus liese sich dann leicht über die schallgeschwindigkeit die enfernung errechnen.
dazu habe ich hier mal ein programm geschrieben:
Code:
$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600
Dim X As Integer
Dim Ti As Word
Dim Xsave As Integer
Dim Erg As Long
Dim Zwierg As Long
Config Pind.7 = Output
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Pinc.7 , Db5 = Pina.5 , Db6 = Pina.6 , Db7 = Pina.4 , E = Pinc.6 , Rs = Pinc.5
Config Lcd = 16 * 4
Config Timer1 = Timer , Prescale = 1
Config Adc = Single , Prescaler = Auto
Start Adc
On Timer0 Tim1_isr
Enable Timer1
Enable Interrupts
Sound portd.7 , 200 , 450
Do
If Getadc(2) > 614 Then
Ti = Timer0
Xsave = X
Exit Do
End If
Loop
Sound Portd.7 , 2000 , 1000
Erg = Ti * 63
Zwierg= Xsave * 65536
Erg = Erg + Zwierg
Cls
Lcd "berechnung:"
Lowerline
Lcd Erg ; " // " ; Ti
Tim1_isr:
X = X + 1
Return
End
Allerdings funktioniert das noch nicht so ganz... Erg und Ti sind irgendwie immer null. und das programm endet nie, so wie es eigentlich sollte... Könnte das daran liegen, das der Timer weiterhin fleisig überleuft und interrupts produziert ? und dann natürlich wieder zurück in die Schleife springt ?
Würde mich interessieren, was ihr dazu sagt ! (sonst hätte ichs auch net hier rein gestellt ^^)
mfg Javik