Moin!
Ich habe mal eine Frage zur oben genannten Bibliothek:
Ich steuere mit einem Mega32 zwei SFR02 Ultraschallsensoren an. Ich möchte aber nicht nach dem Start der Messung 65 ms warten, sondern nur so lange, bis die Messung fertig ist. Leider steht im Datenblatt nur ein Beispiel für Bascom drin, aber da scheint mir eine Eigenart des Bascom-I2C genutzt zu werden. Wenn ich mir aber die Doku zu 'i2c_start_wait' anschaue, dann steht da was von 'ack polling' bei einem 'busy device'. Das wäre ja genau das, was ich brauche, aber wie mache ich das denn konkret, dieses 'ack polling'?? Es gibt da eine auskommentierte Zeile in der 'i2c_start_wait()', aber deren Sinn erschließt sich mir leider nicht.....
Versucht habe ich schon folgendes, funktioniert aber nicht.
Zuverlässig funktioniert es bisher nur, wenn ich halt nach dem Start der Messung 65ms warte....
Code:
unsigned int read_us(unsigned char address)
{
unsigned char lowbyte,highbyte;
unsigned int distance;
i2c_start_wait(address+I2C_WRITE);
while (i2c_write(0)); // Befehlsregister '0'
while (i2c_write(81)); // Messung in cm starten
i2c_stop();
i2c_start_wait(address+I2C_WRITE);
while (i2c_write(2)); // Register '2', highbyte der Entfernung
i2c_stop();
i2c_start_wait(address+I2C_READ);
highbyte = i2c_readAck();
lowbyte=i2c_readNak();
distance = (highbyte*256)+lowbyte;
i2c_stop();
return distance;
}
Danke schonmal!!
MfG Volker
Lesezeichen