Hallo, da ich es immer gut finde, am Ende eines Threads auch eine Lösung stehen zu haben: Ich habe den Fehler gefunden:
Das Problem war in der while-Schleife, in der ich auf das Ende der Messung warte:
Code:
//wait for measure ready
while (busy==255){
//while measurement is running firmware reads as 255
busy = getUSDSstatus(ADDRESS_USDS1);
}
hier muss auf jeden Fall ein delay rein, anscheinend verschluckt sich sonst der Sensor. richtig sollte es also so lauten:
Code:
//wait for measure ready
while (busy==255){
_delay_ms(1); //wait 1ms
//while measurement is running firmware reads as 255
busy = getUSDSstatus(ADDRESS_USDS1);
}
Der Vollständigkeit halber nochmal die getUSDSstatus-Funktion (USDS:ultra sonic distance sensor):
Code:
unsigned char getUSDSstatus(unsigned char address)
{
unsigned char busy=0;
//PORTA ^= BIT4; //TODO: remove debugging LED
i2c_start_wait(address + I2C_WRITE);
i2c_write(R_FIRMWAREREGISTER);
i2c_rep_start(address + I2C_READ);
busy = i2c_readAck(); //read one byte
i2c_stop();
return busy;
}
Gruß, Moe
Lesezeichen