Hallo,

einen Fehler habe ich auch noch gefunden: die Formel zur Berechnung der Entfernung ist laut Datenblatt

d = (Highbyte *256)+Lowbyte, nicht andersherum. Außerdem muss doch das register zum auslesen gewechselt werden?

Ich habe aber auch ein Problem, und zwar, dass die Leitungen SDA und SCL super funktionieren, wenn kein Sensor dranhängt, schließe ich den Sensor an, sind die Leitungen dauerhaft low...

Kann dies an zu groß gewählten Pull-Ups liegen?

Verwenden tue ich auch einen Atmega128, SRF10 und 4,7k Pull-Ups.

Vielen Dank schonmal für Antworten


Hier nochmal mein Code:
Code:
void getDistanceVal_USDS1(void)
{
	unsigned char busy=255, result_highByte=0, result_lowByte=0;
	
	//issue measuring command
	i2c_start_wait(ADDRESS_USDS1+I2C_WRITE);
	i2c_write(W_COMMANDREGISTER);
	i2c_write(MEASURE_CM);
	i2c_stop();
	
	//wait for measure ready
	while (busy==255){
		//while measurement is running firmware reads as 255
		busy = getUSDSstatus(ADDRESS_USDS1);
	}
	
	i2c_start_wait(ADDRESS_USDS1+I2C_WRITE);
	i2c_write(R_DIST_HIGHBYTE); //read register2
	i2c_stop();
	
	i2c_start_wait(ADDRESS_USDS1+I2C_READ);
	result_highByte = i2c_read(0); //read one byte
	i2c_stop();
	
	i2c_start_wait(ADDRESS_USDS1+I2C_WRITE);
	i2c_write(R_DIST_LOWBYTE); //read register3
	i2c_stop();
	
	i2c_start_wait(ADDRESS_USDS1+I2C_READ);
	result_lowByte = i2c_read(0); //read one byte
	i2c_stop();
	
	actualDistance_USDS1 = (int) (result_highByte*256 + result_lowByte); //in globaler Variable speichern
}