Ja, da hast natürlich recht... das mit dem Pin hab ich vermurkst beim hin und hertesten.
Hab das angepasst und auch den Prescale mal auf 1 gesetzt.
Das Programm soll ja erstmal ausser sichtbare Werte abzugeben garnix können.
Ich würde mir wünschen, das zumindest im Controllcenter (also über den Print-Befehl) brauchbare werte
angezeigt werden, über die man dann die Entfernung berechnen kann.
Ich muss mir ausserdem noch recht überlegen, wie ich den Wert umgerechnet bekomm auf ein anständiges ergebniss.
Ich hab den eindruck, das das abarbeiten des Programms irgendwie die werte verfälscht.
ich bekomm zwar werte im bereich von grob 0 bis 200... aber die sind so extrem ungenau bzw wechseln in riesigen schritten(stellenweise 30-40).
Edit: Ich hab noch die Zeitmessung im Interrupt umgestellt vom ms auf us... das sollte sicher auch die Messgenauigkeit erhöhen.
Bin mir nur nicht ganz sicher, wielange das abarbeiten der befehle dauert. Das nehm ich aber erstmal als "Tolleranz" hin.
Hier das Ausgebesserte und dokumentierte Programm:
Code:'------------------------------------------------------------------------------- '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- 'Programmname: Sensorabfrage.bas 'Letzte Änderung: 11.11.2012 'Funktion: Abfrage des Ultraschallsensor hc-sr04 'Mikrocontroller: Mega8 ' 'Input: D2 - Echosignal ' 'Output: C0 - Triggersignal ' '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- '------------------------------------------------------------------------------- 'Den Atmega mit den passenden Daten füttern. '------------------------------------------------------------------------------- $regfile = "m8def.dat" 'eingesetzter Mikrocontroller $crystal = 3686400 'eingestellte Taktfrequenz(externes Quarz) $hwstack = 40 'Standardwert $swstack = 32 'Standardwert $framesize = 60 'Standardwert '------------------------------------------------------------------------------- 'Ports/Pins konfigurieren. '------------------------------------------------------------------------------- Config Portc.0 = Output ' Trigger-Signal zum Sensor Config Pind.2 = Input ' Echo-Signal vom Sensor '------------------------------------------------------------------------------- 'Timer/OCR/PWM usw. setzen '------------------------------------------------------------------------------- Config Timer0 = Timer , Prescale = 1 Config Int0 = Rising Enable Int0 Enable Interrupts On Int0 Pulsbeginn ' Wenn auf echo gewartet wird wechselt Echo-Signal auf High für max 200ms '------------------------------------------------------------------------------- 'Variablen '------------------------------------------------------------------------------- Dim Entfernungcm As Long Dim Zeitecho As Long ' Gemessene dauer bis Echo ankommt '------------------------------------------------------------------------------- 'Hauptprogramm '------------------------------------------------------------------------------- Do Timer0 = 0 ' Timer und Triggerport kurz auf 0 setzen Portc.0 = 0 Delay Portc.0 = 1 ' Triggerport für 10us Highpegel um messung zu starten Waitus 15 Portc.0 = 0 Print Zeitecho ' Ausgabe der gemessenen Dauer Zeitecho = 0 Waitms 50 'Messintervall bzw Pause einstellen Loop End Pulsbeginn: 'Timer0 = 0 ' bei Pulsebeginn Timer auf 0 setzen und starten Start Timer0 Do Waitus 10 Loop Until Pind.2 = 0 ' warten bis Echo signal ankommt, dann wechselt der Pegel auf Low 'If Timer0 < 200 Then ' wenn kein echo gemessen wird bleibt der pegel 200ms auf High Zeitecho = Timer0 ' Gemessene Dauer an Variable übergeben 'Else 'Zeitecho = 0 ' wenn kein echosignal gemessen wird Variable auf 0 setzen bzw. lassen 'End If Stop Timer0 Return







Zitieren


Lesezeichen