Autor Tema: Problema con array de sensores SRF02 en mismo bus I2C  (Leído 2448 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
Problema con array de sensores SRF02 en mismo bus I2C
« en: 04 de Junio de 2009, 07:10:00 »
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?

Código: [Seleccionar]
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


 

anything