- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 15

Thema: Abfrage Ultraschallsensor HC-SR04 unter BASCOM

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #11
    RN-Premium User Fleißiges Mitglied
    Registriert seit
    19.05.2012
    Ort
    Sigmaringen
    Beiträge
    169
    So... da ich dann gestern abend in der Wanne den kopf nicht frei bekommen hab
    bin ich noch dazu gekommen den Programmansatz von Searcher umzuwandeln in ein Laufendes Programm.

    Sieht jetzt so aus:
    Code:
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    'Programmname:    Sensorabfrage.bas
    'Letzte Änderung: 13.11.2012
    'Funktion:        Abfrage des Ultraschallsensor hc-sr04
    '                 und Ausgabe über "Print"
    'Mikrocontroller: Mega8
    '
    'Input:           D2 - Echosignal
    '
    'Output:          C0 - Triggersignal
    '
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    '-------------------------------------------------------------------------------
    'Den Atmega mit den passenden Daten füttern.
    '-------------------------------------------------------------------------------
    $regfile = "m8def.dat"                                      'eingesetzter Mikrocontroller
    $crystal = 8000000                                          'eingestellte Taktfrequenz (8MHz)
    $hwstack = 100                                              'Standardwert
    $swstack = 100                                              'Standardwert
    $framesize = 100                                            'Standardwert
    '-------------------------------------------------------------------------------
    'Ports/Pins konfigurieren.
    '-------------------------------------------------------------------------------
    Config Portc.0 = Output                                     ' Trigger-Signal zum Sensor
    Config Pind.2 = Input                                       ' Echo-Signal vom Sensor
    
    '-------------------------------------------------------------------------------
    'Timer/OCR/PWM/INT usw. setzen
    '-------------------------------------------------------------------------------
    Config Timer1 = Timer , Prescale = 8                        ' ergibt 1.000.000 ticks/sekunde
    Config Int0 = Change                                        ' Interrupt bei wechselnder Flanke am Echosignal starten
    On Int0 Echowechsel                                         '
    Enable Int0                                                 ' Wenn auf Echo gewartet wird wechselt Echo-Signal auf High
    Enable Interrupts                                           '
    
    '-------------------------------------------------------------------------------
    'Variablen
    '-------------------------------------------------------------------------------
    Dim Messungstarten As Bit                                   ' Zeigt an, ob Messung gestartet werden soll
    Messungstarten = 1
    Dim Messergebniss As Long                                   ' Ergebniss der Messung in us
    Messergebniss = 0
    Dim Messungbeendet As Bit                                   ' Zeigt an, ob Messung beendet ist
    Messungbeendet = 0
    Dim Entfernung As Long                                      ' Entfernung in mm
    Entfernung = 0
    Dim Kalibrierwert As Integer                                ' Zum genauen einstellen
    Kalibrierwert = 0
    
    '-------------------------------------------------------------------------------
    'Hauptprogramm
    '-------------------------------------------------------------------------------
    Do
       If Messungstarten = 1 Then                               ' Abfrage, ob Messung gestartet werden soll
       Waitms 20
       Portc.0 = 1                                              ' Impuls von 10us an Triggerport senden
       Waitus 10
       Portc.0 = 0
       Messungbeendet = 0
       Messungstarten = 0
       End If
    
       If Messungbeendet = 1 Then                               ' Berechnung des Ergebniss, wenn Messung beendet ist
       Entfernung = Messergebniss + Kalibrierwert
       Entfernung = Entfernung * 172
       Entfernung = Entfernung / 1000                           ' Ergebniss in mm
    
       Print Entfernung                                         ' Ausgabe des Ergebniss
       Waitms 300                                               ' Pause zwischen Messungen (bessere lesbarkeit)
    
       Messungstarten = 1                                       ' neue Messung starten
       End If
    
    
    Loop
    
    End
    
    '-------------------------------------------------------------------------------
    'Interrupt
    '-------------------------------------------------------------------------------
    
    Echowechsel:                                                ' Interrupt startet bei Signalwechsel am Echopin
       If Pind.2 = 1 Then                                       ' Wenn Pin zu High wechselt soll Timer1 Zeit zu messen
          Timer1 = 0
          Start Timer1
        Else                                                    ' wenn Pin zu LOW wechselt, messung beendet und Wert in Variable speichern
          Messergebniss = Timer1                                '  Wert in Variable speichern
          Messungbeendet = 1                                    ' Anzeigen, das Messung beendet ist
       End If
    
    Return
    Direkt zum Ergebniss des Timers hab ich noch einen Kalibrierwert gesetzt und der scheint soweit auch schon zu passen.
    Ich hab 2 identische Sensoren hier und beide liefern mir exakt die selben werte.
    Wie es sich bei entfernungen grösser als 1m verhält muss ich noch testen.

    Und ja... der Atmega8 läuft jetzt mit 8MHz... und ich hab auch die fusebits so gestellt.

    Späther soll das ganze mal mit 2-3 Sensoren auf ein Fahr-Chassis kommen.
    Da werd ich vermutlich (um Pins zu sparen) die Sensoren abwechselnd messen lassen.
    Das sollte von der Geschwindigkeit gut ausreichen. Soll ja kein Rennwagen sein.

    Was mir in deinem Code aufgefallen ist:

    Der Timer wird nur auf 0 gesetzt... Startet der automatisch wieder ?
    und die Flags hab ich als normale Variablen gemacht... so kann ich sie schnell ändern und
    im Zweifelsfall mehrere verschiedene Zustände übergeben.

    Vielen Dank für eure Tips und Hilfestellung.

    Gruss,... JoeM
    Geändert von JoeM1978 (14.11.2012 um 20:35 Uhr)

Ähnliche Themen

  1. Ultraschallsensor selbst bauen (Bascom)
    Von Janigut im Forum Elektronik
    Antworten: 5
    Letzter Beitrag: 26.04.2011, 16:58
  2. Ultraschallsensor HC-SR04 Probleme ungenauigkeit
    Von anfaenger201 im Forum Sensoren / Sensorik
    Antworten: 4
    Letzter Beitrag: 04.08.2010, 15:06
  3. pin abfrage mit bascom
    Von Che Guevara im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 05.09.2008, 13:59
  4. UART Sendepuffer-Abfrage mit Bascom
    Von Heideltrudel im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 03.08.2007, 22:12
  5. wav out mit PWM unter bascom?
    Von sebastian.heyn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 18
    Letzter Beitrag: 10.06.2005, 10:02

Stichworte

Berechtigungen

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

12V Akku bauen