summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/accelerometer-test/app.c8
-rw-r--r--movement/watch_faces/sensor/accelerometer_data_acquisition_face.c12
-rw-r--r--watch-library/shared/driver/lis2dw.c4
3 files changed, 14 insertions, 10 deletions
diff --git a/apps/accelerometer-test/app.c b/apps/accelerometer-test/app.c
index 4a64e355..a52fbbfd 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 d965ec2e..ea50ad27 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 f273fab3..0b788fca 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;
}