-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 30

Thema: SRF05 Quelltext gesucht

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    21.04.2010
    Beiträge
    31

    SRF05 Quelltext gesucht

    Anzeige

    Hallo,
    brauche funktionierenden Quelltext für SRF05 Ultraschallsensor an einem Atmega32.
    Bitte um Hilfe!

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Moin moin.

    http://www.shop.robotikhardware.de/s...roducts_id=133

    Da kannst Du das Datenblatt mit Anleitung und Beispiele
    runterladen.

    Gruß Richard

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Du hast doch in "SRF05: Abfrage, Berechnung; Ergebnis immer 0" schon mal danach gefragt; da ist auch ein voll funktionsfähiger Code für nen Mega8 von mir. Den auf Mega32 umzubauen ist wirklich keine Zauberei.
    #ifndef MfG
    #define MfG

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    21.04.2010
    Beiträge
    31
    Ja, habe ich! Aber du wolltest mir nicht allzu viel verraten.
    Nein, wirklich, habe das mit den Interrupts nicht hingekriegt....

    Mit dem Beispielprogramm in Bascom scheint es zu funktionieren, es piepst! Aber über welche RS232-Schnittstelle gibt er das Ergebnis aus? Wie schließe ich das an?

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Ich glaube nicht das Dir jemand alles vorkaut. RN Wisssen, Bascom
    Demos samples/Serial...lesen und testen. Zur Verbindung mit dem PC
    brauchst Du aber einen RS232 Wandler! mit den Simulator von Bascom
    geht es auch erst einmal. Einfach den Wert mittels Print ausgeben und im Simulator anschauen. Das solltest Du mir möglichst vielen Bascom Beispielen machen, das Bildet! Im Bascom Quellcode ganz oben ein
    $sim einfügen, sonst braucht der Simulator gelegentlich ewig!

    Viel Spaß beim Basteln.

    Gruß Richard

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Naja was heisst nicht zu viel verraten... es steht eigentlich alles da.
    Die #defines in der .h so anpassen, dass sie zur Pinbelegung von dir passen. Ebenso der Interrupt-Name und dessen Register.
    Der Result-Pin muss ein interruptfähiger Pin sein, der Trigger-Pin kann irgendeiner sein.
    Diese Änderungen musst sowieso du selbst machen, da nur du weisst, wo was bei dir angeschlossen ist.

    Was genau ging denn bei dem Interrupt nicht?
    #ifndef MfG
    #define MfG

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    21.04.2010
    Beiträge
    31
    Danke für eure Antworten!

    Wusste nicht was ich da an den Werten ändern soll... Wofür braucht man die Interrupts in diesem Fall überhaupt?

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Die Interrupts werden zur Zeitmessung des Echos benötigt. D.h. auch jeder andere Code wird auch Interrupts verwenden. Darum muss der Interrupt auch auf beide Flanken reagieren; Steigend: Messung starten. Fallend: Messung stoppen und Laufzeit berechnen.
    #ifndef MfG
    #define MfG

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    26
    Beiträge
    1.192
    Hätte noch eine Lösung ohne Interrupts.
    Im 2.Modus ("Single pin for both Trigger and Echo").
    Müsste prozessorunabhängig sein
    für 16Mhz geschrieben

    Habe meinen Code für deinen Pin ADC2 = PA2 (Atmega32)angepasst.

    Code:
    //Auszug aus ibex_header_v117.h
    //(c) Bernhard Stiehle 2008-2010
    //***********************************************//
    // INT USONIC
    // liefert den Abstand des Ultraschallsensors
    // in Zentimetern. Es muss die Type SRF05 sein.
    // Rueckgabewert -1 = Modul reagiert nicht/ außerhalb Bereich
    //***********************************************//
    int usonic()
    {
    
     int ustime=0;  //Eine Variable bitte ... danke !
     int failure=0; //Sicherheit
     
     cbi(DDRA,2);	        //Anschluss als Eingang
     cbi(PORTA,2);        //Pull-ups sicherheitshalber ausschalten
     
     sbi(DDRA,2);	        //Anschluss als Ausgang
     cbi(PORTA,2);   		//Low-Pegel ausgeben
     usleep(1);		    	//Wartezeit
     
     sbi(PORTA,2);		    //High-Impuls ausgeben (-> Sensor misst)
     usleep(1);			    //Warten
     cbi(PORTA,2);		    //Impuls Ende
     
     cbi(DDRA,2);	        //Anschluss als Eingang
     cbi(PORTA,2);		    //Pull-ups sicherheitshalber ausschalten
     usleep(1);			    //warten
     
     
     while( !(PINA & 4) )  //warten, bis der Sensor sein Signal
     {                      //zurueckgibt (warten solange low)
      asm volatile("nop");
      asm volatile("nop");
      failure++;            //Sicherheit: wenn kein Signal nach bestimmter Zeit kommt
      if(failure>2500)    
      {return -1;}         //dann -1 zurueck liefern (= kein Modul angeschlossen)
     }
    
     failure=0; 
     
     while(PINA & 4)       //Signal hat begonnen (=high)
     {
      ustime++;             //Dauer des Impulses messen
      usleep(1);            //Die Variable will eine Einheit (hier 0,1 ms)
      failure++;            //Sicherheit: wenn Signal nach bestimmter Zeit nicht endet
      if(failure>5000)
      {return -1;}         //dann -1 zurueck liefern (= kein Modul angeschlossen)
     }
     
     msleep(35);            //Wartezeit (Echo soll verhallen, sonst Fehlmessung)
     
     return int( float(ustime)*float(1.408) );  //Rueckgabewert in Zentimeter, bitte !
    }
    usleep(1) habe ich für meine Programmierung als 100 Mikrosekunden = 0,1ms definiert, bitte nicht wundern, wirst du noch durch einen anderen Wartebefehl ersetzen müssen.
    Die Wartezeiten sind großzügig gewählt.
    PINA & 4 ist gewollt, auch wenn der Pin PA2 heißt. (2 hoch 2=4)

    Das Ausführen dieser Funktion kann den Programmablauf deutlich verlangsamen, da das Programm wirklich bis zum Ende der Messung wartet.

    wieso so viele themen eröffnen?
    http://www.roboternetz.de/phpBB2/viewtopic.php?t=54475

    Gruß
    Bernhard

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    21.04.2010
    Beiträge
    31

    SRF05 Quelltext gesucht

    Danke für deine Hilfe Bernhard! Das werde ich gleich ausprobieren!

    Dieses Thread ist bissl älter, da ging's um das Anschließen des Sensors, halt ein anderes Thema.
    Wollte kein Chaos im Forum verunstalten...

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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