Richtig, es gibt Lücken, wo der Servokontroller grad mit den Servos beschäftigt ist.
Du brauchst aber keine while(1) schleife, sondern du mußt nur den Error-code prüfen. Nur wenn ein Fehler beim I2C_Start war (kein ACK), dann die Sendung wiederholen.
Ich weiß jetzt nicht, wie und wo der Fleury seinen Status hergibt.
Hat I2C_START () irgendeinen return-code ?
EDIT : hab' ihn schon:
d.h mach folgendesCode:unsigned char i2c_start ( unsigned char addr ) Issues a start condition and sends address and transfer direction. Parameters: addr address and transfer direction of I2C device Return values: 0 device accessible 1 failed to access device
Eben nur, bis ein ACK kommt. das ist in den meisten Fällen höchstens 1-2 malCode:void MoveServo(void) { if (i2c_start(0x68 + I2C_WRITE)) do { } while (i2c_rep_start(0x68 + I2C_WRITE)); i2c_write(0x01); // Command i2c_write(0x01); // Servo Nr1 i2c_write(0x02); i2c_write(0x56); i2c_stop(); }
Lesezeichen