From 19b7e86f801ca6e8510cdb506a3b0b1a3e9577b6 Mon Sep 17 00:00:00 2001
From: Benjamin Koch <bbbsnowball@gmail.com>
Date: Fri, 26 May 2023 04:19:07 +0200
Subject: [PATCH] double time before toggling en_measure_current

---
 firmware/rust1/src/bin/heizung.rs | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/firmware/rust1/src/bin/heizung.rs b/firmware/rust1/src/bin/heizung.rs
index 62d167f..8c2cdb8 100644
--- a/firmware/rust1/src/bin/heizung.rs
+++ b/firmware/rust1/src/bin/heizung.rs
@@ -144,6 +144,8 @@ async fn adc_task(shared_data: &'static AdcData, adc: ADC, mut en_measure_curren
     let mut adc = Adc::new(adc, irq, adc::Config::default());
 
     let debug = true;
+
+    const MEASURE_CYCLES_BEFORE_TOGGLE: u32 = 16;
     let mut en_measure_current_toggle = 0;
 
     loop {
@@ -191,14 +193,14 @@ async fn adc_task(shared_data: &'static AdcData, adc: ADC, mut en_measure_curren
             en_measure_current_toggle = 0;
         } else {
             match en_measure_current_toggle {
-                0 | 8 => {
-                    en_measure_current.set_level(if en_measure_current_toggle >= 8 { Level::High } else { Level::Low });
+                0 | MEASURE_CYCLES_BEFORE_TOGGLE => {
+                    en_measure_current.set_level(if en_measure_current_toggle >= MEASURE_CYCLES_BEFORE_TOGGLE { Level::High } else { Level::Low });
                     // skip in this loop to give it time to settle
                     measure_currents = false;
                 }
                 _ => {}
             }
-            en_measure_current_toggle = (en_measure_current_toggle + 1) % 16;
+            en_measure_current_toggle = (en_measure_current_toggle + 1) % (2*MEASURE_CYCLES_BEFORE_TOGGLE);
         }
 
         // read another value between looking at output_active and measuring the currents
@@ -223,7 +225,7 @@ async fn adc_task(shared_data: &'static AdcData, adc: ADC, mut en_measure_curren
             ];
             let outputs_are_active = outputs_active.load(Ordering::SeqCst);
             //let en_measure_current_is_active = en_measure_current.is_set_high();  //FIXME I think is_set_high() has a bug.
-            let en_measure_current_is_active = en_measure_current_toggle >= 8;
+            let en_measure_current_is_active = en_measure_current_toggle >= MEASURE_CYCLES_BEFORE_TOGGLE;
             for i in 0..2 {
                 // 3.05 V for 4096 counts, shunt resistor is 0.1 ohms (i.e. 0.1 V/A), amplifier gain is 56, result should be mA/10
                 // (level - offset) * 3.05/4096 / 0.1 * 1/56 * 1e4
-- 
GitLab