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:
Der Vollständigkeit halber nochmal die getUSDSstatus-Funktion (USDS:ultra sonic distance sensor):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); }
Gruß, MoeCode: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; }







Zitieren

Lesezeichen