-
Notifications
You must be signed in to change notification settings - Fork 12
Open
Description
I'm using this crate to read a ADS1115 sensor on a raspberry pi4.
It's something like follows:
let dev = I2cdev::new("/dev/i2c-1").unwrap();
let address = adc_Address::default();
let adc = Ads1x1x::new_ads1115(dev, address);
...
adc.reset_internal_driver_state();
adc
.set_full_scale_range(ads1x1x::FullScaleRange::Within4_096V)
.unwrap();
....
pub fn read_adc(&mut self, channel: AdcChannel) -> f32 {
let conversion_volts: f32 = 0.000_125; // According to data-sheet, LSB = 125 μV for ±4.096 scale register, navigator's default
block!(self.adc.read(channel.into())).unwrap() as f32 * conversion_volts
}
...
pub fn read_adc_all(&mut self) -> ADCData {
ADCData {
channel: [
self.read_adc(AdcChannel::Ch0),
self.read_adc(AdcChannel::Ch1),
self.read_adc(AdcChannel::Ch2),
self.read_adc(AdcChannel::Ch3),
],
}
}
Actually to read a single channel (SingleA0) , all ( A0..A4), I've something like:
read_adc time: [9.9452 ms 9.9682 ms 9.9893 ms]
read_adc_all time: [39.947 ms 40.032 ms 40.107 ms]
adding a self.adc.set_data_rate(DataRate16Bit::Sps860).unwrap();
It was improoved like follows:
`read_adc time: [3.0672 ms 3.0759 ms 3.0840 ms]
change: [-69.244% -69.143% -69.034%] (p = 0.00 < 0.05)
Performance has improved.
Found 23 outliers among 100 measurements (23.00%)
17 (17.00%) low severe
1 (1.00%) low mild
4 (4.00%) high mild
1 (1.00%) high severe
read_adc_all time: [12.350 ms 12.375 ms 12.409 ms]
change: [-69.174% -69.086% -68.976%] (p = 0.00 < 0.05)
Performance has improved.
Found 23 outliers among 100 measurements (23.00%)
14 (14.00%) low severe
1 (1.00%) low mild
3 (3.00%) high mild
5 (5.00%) high severe`
Can I reach more faster data for the 4 channels?
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels