From b35250efbf839c87d91216b674182e045d0bbdda Mon Sep 17 00:00:00 2001 From: Ryan Summers Date: Thu, 29 Apr 2021 17:39:19 +0200 Subject: [PATCH] Fixing ADC/voltage conversion functions --- src/bin/dual-iir.rs | 6 ++++-- src/bin/lockin.rs | 7 ++++--- src/net/telemetry.rs | 22 ++++++++++++++++------ 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/bin/dual-iir.rs b/src/bin/dual-iir.rs index f043a40..1416e83 100644 --- a/src/bin/dual-iir.rs +++ b/src/bin/dual-iir.rs @@ -160,7 +160,7 @@ const APP: () = { [adc_samples[0][0] as i16, adc_samples[1][0] as i16]; c.resources.telemetry.latest_outputs = - [dac_samples[0][0] as i16, dac_samples[1][0] as i16]; + [dac_samples[0][0], dac_samples[1][0]]; c.resources.telemetry.digital_inputs = [ c.resources.digital_inputs.0.is_high().unwrap(), @@ -198,7 +198,9 @@ const APP: () = { c.resources.telemetry.lock(|telemetry| telemetry.clone()); let gains = c.resources.settings.lock(|settings| settings.afe.clone()); - c.resources.mqtt.publish_telemetry(&telemetry.to_telemetry(gains[0], gains[1])); + c.resources + .mqtt + .publish_telemetry(&telemetry.to_telemetry(gains[0], gains[1])); let telemetry_period = c .resources diff --git a/src/bin/lockin.rs b/src/bin/lockin.rs index 13408ff..69df37c 100644 --- a/src/bin/lockin.rs +++ b/src/bin/lockin.rs @@ -204,12 +204,11 @@ const APP: () = { } // Update telemetry measurements. - // TODO: Should we report these as voltages? c.resources.telemetry.latest_samples = [adc_samples[0][0] as i16, adc_samples[1][0] as i16]; c.resources.telemetry.latest_outputs = - [dac_samples[0][0] as i16, dac_samples[1][0] as i16]; + [dac_samples[0][0], dac_samples[1][0]]; } #[idle(resources=[mqtt], spawn=[settings_update])] @@ -246,7 +245,9 @@ const APP: () = { ]; let gains = c.resources.settings.lock(|settings| settings.afe.clone()); - c.resources.mqtt.publish_telemetry(&telemetry.to_telemetry(gains[0], gains[1])); + c.resources + .mqtt + .publish_telemetry(&telemetry.to_telemetry(gains[0], gains[1])); let telemetry_period = c .resources diff --git a/src/net/telemetry.rs b/src/net/telemetry.rs index f5736a6..dccf3ac 100644 --- a/src/net/telemetry.rs +++ b/src/net/telemetry.rs @@ -5,7 +5,7 @@ use crate::hardware::AfeGain; #[derive(Copy, Clone)] pub struct TelemetryBuffer { pub latest_samples: [i16; 2], - pub latest_outputs: [i16; 2], + pub latest_outputs: [u16; 2], pub digital_inputs: [bool; 2], } @@ -13,7 +13,7 @@ pub struct TelemetryBuffer { pub struct Telemetry { input_levels: [f32; 2], output_levels: [f32; 2], - digital_inputs: [bool; 2] + digital_inputs: [bool; 2], } impl Default for TelemetryBuffer { @@ -28,11 +28,21 @@ impl Default for TelemetryBuffer { impl TelemetryBuffer { pub fn to_telemetry(self, afe0: AfeGain, afe1: AfeGain) -> Telemetry { - let in0_volts = self.latest_samples[0] as f32 / (i16::MAX as f32 * 5.0 * afe0.to_multiplier() as f32) * 4.096; - let in1_volts = self.latest_samples[1] as f32 / (i16::MAX as f32 * 5.0 * afe1.to_multiplier() as f32) * 4.096; + let in0_volts = + (self.latest_samples[0] as f32 / i16::MAX as f32) * 4.096 / 2.0 + * 5.0 + / afe0.to_multiplier() as f32; + let in1_volts = + (self.latest_samples[1] as f32 / i16::MAX as f32) * 4.096 / 2.0 + * 5.0 + / afe1.to_multiplier() as f32; - let out0_volts = self.latest_outputs[0] as f32 / (i16::MAX as f32) * 10.24; - let out1_volts = self.latest_outputs[1] as f32 / (i16::MAX as f32) * 10.24; + let out0_volts = (10.24 * 2.0) + * (self.latest_outputs[0] as f32 / (u16::MAX as f32)) + - 10.24; + let out1_volts = (10.24 * 2.0) + * (self.latest_outputs[1] as f32 / (u16::MAX as f32)) + - 10.24; Telemetry { input_levels: [in0_volts, in1_volts],