LIS2DH12 working current
Hello, everyone,
we found that the working current is too high during the use of the LIS2DH12 sensor. The current is as high as 290ua. According to the specification, the high resolution of 100Hz is 20ua. The working current is much higher. I don’t know if there is a problem with the configuration. The following is my code , I also tried to configure to play in low-power mode, but the current is not numbered.
int LIS2DH_Init(void)
{
/* step 1: init I2C */
I2C_InitType I2C_InitStruct;
I2C_InitStruct.sck_pin = WRIST_PIN_MOTION_SCL;
I2C_InitStruct.sda_pin = WRIST_PIN_MOTION_SDA;
I2C_Init(&I2C_InitStruct, TWI_GROUP_MOTION);
if(LIS2DH_WHO_AM_I_VALUE != LIS2DH_ReadReg(LIS2DH_WHO_AM_I))
{
return -1;
}
//LIS2DH_Standby();
//LIS2DH_ClearWakeUp();
LIS2DH_WriteReg(LIS2DH_CTRL_REG5, 0x80);
LIS2DH_WriteReg(LIS2DH_CTRL_REG4, 0x00);
LIS2DH_WriteReg(LIS2DH_CTRL_REG3, 0x00);
LIS2DH_WriteReg(LIS2DH_CTRL_REG2, 0x00);
LIS2DH_WriteReg(LIS2DH_CTRL_REG1, 0x00);
LIS2DH_WriteReg(LIS2DH_CTRL_REG6, 0x00);
DelayMS(10);
LIS2DH_WriteReg(LIS2DH_CTRL_REG5, 0x08);
LIS2DH_WriteReg(LIS2DH_CTRL_REG4, LIS2D_SELECT_FULL_SCALE | SELF_TEST_NORMAL_MODE);
LIS2DH_WriteReg(LIS2DH_CTRL_REG1, LIS2D_ODR_100HZ|0x07); //100hz enable xyz
//sleep to wakeup
// LIS2DH_WriteReg(LIS2DH_ACT_THS, 0x00);
// LIS2DH_WriteReg(LIS2DH_ACT_DUR, 0x00);
//configure interrupt enable
LIS2DH_WriteReg(LIS2DH_INT1_CFG, 0x40 | 0x00);
LIS2DH_WriteReg(LIS2DH_INT1_THS, 0x03);
LIS2DH_WriteReg(LIS2DH_INT1_DURATION, 0x02);
LIS2DH_WriteReg(LIS2DH_CTRL_REG5, 0x08);
LIS2DH_Sleep();
GPIO_InitType GPIO_InitStruct;
GPIO_InitStruct.dir = GPIO_PIN_CNF_DIR_Input;
GPIO_InitStruct.pull = GPIO_PIN_CNF_PULL_Pullup;
GPIO_InitStruct.drive = GPIO_PIN_CNF_DRIVE_S0S1;
GPIO_InitStruct.sense = GPIO_PIN_CNF_SENSE_Disabled;
GPIO_InitStruct.input = GPIO_PIN_CNF_INPUT_Connect;
//GPIO_QuickConfigInput(WRIST_PIN_MOTION_INT1);
GPIO_Init(WRIST_PIN_MOTION_INT1, &GPIO_InitStruct);
app_gpiote_user_register(&MotionChannel,(1 << WRIST_PIN_MOTION_INT1),0,LIS2DH_MotionEvent);
app_gpiote_user_enable(MotionChannel);
LIS2DH_DisableWakeUp();
return 0;
}
static void LIS2DH_WakeUpInit(void)
{
LIS2DH_WriteReg(LIS2DH_CTRL_REG0, 0x90);
LIS2DH_WriteReg(LIS2DH_CTRL_REG3, 0x40);
LIS2DH_WriteReg(LIS2DH_INT1_THS, onLis2DHAccelToThreshold() + LIS2DH_WAKEUP_MG_VALUE / onLis2DHGetBitMg());
LIS2DH_WriteReg(LIS2DH_INT1_DURATION, 0x00); //Ö�?¶�?³Ö�?øÊ±¼ä
LIS2DH_WriteReg(LIS2DH_INT1_CFG,0x2A); //0x2A
}
