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







Zitieren


Lesezeichen