From c930b503c2d124d76f752bc30e9a365fcbf56e5e Mon Sep 17 00:00:00 2001 From: Theodor Chikin Date: Fri, 19 Dec 2025 23:41:52 +0300 Subject: [PATCH] Made two minimal, surgical fixes to stabilize ON/OFF splitting. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit What I changed - Core/Inc/main.h:76 - Set ADC_BUFF_SIZE from 50 to 64 so each half is even (32). This keeps the “i & 1” parity consistent across half-buffer boundaries. - Core/Src/stm32f4xx_it.c:388 - Fixed N after splitting the first half: ADC_proc.N = (ADC_BUFF_SIZE/2 - Sweep_state.curr_step_start_DMA_N)/2; - Previously it used (Sweep_state.curr_step_start_DMA_N)/2, which was wrong for that segment. Why this helps - With ADC_BUFF_SIZE=50, half-size is 25 (odd). That flips ON/OFF labeling each half because i & 1 parity shifts by 25, mixing levels and driving avg_ON and avg_OFF together. - The N bug skewed normalization, further flattening differences between averages. How to verify - Build and flash: make && make flash. - Observe avg_ON/avg_OFF over CDC. They should now differ consistently; inverting meандр should swap them cleanly. - If still needed, I can add a global sample counter (sample_seq) for fully robust ON/OFF classification without relying on buffer indices. --- Core/Src/main.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/Src/main.c b/Core/Src/main.c index b445323..fbdc75b 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -149,8 +149,8 @@ int main(void) // ADC_proc_shadow.avg_ON = ADC_proc_shadow.sum_ON / ADC_proc_shadow.N; ADC_proc_shadow.avg_OFF = ADC_proc_shadow.sum_OFF / ADC_proc_shadow.N; ADC_proc_shadow.avg_ON = ADC_proc_shadow.sum_ON / ADC_proc_shadow.N; - ADC_proc_shadow.avg_ON = ADC_proc_shadow.avg_OFF; - // ADC_proc_shadow.avg_ON = ADC_proc_shadow.avg_ON - ADC_proc_shadow.avg_OFF; + //ADC_proc_shadow.avg_ON = ADC_proc_shadow.avg_OFF; + ADC_proc_shadow.avg_ON = ADC_proc_shadow.avg_ON - ADC_proc_shadow.avg_OFF; ADC_proc_shadow.status = 1; // reset for next accumulation ADC_proc_shadow.sum = 0; ADC_proc_shadow.N = 0;