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