-         

Ergebnis 1 bis 3 von 3

Thema: Probleme bei Ansteuerung eines Ultraschallmoduls

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    03.01.2005
    Beiträge
    9

    Probleme bei Ansteuerung eines Ultraschallmoduls

    Anzeige

    hallo,

    versuche mit dem myAVRUSB-Board folgendes US-Modul anzusteuern:
    http://www.projet.de/produkte-bauteile.html

    und mir die Ergebnisse über RS232 ausgeben zu lassen. Doch leider ist der Erfolg nur mäßig!

    verwende folgendes programm:
    Code:
    $regfile = "m8def.dat"
    $crystal = 3686400
    $baud = 19200
    
    Dim Zeitmessung As Word
    Dim Entfernung As Word
    
    Config Portc.2 = Output
    
    Do
        Portc.2 = 1
        Pulseout Portc , 2 , 500
        Pulsein Zeitmessung , Pinc , 2 , 0
        Zeitmessung = Zeitmessung * 10                          'mal 10 da Pulsein in 10uS Einheiten Ergebnis ermittelt
        Entfernung = Zeitmessung / 58                           'Umrechnen in Zentimeter
        Print "Entfernung: " ; Entfernung ; " cm"
        Wait 1
    Loop
    
    End
    leider scheinen die PULSE-Funktionen von Bascom nicht so zu erfüllen, wie ich es mir denke. kann mir da eventuell jemand auf die sprünge helfen?
    die entfernung beträgt immer 0 cm, da es zu einem overflow in der pulsein-funktion kommt.

    grüße

    webbi

    p.s. vllt sollte das ganze in die software-ecke verschoben werden?!

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.544
    hallo knomic,

    so ein ähnliches problem hatte ich auch schon mal. ich wollte ein ir-signal senden und dann empfangen.

    mein problem, und das ist wahrscheinlich das gleiche wie bei dir, war, dass der µC nicht schnell genug ist!

    häng doch einfach den pin, an dem das teil hängt, an einen interrupt pin (t0) und dann sendest du das signal!
    direkt danach setzt du pin t0 auf eingang und dann müsste normalerweise ein interrupt kommen, der dann in die interruptroutine von t0 springt.
    so würde ich das zumindest machen!

    gruß
    chris

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    03.01.2005
    Beiträge
    9
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •