Hi!
Ich hab auch so meine Probleme mit dem SRF02, ich hab ihn per I2C an einen modifizierten Asuro gehängt. Und ich arbeite wie bad_american mit dem I2C Lib von Peter Fleury. Doch bei mir will er auch nicht richtig.
Ich schaffe es, die Messung zu starten (leuchtet kurz rot), doch er bockt beim abfragen der Werte herum.
Ich hab die Anschlüße jetzt nicht von dem "bösen" Flussmittel befreit, da ich mir beim besten Willen nicht vorstellen kann, dass das Flussmittel die übertragung stört.
Ich vermute eher, dass es an der Software, aber ich finde den Fehler nicht:
Code:
#define I2C_ADDRESS_SONAR 0xE0
unsigned int get_distance(void)
{
unsigned int cdistance = 0;
if(!start_i2c(I2C_ADDRESS_SONAR+I2C_WRITE))
{
i2c_write(0); //Set register
i2c_write(0x51); //Execute ranging command (in cm)
i2c_stop(); // set stop conditon = release bus
Msleep(70); //Wait for ranging to be completed
start_i2c(I2C_ADDRESS_SONAR+I2C_WRITE);
i2c_write(2); //Set register to high ranging byte
i2c_stop();
start_i2c(I2C_ADDRESS_SONAR+I2C_READ);
cdistance += i2c_readAck();
cdistance <<= 8;
i2c_stop();
start_i2c(I2C_ADDRESS_SONAR+I2C_WRITE);
i2c_write(3); //Set register to high ranging byte
i2c_stop();
start_i2c(I2C_ADDRESS_SONAR+I2C_READ);
cdistance += i2c_readAck();
i2c_stop();
}
return cdistance;
}
unsigned char start_i2c(unsigned char addr)
{
unsigned char ret = i2c_start(addr);
if ( ret )
{
i2c_stop();
errorMessage(2, "I2C Device not found", 15);
}
return ret;
}
Wäre schön wenn ihr mir helfen könntet.
MFG
BWA
Lesezeichen