wasp-os/wasp/drivers/bma421.py
Daniel Thompson ab33027fff drivers: bma421: Reduce the post-reset delay
There nothing in the docs to give the delay time required after a
reset. Currently we use 200ms because that appears on some older
code for BMA423 but is removed in more recent drivers. 50ms is still
a long time (for hardware) and has held up in testing.

Signed-off-by: Daniel Thompson <daniel@redfelineninja.org.uk>
2020-06-12 08:51:44 +01:00

54 lines
1.5 KiB
Python

# SPDX-License-Identifier: LGPL-3.0-or-later
# Copyright (C) 2020 Daniel Thompson
"""Bosch BMA421 accelerometer driver
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"""
import bma42x
import time
class BMA421:
"""BMA421 driver
.. automethod:: __init__
"""
def __init__(self, i2c):
"""Configure the driver.
:param machine.I2C i2c: I2C bus used to access the sensor.
"""
self._dev = bma42x.BMA42X(i2c)
def reset(self):
"""Reset and reinitialize the sensor."""
dev = self._dev
# Init, reset, wait for reset, enable I2C watchdog
dev.init()
dev.set_command_register(0xb6)
time.sleep(0.05)
dev.set_reg(bma42x.NV_CONFIG_ADDR, 6);
# Configure the sensor for basic step counting
dev.write_config_file()
dev.set_accel_enable(True)
dev.set_accel_config(odr=bma42x.OUTPUT_DATA_RATE_100HZ,
range=bma42x.ACCEL_RANGE_2G,
bandwidth=bma42x.ACCEL_NORMAL_AVG4,
perf_mode=bma42x.CIC_AVG_MODE)
dev.feature_enable(bma42x.STEP_CNTR, True)
@property
def steps(self):
"""Report the number of steps counted."""
return self._dev.step_counter_output()
@steps.setter
def steps(self, value):
if value != 0:
raise ValueError()
# TODO: There is a more efficient way to reset the step counter
# but I haven't looked it up yet!
self.reset()