Hey... ich habe ein MyAVR board und möchte die Werte vom Ultraschallsensor erstmal testweise abfragen.
Bin im Bereich microcontroller eher noch Blutiger Anfänger und versuch durch "Probieren" mir das
eine oder andere Beizubringen.
Dazu hab ich ein kurzes Programm aufgesetzt.
Leider hat sich irgendwo ein Fehler eingeschlichen und ich find den nicht.
Generell ist es so gedacht, das bei steigender Flanke vom Echo in einem Interrupt der Timer gestartet wird
und mir die Länge des Echos als Zeitwert ans Programm übergibt.
Könnt ihr bitte mal durchschauen, was ich da falsch hab.
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
Config Pind.2 = Input
'-------------------------------------------------------------------------------
'Timer/OCR/PWM usw. setzen
'-------------------------------------------------------------------------------
Config Timer0 = Timer , Prescale = 1024
Config Int1 = Rising
Enable Int1
Enable Interrupts
On Int1 Pulsbeginn
'-------------------------------------------------------------------------------
'Variablen
'-------------------------------------------------------------------------------
Dim Entfernungcm As Long
Dim Zeitecho As Byte
'-------------------------------------------------------------------------------
'Hauptprogramm
'-------------------------------------------------------------------------------
Do
Timer0 = 0
Portc.0 = 0
Delay
Portc.0 = 1
Waitus 15
Portc.0 = 0
Print Zeitecho
Waitms 150
Loop
End
Pulsbeginn:
Timer0 = 0
Start Timer0
Do
Waitms 1
Loop Until Pind.2 = 0
If Timer0 < 200 Then
Zeitecho = Timer0
Else
Zeitecho = 0
End If
Stop Timer0
Return
Lesezeichen