- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 7 von 7

Thema: SRF08 Ultraschallsensoren an CC2

  1. #1

    SRF08 Ultraschallsensoren an CC2

    Anzeige

    Praxistest und DIY Projekte
    Moin!

    Ich habe mir nun die neuen Ultraschall-Sensoren SRF08 gekauft,
    da ich ja ein paar Problemchen mit dem Messen der Zeit (mit der C-Control) bei den SRF04's hatte.

    Daher nun meine Frage, ob jemand schon diese Sensoren zufriedenstellend zum laufen
    bekommen hat?!

    Bei mir funktioniert die Messung denke ich, aber irgendwie kommen nicht ganz die richtigen werte raus. Ich denke beim Low Byte sind die werte mehr oder weniger sinnvoll, man kann eine änderung feststellen. Nur beim high byte ist das komisch, da ist die Ausgabe immer 0...

    Ich verwende folgenden Quellcode:
    Code:
    byte buffer[2];
    int range;
    string s;
    
    i2c.init();
    lcdext.init();
    
    loop
    {
    i2c.start(0xE0);
    i2c.write(0);
    i2c.write(0x51);
    i2c.stop();
    
    sleep 70;
    
    i2c.start(0xE0);
    i2c.write(2);
    i2c.start(0xE1);
    buffer[0]=i2c.readlast();
    i2c.stop();
    
    i2c.start(0xE0);
    i2c.write(3);
    i2c.start(0xE1);
    buffer[1]=i2c.readlast();
    i2c.stop();
    
    range = mem.getint(buffer,0);
    
    lcdext.clear();
    s="";
    str.putint(s,range);
    
    lcdext.print(s);
    Kann mir jemand den Fehler sagen, oder mal seinen (funktionierenden) Quellcode schicken,
    falls ihr auch schon mit den Sensoren herum experimentiert habt?!

    Wäre echt nett!!

    Viele Grüße Floyd

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.11.2003
    Ort
    Dresden
    Alter
    60
    Beiträge
    409
    Hallo Floyd,

    Daher nun meine Frage, ob jemand schon diese Sensoren zufriedenstellend zum laufen bekommen hat?!
    ja ich

    Das angehängte Programm bedient 3 Module, die anderen lassen sich aber problemlos raustreichen und gibt die Werte auf ein LCD aus.
    Mit dabei sind auch Funktionen zum ändern der I2C-Adresse des Moduls.

    Allerdings verwende ich die geänderten I2C-Funktionen von cc2net.de.

    HTH und Viele Grüße
    Jörg

    Code:
    const addrSRFFrontLeft = 0xE0;
    const addrSRFFront = 0xE2;
    const addrSRFFrontRight = 0xE4;
    
    string s;
    int val1, val2, val3;
    
    function ModulWrite (byte addr, byte reg, byte Val)
    {
      i2c.cstart (addr);
      i2c.write (reg);  
      i2c.write (Val);
      i2c.stop ();
    }
    
    function ModulRead (byte addr, byte reg) returns byte
    {
      byte val;
      i2c.cstart (addr);
      i2c.write (reg); 
    //  i2c.stop ();
      i2c.start (addr+1);
      val = i2c.readlast();
      i2c.stop();
      return val;
    }
    
    function ModulReadWord (byte addr, byte reg) returns int
    {
      int val;
      i2c.cstart (addr);
      i2c.write (reg);
    //  i2c.stop ();
      i2c.start (addr+1);
      val = i2c.read();
      val = val << 8;
      val = val + i2c.readlast();
      i2c.stop();
      return val;
    }
    
    function GetVersion (byte addr) returns byte
    {
      return ModulRead (addr, 0);
    }
    
    function SetAddress (byte addrSrc, byte addrTarg)
    {
      i2c.cstart (addrSrc);
      i2c.write (0);  // Register 0 Command Register
      i2c.write (0xa0);  // 1. Byte Sequ.
      i2c.start (addrSrc);
      i2c.write (0);  // Register 0 Command Register
      i2c.write (0xaa);  // 2. Byte Sequ.
      i2c.start (addrSrc);
      i2c.write (0);  // Register 0 Command Register
      i2c.write (0xa5);  // 3. Byte Sequ.
      i2c.start (addrSrc);
      i2c.write (0);  // Register 0 Command Register
      i2c.write (addrTarg);
      i2c.stop();
    }
    
    function Measure ()
    {
      ModulWrite (0, 0, 0x51); // Messung auslösen (broadcast)
      sleep (70);
      val1 = ModulReadWord (addrSRFFrontLeft, 2);
      val2 = ModulReadWord (addrSRFFront, 2);
      val3 = ModulReadWord (addrSRFFrontRight, 2);
    }
    
    thread main
    {
      lcd.clear();
      s = "";
      str.putint (s, GetVersion (addrSRFFrontLeft));
      lcd.print(s, str.length(s));
      sleep 1000;
      s = s + " ";
      lcd.clear();
      str.putint (s, GetVersion (addrSRFFront));
      lcd.print(s, str.length(s));
      sleep 1000;
      s = s + " ";
      lcd.clear();
      str.putint (s, GetVersion (addrSRFFrontRight));
      lcd.print(s, str.length(s));
      sleep 5000;
      loop
      {
        Measure ();
        lcd.clear();
        s = "";
        str.putint (s, val1);
        s = s + " ";
        str.putint (s, val2);
        s = s + " ";
        str.putint (s, val3);
        lcd.print(s, str.length(s));
        sleep 500;
      }
      sleep 5000;
      lcd.clear();
      quit 1;
    }

  3. #3
    Moin Jörg,

    danke für das Programm! Werde es gleich mal ausprobieren!

    Wo ich dann gleich dabei bin, hast du auch ein Programm zum Auslesen der SRF04-Sensoren mit der CC2 (in cm oder m Ausgabe)?
    Das wäre echt super perfekt!

    Vielen dank schonmal!

    mfg Floyd

    P.S.: @Jörg: Haste die jufo-Arbeit schon gelesen?

  4. #4
    PS: @Jörg: Warum ist beim auslesen 2x das i2c.stop ausdeklariert? Hat das einen besonderen Sinn?

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.11.2003
    Ort
    Dresden
    Alter
    60
    Beiträge
    409
    Hallo Floyd,

    Wo ich dann gleich dabei bin, hast du auch ein Programm zum Auslesen der SRF04-Sensoren mit der CC2 (in cm oder m Ausgabe)?
    ne habe ich leider nicht. Allerdings muss man hier wahrscheinlich was tricksen, da die Auflösung der CC2 Timer nicht sonderlich hoch ist.

    Warum ist beim auslesen 2x das i2c.stop ausdeklariert? Hat das einen besonderen Sinn?
    IIRC (liegt schon eine Weile her das ich das verbrochen habe) hat es auch funktioniert als das i2c.stop noch drin war, laut Beschreibung gehört es aber nicht rein.

    P.S.: @Jörg: Haste die jufo-Arbeit schon gelesen?
    Ich habe sie mal überflogen, im Moment (Messevorbereitung) aber wirklich keine Zeit mich da richtig reinzudenken. Wird aber nachgeholt.

    Viele Grüße
    Jörg

  6. #6
    Gast
    Moin Jörg,
    lass dir Zeit mit der Arbeit, aber die ist eigentlich ganz gut geworden.

    Gruß
    Johannes

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    22.11.2003
    Beiträge
    459
    Hm, war nicht eingeloggt...
    relaunched: http://www.mindrobots.de algorithms for intelligent robots

Berechtigungen

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

12V Akku bauen