Crates.io | mma8x5x |
lib.rs | mma8x5x |
version | 0.1.1 |
source | src |
created_at | 2020-08-13 15:49:44.836745 |
updated_at | 2022-09-15 19:33:09.500898 |
description | Platform-agnostic Rust driver for the MMA8451, MMA8452, MMA8453, MMA8652 and MMA8653 tri-axis accelerators. |
homepage | https://github.com/eldruin/mma8x5x-rs |
repository | https://github.com/eldruin/mma8x5x-rs |
max_upload_size | |
id | 276288 |
size | 119,211 |
This is a platform agnostic Rust driver for the MMA8451Q, MMA8452Q, MMA8453Q, MMA8652FC
and MMA8653FC tri-axis accelerators using the embedded-hal
traits.
This driver allows you to:
into_active()
.read_unscaled()
.read()
.data_status()
.system_mode()
.set_scale()
.set_data_rate()
.set_wake_power_mode()
.set_sleep_power_mode()
.set_read_mode()
.set_offset_correction()
.device_id()
.reset()
.enable_self_test()
.enable_auto_sleep()
.set_auto_sleep_data_rate()
.set_auto_sleep_count()
.enable_portrait_landscape_detection()
.set_debounce_counter_mode()
.set_debounce_counter()
.portrait_landscape_status()
.set_enabled_interrupts()
.set_interrupt_pin_routes()
.set_interrupt_pin_polarity()
.set_interrupt_pin_configuration()
.set_wake_interrupts()
.interrupt_status()
.The devices are intelligent, low-power, three-axis, capacitive micromachined accelerometers with 10/12/14 bits of resolution. The accelerometers are packed with embedded functions with flexible user-programmable options, configurable to interrupt pins. Embedded interrupt functions enable overall power savings, by relieving the host processor from continuously polling data. There is access to either low-pass or high-pass filtered data, which minimizes the data analysis required for jolt detection and faster transitions. The device can be configured to generate inertial wake-up interrupt signals from any combination of the configurable embedded functions, enabling the devices to monitor inertial events while remaining in a low-power mode during periods of inactivity.
Feature | MMA8451 | MMA8452 | MMA8453 | MMA8652 | MMA8653 |
---|---|---|---|---|---|
Resolution | 14-bit | 12-bit | 10-bit | 12-bit | 10-bit |
Sensitivity in 2g mode (counts/g) | 4096 | 1024 | 256 | 1024 | 256 |
32-level FIFO | Yes | - | - | Yes | - |
Low power mode | Yes | Yes | Yes | Yes | Yes |
Auto-WAKE | Yes | Yes | Yes | Yes | Yes |
Auto-SLEEP | Yes | Yes | Yes | Yes | Yes |
High-pass filter | Yes | Yes | Yes | Yes | - |
Low-pass filter | Yes | Yes | Yes | Yes | Yes |
Transient detection with high-pass filter | Yes | Yes | Yes | Yes | - |
Fixed orientation detection | Yes | Yes | Yes | - | Yes |
Programmable orientation detection | Yes | - | - | Yes | - |
Data-ready interrupt | Yes | Yes | Yes | Yes | Yes |
Single-tap interrupt | Yes | Yes | Yes | Yes | - |
Double-tap interrupt | Yes | Yes | Yes | Yes | - |
Directional-tap interrupt | Yes | Yes | Yes | Yes | - |
Freefall interrupt | Yes | Yes | Yes | Yes | Yes |
Motion interrupt with direction | Yes | Yes | Yes | Yes | - |
Selectable address pin | Yes | Yes | Yes | - | - |
(Unavailable features are marked with "-" as this is more easily readable than Yes/No)
Documentation:
To use this driver, import this crate and an embedded_hal
implementation,
then instantiate the appropriate device.
Most of the settings can only be changed while the device is in standby mode. Then the mode can be changed to active and acceleration measurements read.
Please find additional examples using hardware in this repository: driver-examples
use linux_embedded_hal::I2cdev;
use mma8x5x::Mma8x5x;
fn main() {
let dev = I2cdev::new("/dev/i2c-1").unwrap();
let sensor = Mma8x5x::new_mma8653(dev);
let mut sensor = sensor.into_active().ok().unwrap();
loop {
let accel = sensor.read().unwrap();
println!("Acceleration: {:?}", accel);
}
}
For questions, issues, feature requests, and other changes, please file an issue in the github project.
Licensed under either of:
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.