Hallo allerseits,
Ich werkle schon seit längerem an einer Ultraschall Enfernunsmessung und bin im Roboterwissen auf die Schaltung des Ultraschall - Interfaces von Manf gestoßen, bzw. hat mich besserwessi darauf aufmerksam gemacht. Diese Schaltung hat mir gleich zugesagt und ich habe es einmal ausprobiert, nur leider funktioniert es nicht so richtig.
Das stoppen der Zeit übernimmt ein ATmega48, der zuerst in einer Schleife 16 Perioden des US - Bursts erzeugt, die dann in den Start in Eingang der Ultraschall - Interface Schaltung gehen. Warum kein Timer? Das habe ich schon einmal in einen Thread gepostet, der Timer schafft in Bascom keine 40 kHz.
Dann beginnt das Stoppen der zeit, die dann in der isr des interruptpins umgerechnet und ausgegeben wird.
Das ganze soll starten, wenn per UART ein "go" eintrifft.
So weit so gut.
Nun kommt zwar etwas per UART herein, nur das ist ziemlich unbrauchbar.
Die Erste zahl ist total verrückt, die ist manchmal riesengroß, dann im minus und ich habe bemerkt, dass es einen unterschied macht, wie lange ich mir zwischen dem Go - Schreiben zeit lasse.
Darauf folgen konstant (fast immer, um genau zu sein) 16 Zahlen, die alle fast gleich groß sind, etwa um die 20 - 30, manchmal aber auch größer als 100.
Der Witz an der sache ist, dass dies per UART hereinkommt, egal, ob der Sendewandler angeschlossen ist oder nicht.
Ich habe lange herumprobiert, aber leider ohne erfolg.
Der Code des Atmels hier:
Wäre sehr dankbar, könnte mir jemand sagen, was ich anders machen sollte bzw. wo der Fehler liegt.Code:$regfile "M48def.dat" $crystal = 1000000 $hwstack = 100 $swstack = 100 $framesize = 100 $baud = 2400 Dim Endtime As Long Dim Countperoverflow As Integer Dim Stringuser As String * 10 Dim Countperiodes As Byte Config Timer0 = Timer , Prescale = 1 On Timer0 Isrtimer Enable Interrupts Config Int0 = Rising Enable Int0 Enable Interrupts On Int0 Isr_interrupt Config Portd.3 = Output Portd.3 = 1 Do Input Stringuser If Stringuser = "go" Then '################# den Sendebrust generieren +++++++++ Countperiodes = 0 Do Portd.3 = 0 Waitus 8 Portd.3 = 1 Waitus 8 Countperiodes = Countperiodes + 1 Loop Until Countperiodes > 16 Countperiodes = 0 Portd.3 = 1 '###################################################### 'Warum nur acht us warten? Ich habe das einfach ausprobiert und so kommt man ungefähr auf 42 kHz Enable Timer0 Stringuser = "" End If Loop '###############TimerIsR################## Isrtimer: Countperoverflow = Countperoverflow + 1 Return '######################################### '#########Interrupt################ Isr_interrupt: Disable Timer0 Endtime = Countperoverflow * 256 Endtime = Endtime + Timer0 Print Endtime Endtime = 0 Countperoverflow = 0 Return
Dass die Schaltung des US - Interfaces fehler aufweist, glaube ich eher nicht, ich habe sie durchgeprüft und gemessen, wo es etwas zu messen gibt. Ich kann mich aber natürlich auch täuschen.







 
			
			 
					
					
					
						 Zitieren
Zitieren

Lesezeichen