/* * adc.c * * Created on: Dec 8, 2025 * Author: user */ #include "adc.h" /* Filled by ADC+DMA: latest raw value of each channel */ volatile uint16_t adc_dma_buf[ADC_NUM_CHANNELS]; /* Smoothed value (50ms average with settings above) */ volatile uint16_t adc_avg[ADC_NUM_CHANNELS]; /* Internal accumulators used only in the timer ISR */ static uint32_t adc_sum[ADC_NUM_CHANNELS]; static uint8_t adc_sum_count = 0; /* Optional flag to tell main loop that a new averaged set is ready */ volatile uint8_t adc_avg_ready = 0; uint16_t ch4 ; uint16_t ch5 ; uint16_t ch6 ; uint16_t ch7 ; uint16_t ch8 ; void manageAdc(void){ if (adc_avg_ready) { adc_avg_ready = 0; // Read averaged channels (example mapping) ch4 = adc_avg[0]; ch5 = adc_avg[1]; ch6 = adc_avg[2]; ch7 = adc_avg[3]; ch8 = adc_avg[4]; // Use them (convert to volts, control, etc.) // float v4 = (3.3f * ch4) / 4095.0f; } } void readAdc(void){ for (uint8_t i = 0; i < ADC_NUM_CHANNELS; i++) { adc_sum[i] += adc_dma_buf[i]; } adc_sum_count++; /* When we collected ADC_AVG_WINDOW samples → compute average */ if (adc_sum_count >= ADC_AVG_WINDOW) { for (uint8_t i = 0; i < ADC_NUM_CHANNELS; i++) { adc_avg[i] = (uint16_t)(adc_sum[i] / ADC_AVG_WINDOW); adc_sum[i] = 0; } adc_sum_count = 0; adc_avg_ready = 1; // tell main loop new data is ready } }