Tengo problemas con mi código para el acelerómetro FXOS8700CQ, deseo generar una interrupción por FreeFall pero no se genera, no se si sea necesario configurar otro registro que no haya hecho, esta es la función para inicializar el sensor que he estado utilizando:
void FXOS8700CQ1_Init(void)
{
//Reset all registers to POR values
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, CTRL_REG2, 0x40);
//delay
Pause(0x400);
// +/-2g range with 0.244mg/LSB
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, XYZ_DATA_CFG_REG, 0x00);
//1ms delay
Pause(0x100);
#if FREEFALL_DETECTION
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, FF_MT_CFG_REG, 0xB8); // Freefall detection for X and Y and Z axis
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, FT_MT_THS_REG, 0x03); // Threshold Setting Value for the Freefall detection of < 0.2g (0.2g/0.064g = 3.17 counts)
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, FF_MT_COUNT_REG, 0x0C); // Set the debounce counter to 100 ms timer (120ms/100Hz = 12 counts)
#endif
//Only accelerometer sensor is active
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, M_CTRL_REG1, 0x00);
//High Resolution mode
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, CTRL_REG2, 0x02);
//Push-pull, active low interrupt
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, CTRL_REG3, 0x00);
//Enable DRDY interrupt
//Enable Freefall interrupt
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, CTRL_REG4, 0x05);
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, CTRL_REG5, 0x05);
//ODR= 3.125Hz Reduced noise, Active mode
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, CTRL_REG1, 0x35);
}
Solved! Go to Solution.
Hola Claudia,
Gracias por escribir.
En este caso te recomiendo usar la siguiente configuración en los registros correspondientes al Freefall Detection:
#if FREEFALL_DETECTION
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, FF_MT_CFG_REG, 0x38); // Freefall detection for X and Y and Z axis
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, FT_MT_THS_REG, 0x04); // Threshold Setting Value for the Freefall detection of 0.2g (4 * 0.063)
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, FF_MT_COUNT_REG, 0x04); // Set the debounce counter to 80 ms timer (20ms * 4)
reg_val = I2C_ReadRegister(FXOS8700CQ_I2C_ADDRESS, CTRL_REG4);
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, CTRL_REG4, reg_val|0x04); // Enable Motion/Freefall Interrupt
reg_val = I2C_ReadRegister(FXOS8700CQ_I2C_ADDRESS, CTRL_REG5);
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, CTRL_REG5, reg_val|0x04); // Freefall interrupt routed to INT1 - PTC6
#endif
Toma en cuenta que al estar usando el modo acelerómetro, el ODR cambia para tu configuración.
En este caso te recomiendo modificar el registro A_FFMT_COUNT como se muestra en el código mostrado. Puedes encontrar mas información en la tabla 94 (Table 94) de la hoja de datos en:
http://www.nxp.com/files/sensors/doc/data_sheet/FXOS8700CQ.pdf
El proyecto se encuentra adjunto a esta respuesta.
Espero que esta información sea útil para ti.
Saludos,
David
Hola Claudia,
Gracias por escribir.
En este caso te recomiendo usar la siguiente configuración en los registros correspondientes al Freefall Detection:
#if FREEFALL_DETECTION
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, FF_MT_CFG_REG, 0x38); // Freefall detection for X and Y and Z axis
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, FT_MT_THS_REG, 0x04); // Threshold Setting Value for the Freefall detection of 0.2g (4 * 0.063)
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, FF_MT_COUNT_REG, 0x04); // Set the debounce counter to 80 ms timer (20ms * 4)
reg_val = I2C_ReadRegister(FXOS8700CQ_I2C_ADDRESS, CTRL_REG4);
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, CTRL_REG4, reg_val|0x04); // Enable Motion/Freefall Interrupt
reg_val = I2C_ReadRegister(FXOS8700CQ_I2C_ADDRESS, CTRL_REG5);
I2C_WriteRegister(FXOS8700CQ_I2C_ADDRESS, CTRL_REG5, reg_val|0x04); // Freefall interrupt routed to INT1 - PTC6
#endif
Toma en cuenta que al estar usando el modo acelerómetro, el ODR cambia para tu configuración.
En este caso te recomiendo modificar el registro A_FFMT_COUNT como se muestra en el código mostrado. Puedes encontrar mas información en la tabla 94 (Table 94) de la hoja de datos en:
http://www.nxp.com/files/sensors/doc/data_sheet/FXOS8700CQ.pdf
El proyecto se encuentra adjunto a esta respuesta.
Espero que esta información sea útil para ti.
Saludos,
David
Muchísimas gracias, ya se generó la interrupción cambiando eso