Hallo alle,

ich habe meine Probleme, aktuell mit dem SRF02, meinem Englisch und der Bedienungsanleitung des SRF02. Dort steht nämlich zu Checking for Completion of Ranging:
Zitat Zitat von robot-electronics-co-uk
... ... Therefore, if you try to read from the SRF02 ... then you will get 255 (0xFF) whilst ranging ... As soon as the ranging is complete ... its not 255 (0xFF) anymore ... ...
Also programmiere ich unbedarft:
Code:
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//      Messung starten auf Sensor Sadd
// - - - - - - - - - - - - - - -
  if (!(i2c_start( Sadd + I2C_WRITE ))) // Slave bereit zum schreiben?
  {                                     //   dann Werte schreiben
    i2cdmy  =  i2c_write (  00 );       // Buffer Startadresse setzen     
    i2cdmy  =  i2c_write ( 0x51 );      // Startbefehl SRF02
               i2c_stop();              // Zugriff beenden
  }                                     //
  else                  // Weiter mit if (!(i2c_start( Sadd + I2C_WRITE )))
  {                                     //
    uputs0("\r\n\t## SRF_rdat\r\n");
    wms ( 1000);
    return 9901;                        // Return mit Fehlercode
  }                     // Ende if (!(i2c_start( Sadd + I2C_WRITE )))

  cli(); tmr1    =   0 ; sei();

  while ( 1 )
  {                             //
  i2c_start( Sadd + I2C_WRITE );  // Starte Slave lesen
  i2c_write( 0x00 );               // write address = das angepeilte Byte
        i2c_stop();             //

  i2c_start ( Sadd + I2C_READ );        // Slave bereit zum Lesen?
  byte_0  = i2c_readAck();      // Byte 0 lesen... ab laddr = 0
  byte_1  = i2c_readNak();      // Byte 1 lesen... NAK
        i2c_stop();             //

  if ( byte_0 == 0 ) break;    // Messung beendet
  }                     // Ende while ( 1 )

  cli(); Timer1  =  tmr1; sei();
  uputs0 ("\r\t####\t Timer1 [tupsi] =  "); uputs0u ( Timer1 );

  uputs0 ("\r\tbyte_0 =  "); uputs0u ( byte_0 );
... um die Messung abzuwarten UND um mir zu Testzwecken den Timerwert für die Messdauer ausgeben zu lassen. Pustekuchen. Je nach Abwandlung des Codes : der Controller hängt sich auf, eine Variation der Abfrage ergibt den WErt 6 - vermutlich die Versionsnummer (so stehts in der Dokumentation) - aber eine Abfrage z.B. auf 255 führt zum Koma. Wenn ich in einer Variante die Abfrage hinkriege, dann steht der Timer auf 0, das heißt bei diesem Timer: Zeitbedarf <50 µs -- bei einem Messabstand von rund 150 cm nicht glaubhaft weil viel zu wenig. Ich kann also den SRF02 nicht ohne Timer betreiben, wie es in der Bedienungsanleitung in Aussicht gestellt wird.

Fragen:
Erkennt jemand meine Fehler?
Hat jemand ne Lösung mit der er den Busystatus - oder den Readystatus - eines SRF02 abfragen kann?

Danke im Voraus für die Hilfe.