Hola!
Estoy trabajando con mi robot proyecto final de carrera, el cuál va a tener esta vez 8 sensores SRF02, compartiendo el mismo bus I2C. He conseguido ponerlos todos en marcha, de forma que va leyendo cada sensor secuencialmente. Osea, va leyendo el sensor 0,1,2,3,4,5,6,7,0,1,2,3,4,5,...
Pero ocurre, que a partir de un determinado momento, de pronto ya no lee ningun sensor más. Y segun he comprobado con el osciloscopio, algun dispositivo está "forzando" el bus I2C a 0V.
Alguien tiene experiencia con estos sensores en array en un unico bus? Algo a tener en cuenta?
while (TRUE)
{
//Vamos rotando la secuencia (aunque SEC_CANALES define la secuencia)
canal++;
if(canal==8)canal=0;
// ***** FASE DE ENVIO DE ORDEN DE LECTURA *****
switch(SEC_CANALES[canal])
{
case 0x00: sensor_number = 0xe0; break;
case 0x01: sensor_number = 0xe2; break;
case 0x02: sensor_number = 0xe4; break;
case 0x03: sensor_number = 0xe6; break;
case 0x04: sensor_number = 0xe8; break;
case 0x05: sensor_number = 0xea; break;
case 0x06: sensor_number = 0xec; break;
case 0x07: sensor_number = 0xee; break;
}
//***** DELAY 90ms ENTRE LECTURAS , HOST USB DE MIENTRAS
Delay_Ms(200);
i2c_start();
i2c_write(sensor_number);
i2c_write(0x00);
i2c_write(0x51); //Nueva lectura, resultado en CM
i2c_stop();
Delay_Ms(70);
//***** FASE DE LECTURA DEL SENSOR *****
//Notificar la direccion a leer
i2c_start();
i2c_write(sensor_number);
i2c_write(0x02);
sensor_number++;//pasar a modo read
//Leer
i2c_start(); //Restart
i2c_write(sensor_number); //Enviar direccion
sensor_value_H = i2c_read(1); //Leer,con ACK para recibir siguiente
sensor_value = i2c_read(0); //Leer,con NACK pues no queremos mas datos
i2c_stop();
DISTANCIAS[canal]=make16(sensor_value_H,sensor_value);
}
Muchas gracias