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 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.
Lesezeichen