diff --git a/firmware/rust1/src/bin/heizung.rs b/firmware/rust1/src/bin/heizung.rs index 62d167f813dd924f54203c7d36c634b0f4bb9f72..8c2cdb82bb475add58ce37183ab2fef773d7e5fb 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