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 }







Zitieren

Lesezeichen