Tengo un pequeño problema para descubrir cómo funciona el controlador Harmon i2c. Tratar de establecer una conexión entre PIC32 y un sensor barométrico MS5637 ha sido una pesadilla para mí.
Desde la hoja de datos del sensor en la página 9 podemos ver que hay una secuencia de reinicio y después que un simple baile leyó. A continuación puede ver qué estoy tratando de hacer, pero no estoy del todo seguro de qué debo hacer para que esta comunicación funcione.
Usando MHC, el controlador i2c se inicializa dentro de System Initialize y luego está el código de mi aplicación.
void send(uint8_t cmd){
//Start i2c
DRV_I2C0_MasterStart();
//Write address write
DRV_I2C0_ByteWrite(0xEC);
DRV_I2C0_WaitForByteWriteToComplete();
//Write command
DRV_I2C0_ByteWrite(cmd);
DRV_I2C0_WaitForByteWriteToComplete();
//Stop i2c
DRV_I2C0_MasterStop();
}
uint16_t readPROM(uint8_t cmd){
uint16_t value;
//Send Prom address
send(cmd);
//Start i2c
DRV_I2C0_MasterStart();
//Write address read
DRV_I2C0_ByteWrite(0xED);
DRV_I2C0_WaitForByteWriteToComplete();
//Byte read MSB
DRV_I2C0_WaitForReadByteAvailable();
value = 256 * DRV_I2C0_ByteRead ();
DRV_I2C0_MasterACKSend();
//Byte read LSB
DRV_I2C0_WaitForReadByteAvailable();
value = DRV_I2C0_ByteRead();
DRV_I2C0_MasterNACKSend();
//Stop i2c
DRV_I2C0_MasterStop();
return value;
}
void APP_Tasks ( void ){
//Reset command
send(0x1E);
ShortDelay( 3000 ); //3 ms
//Read prom
uint8_t i;
for (i=0;i<8;i++){
readPROM(0xA0 + i * 2 );
}
}
La respuesta siempre es 0x00, pero debería ser algo diferente a eso.
Olvidé mencionar que al enviar cualquier tipo de comando en las líneas i2c, la corriente aumenta en el sensor. ¿Esto significa que el sensor está respondiendo?
Si pudiera faltar algo obvio, por favor, avíseme, porque es la primera vez que utilizo el i2c.