lis2dw: reasonable defaults when initializing

This commit is contained in:
Joey Castillo 2022-02-19 14:03:10 -05:00
parent ee60d97d25
commit 09f79f782f
3 changed files with 14 additions and 10 deletions

View file

@ -36,10 +36,10 @@ void app_init(void) {
watch_enable_i2c();
lis2dw_begin();
lis2dw_set_low_power_mode(LIS2DW_LP_MODE_2); // lowest power 14-bit mode, 25 Hz is 3.5 µA @ 1.8V w/ low noise, 3µA without
lis2dw_set_low_noise_mode(true); // consumes a little more power
lis2dw_set_range(LIS2DW_CTRL6_VAL_RANGE_4G);
lis2dw_set_data_rate(LIS2DW_DATA_RATE_25_HZ); // is this enough for training?
lis2dw_set_data_rate(LIS2DW_DATA_RATE_25_HZ);
lis2dw_set_range(LIS2DW_RANGE_4_G);
lis2dw_set_low_noise_mode(true);
lis2dw_enable_fifo();
lis2dw_enable_fifo();

View file

@ -28,6 +28,7 @@
static const char activity_types[][3] = {
"ID", // Idle
"OF", // Off-wrist
"SL", // Sleeping
"WH", // Washing Hands
"WA", // Walking
@ -281,7 +282,13 @@ static void advance_current_setting(accelerometer_data_acquisition_state_t *stat
static void start_reading(accelerometer_data_acquisition_state_t *state) {
(void) state;
printf("TODO: Activate I2C bus and turn on accelerometer\n");
watch_enable_i2c();
lis2dw_begin();
lis2dw_set_data_rate(LIS2DW_DATA_RATE_25_HZ);
lis2dw_set_range(LIS2DW_RANGE_4_G);
lis2dw_set_low_noise_mode(true);
lis2dw_enable_fifo();
printf("TODO: Write header\n");
}
@ -301,5 +308,6 @@ static void finish_reading(accelerometer_data_acquisition_state_t *state) {
state->next_available_page++;
state->pos = 0;
}
printf("TODO: Turn off accelerometer and disable I2C bus\n");
lis2dw_set_data_rate(LIS2DW_DATA_RATE_POWERDOWN);
watch_disable_i2c();
}

View file

@ -31,12 +31,8 @@ bool lis2dw_begin(void) {
}
watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL2, LIS2DW_CTRL2_VAL_BOOT);
watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL2, LIS2DW_CTRL2_VAL_SOFT_RESET);
// Start at lowest possible data rate and lowest possible power mode
watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL1, LIS2DW_CTRL1_VAL_ODR_LOWEST | LIS2DW_CTRL1_VAL_MODE_LOW_POWER | LIS2DW_CTRL1_VAL_LPMODE_1);
// Enable block data update (output registers not updated until MSB and LSB have been read) and address autoincrement
watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL2, LIS2DW_CTRL2_VAL_BDU | LIS2DW_CTRL2_VAL_IF_ADD_INC);
// Set range to ±2G
watch_i2c_write8(LIS2DW_ADDRESS, LIS2DW_REG_CTRL6, LIS2DW_CTRL6_VAL_RANGE_2G);
return true;
}