#potentiometer #digital #platform-independent

as5600

Platform-independent Rust driver for AS5600 digital magnetic potentiometer

8 releases (breaking)

0.8.0 Apr 6, 2024
0.7.0 Apr 6, 2024
0.6.0 Aug 6, 2023
0.5.0 Jun 9, 2022
0.1.0 Nov 28, 2021

#230 in Hardware support

MIT/Apache

43KB
969 lines

as5600-rs

Rust Embedded HAL driver for the AS5600 contactless 12-bit digital potentiometer

Status

  • Reading/parsing all device registers
  • Writing configuration settings
  • Setting zero position, maximum position, maximum angle
  • Burn Settings and angle

Example

Here's how using this driver looks on a raspberry pi:

use std::{thread, time::Duration};

use as5600::As5600;
use linux_embedded_hal::I2cdev;

fn main() {
    let mut i2c = I2cdev::new("/dev/i2c-1").unwrap();
    let mut as5600 = As5600::new(i2c);
    let config = as5600.config().unwrap();
    println!("{:?}", config);

    thread::sleep(Duration::from_secs(2));

    let status = as5600.magnet_status().unwrap();
    let agc = as5600.automatic_gain_control().unwrap();
    let mag = as5600.magnitude().unwrap();
    let zmco = as5600.zmco().unwrap();

    println!("{:?}", status);
    println!("{:?}", agc);
    println!("{:?}", mag);
    println!("{:?}", zmco);

    thread::sleep(Duration::from_secs(2));

    loop {
        let value = as5600.angle().unwrap();
        println!("{:?}", value);
        thread::sleep(Duration::from_millis(100));
    }
}

TODO for a more relaxed and civilized age

[ ] make a wooden harness for the as5600 with a knob that turns a radial magnet at the right distance to the sensor [ ] make a CLI/GUI tool similar to ebyte-e32-ui [ ] use klask progress bars or something comparable to show the current magnet angle

License

Licensed under either of

at your option.

Contribution

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.

Dependencies

~0.4–1MB
~20K SLoC