hallo che,
erstmal danke für deine antwort! hab mich auch entschlossen das ganze via interrupt zu messen. am oszi habe ich erstmal den grundablauf des programmes überprüft, doch leider hapert es jetzt an der automatischen vermessung via interrupts. kannst du mir eventuell dabei helfen?
hier der quellcode:
Code:'######################################################### 'Füllstandsmessung mit Ultraschallsensor USM-18A ' 'Aufgabe: 'Entfernung wird gemessen und in Zentimetern ausgegeben ' ' 'Autor: Micha 'Datum: 11.09.2008 'Version: 0.11 ' 'Changelog: '0.11: Zeitmessung zw. Interrupts integriert '0.1: erste Version, Grundfunktionen der Entfernungsmessung '########################################################## 'Die üblichen Definitionen bei Standardprogrammen auf Miniboard $regfile = "m8def.dat" $crystal = 3686400 $baud = 19200 $hwstack = 32 $swstack = 10 $framesize = 40 Dim Overflow As Integer Dim Zeitmessung As Single Dim Entfernung As Single 'LED1 an PC0 Led1 Alias Portc.0 Config Led1 = Output Led1 = 0 'Timer konfigurieren Config Timer1 = Timer , Prescale = 1 On Timer1 Timer_int 'Timervorgabe = 61536 -> Overflow = Anzahl ms bei 4MHz Quarz Const Timervorgabe = 0 'Wenn der Interrupt INT0 auftritt, dann springe zum Label On_int0 On Int0 On_int0 Nosave 'INT0 auf fallende Flanke Config Int0 = Falling 'PortC.3 als Trigger-Ausgang für Oszimessungen Config Portc.3 = Output Portc.3 = 1 'Globale Interrupts freischalten Enable Interrupts Do Print "Loop Anfang!" 'Low-Puls von 250us um US-Modul zu aktivieren Config Portd.2 = Output Portd.2 = 0 'Timer starten Enable Timer1 Overflow = 0 Toggle Portc.3 Waitus 250 'US-Pin auf Input und Pull-UP setzen Config Portd.2 = Input Portd.2 = 1 Toggle Portc.3 'INT0 einschalten um Echo-Puls zu detektieren Enable Int0 Waitms 50 Print "Loop Ende!" Print "Entfernung: " ; Entfernung ; "m" Loop End On_int0: 'Quick'n'Dirty Interrupt ausschalten um Streuungen nicht zu detektieren Disable Int0 'Timerwert auslesen Zeitmessung = Timer1 Print "Zeit:" ; Zeitmessung Disable Timer1 If Zeitmessung <> 0 Then Print "Overflow" ; Overflow Overflow = Overflow * 65536 Zeitmessung = Zeitmessung + Overflow Zeitmessung = Zeitmessung / 1000 Entfernung = 0.1715 * Zeitmessung End If Toggle Led1 Print "Interrupt!!!" Return Timer_int: Timer1 = Timervorgabe Overflow = Overflow + 1 Return 'Berechnung der Entfernung: s = 0,343*t/2; t in ms -> s in m







Zitieren

Lesezeichen