stmhal, accel: Increase start-up times to 30ms; add extra 30ms delay.

For accel to start-up reliably, need to wait 30ms between on/off, and
30ms for it to enter active mode.  With this fix the accel can be read
immediately after initialising it.

Addresses issue #763.
This commit is contained in:
Damien George 2014-07-31 10:39:52 +01:00
parent 3c4db9f91c
commit fa1ecda3fd

View File

@ -83,11 +83,11 @@ STATIC void accel_start(void) {
I2CHandle1.Init.OwnAddress2 = 0xfe; // unused I2CHandle1.Init.OwnAddress2 = 0xfe; // unused
i2c_init(&I2CHandle1); i2c_init(&I2CHandle1);
// turn off AVDD, wait 20ms, turn on AVDD, wait 20ms again // turn off AVDD, wait 30ms, turn on AVDD, wait 30ms again
GPIOB->BSRRH = GPIO_PIN_5; // turn off GPIOB->BSRRH = GPIO_PIN_5; // turn off
HAL_Delay(20); HAL_Delay(30);
GPIOB->BSRRL = GPIO_PIN_5; // turn on GPIOB->BSRRL = GPIO_PIN_5; // turn on
HAL_Delay(20); HAL_Delay(30);
HAL_StatusTypeDef status; HAL_StatusTypeDef status;
@ -100,11 +100,12 @@ STATIC void accel_start(void) {
} }
} }
//printf("MemWrite\n"); // set MMA to active mode
uint8_t data[1]; uint8_t data[1] = {1}; // active mode
data[0] = 1; // active mode
status = HAL_I2C_Mem_Write(&I2CHandle1, MMA_ADDR, MMA_REG_MODE, I2C_MEMADD_SIZE_8BIT, data, 1, 200); status = HAL_I2C_Mem_Write(&I2CHandle1, MMA_ADDR, MMA_REG_MODE, I2C_MEMADD_SIZE_8BIT, data, 1, 200);
//printf(" got %d\n", status);
// wait for MMA to become active
HAL_Delay(30);
} }
/******************************************************************************/ /******************************************************************************/