Hi Leute.
Ich habe die Schaltung mal nachgebaut, da sie doch recht klar strukturiert ist.
Das C Programm habe ich nach Bascom adaptiert (siehe Listing.)
Aber irgendwie habe ich nur Erkennung, wenn ich die beiden US Kapseln zueinanderhalte, dann kann ich auf dem Display eine Entfernung in Abhängigkeit vom Kapselabstand lesen. Wenn ich versuche eine Reflexion zu erhalten (Kapseln parallel), kommt nichts bei raus, obwohl der Untergrund Schall reflektieren müsste.
Evtl. kann mir ja jemand auf die Sprünge helfen. Könnte ein doofer Fehler sein, habe nur gerade ein Brett vorm Kopf.
Danke,
Jango
Code:$regfile = "m32def.dat" $crystal = 8000000 ' ... Zeug fürs LCD weggelassen Declare Sub Us_burst Declare Sub Clear_burst Declare Sub Enable_ain Const Soundspeed_per_tick = 4 ' 4.3mm Both Ways Per Tick Const Timercount = 100 ' $crystal / 80000 Preload For Timer Const Bursts = 16 ' Number Of Half Periods To "ping" 'Toggle The Ports When Reached 8 000 000 / 80 000 = 100 !!! Config Timer0 = Timer , Prescale = 1 Enable Timer0 On Timer0 Isr_timer0 Timer0 = 256 - Timercount Config Aci = On , Compare = Off , Trigger = Rising On Aci Isr_aci ''' register unsigned char timer_ticks asm("r10"); /* ticks since start of ping */ Dim Echo_ticks As Word ' /* ticks when the echo was received */ Echo_ticks = 0 Dim Distance As Word Distance = 0 Dim Timer_ticks As Word Timer_ticks = 0 Config Pind.6 = Output Config Pind.7 = Output Config Pinb.2 = Input ' AIN bei MEga32 Config Pinb.3 = Input ' AIN bei MEga32 Enable Interrupts Do Echo_ticks = 0 Timer_ticks = 0 Call Us_burst Enable Aci While Timer_ticks < 500 $asm nop $end Asm Wend Call Clear_burst Distance = Echo_ticks * Soundspeed_per_tick 'in mm Locate 2 , 1 Lcd Distance ; " mm " Waitms 10 Loop End ' Interrupt Handler for Timer/Counter 0 Isr_timer0: Incr Timer_ticks If Timer_ticks <= Bursts Then Toggle Portd.6 Toggle Portd.7 End If Timer0 = 256 - Timercount Return Sub Us_burst Portd.6 = 0 'on Portd.7 = 1 'off Timer0 = 256 - Timercount Start Timer0 End Sub Sub Clear_burst 'Stop it Stop Timer0 Portd.6 = 0 'off Portd.7 = 0 'off End Sub Isr_aci: Echo_ticks = Timer_ticks Disable Aci Return







Zitieren

Lesezeichen