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