habe in fastavr-basic eine einfache routine ohne timer und ohne pulse für den srf04 zum testen geschrieben, ich wollte einmal nach dem datenblatt gehen mit den zeiten und es geht, jetzt weiss ich auch wie ein sfr04 funktioniert.
geht bis auf 3mm genau. musst diese in einer sub packen und am anfang interrupt disable und am ende wieder interrupt enable.
	Code:
	$Device= m16      
$Stack = 32      
$Clock = 8  
$Baud  = 19200
$Source= On   
Dim entfernung As Integer     
DDRD.7=0 ' eingang
DDRD.6=1 ' ausgang
Enable Interrupts
Do
PORTD.6=1
WaitUs 2
PORTD.6=0
WaitUs 38
entfernung=0
While PIND.7=1
 Incr entfernung
Wend
Print entfernung
WaitMs 150
Loop
 oder von Bascom :
	Code:
	$regfile = "m16def.dat"
$crystal = 8000000
$baud = 19200
Declare Function Ultrasonic_re() As Integer
Declare Sub Initialize_ultrasonic_re
Dim Ultra_daten_re As Integer
Enable Interrupts
Call Initialize_ultrasonic_re
Do
Ultra_daten_re = Ultrasonic_re()
Print Ultra_daten_re
Waitms 100
Loop
Sub Initialize_ultrasonic_re
   Config Pind.6 = Output
   Config Pind.7 = Input
End Sub
Function Ultrasonic_re() As Integer
    Portd.6 = 0
    Pulseout Portd , 6 , 10
    Pulsein Ultrasonic_re , Pind , 7 , 1
End Function
 
noch mal eine in fastavr-basic , wurde 1 zu 1 von winavr-c umgesetzt  mit timer1 und TCCR1B :
	Code:
	$Clock = 8  
$Baud  = 19200
$Timer1 = Timer,Prescale=1
$Source= On   
 
Dim entfernung As Word 
Dim starttimer1 As Byte 
Const Prescale_1 = 9
DDRD.7=0 ' eingang
DDRD.6=1 ' ausgang
Enable Interrupts
StartTimer1=Prescale_1
Do
PORTD.6=1
WaitUs 2
PORTD.6=0
WaitUs 24
Timer1=0
TCCR1B=StartTimer1	
While PIND.7=1
Wend
entfernung=Timer1
Print entfernung
WaitMs 150
Loop
 mfg pebisoft
						
					
Lesezeichen