wip
This commit is contained in:
66
workspace/AUTOM10/Core/Src/adc.c
Normal file
66
workspace/AUTOM10/Core/Src/adc.c
Normal file
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* 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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user