From 09f79f782faaf2383fb7eeb1845701675a4439c8 Mon Sep 17 00:00:00 2001 From: Joey Castillo Date: Sat, 19 Feb 2022 14:03:10 -0500 Subject: [PATCH] lis2dw: reasonable defaults when initializing --- apps/accelerometer-test/app.c | 8 ++++---- .../sensor/accelerometer_data_acquisition_face.c | 12 ++++++++++-- watch-library/shared/driver/lis2dw.c | 4 ---- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/apps/accelerometer-test/app.c b/apps/accelerometer-test/app.c index 4a64e35..a52fbbf 100644 --- a/apps/accelerometer-test/app.c +++ b/apps/accelerometer-test/app.c @@ -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(); diff --git a/movement/watch_faces/sensor/accelerometer_data_acquisition_face.c b/movement/watch_faces/sensor/accelerometer_data_acquisition_face.c index d965ec2..ea50ad2 100644 --- a/movement/watch_faces/sensor/accelerometer_data_acquisition_face.c +++ b/movement/watch_faces/sensor/accelerometer_data_acquisition_face.c @@ -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(); } diff --git a/watch-library/shared/driver/lis2dw.c b/watch-library/shared/driver/lis2dw.c index f273fab..0b788fc 100644 --- a/watch-library/shared/driver/lis2dw.c +++ b/watch-library/shared/driver/lis2dw.c @@ -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; }