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
Lesezeichen