Use average (count = 8) for all ADC measure (include battery)

pull/4/head
DiSlord 6 years ago
parent 901c4dcc0a
commit aea7761a55

12
adc.c

@ -68,13 +68,15 @@ uint16_t adc_single_read(uint32_t chsel)
VNA_ADC->CFGR1 = ADC_CFGR1_RES_12BIT;
VNA_ADC->CHSELR = chsel;
/* ADC conversion start.*/
VNA_ADC->CR |= ADC_CR_ADSTART;
uint32_t result = 0;
uint32_t count = 1<<3; // Average count
do{
VNA_ADC->CR |= ADC_CR_ADSTART; // ADC conversion start.
while (VNA_ADC->CR & ADC_CR_ADSTART)
;
return VNA_ADC->DR;
result+=VNA_ADC->DR;
}while(--count);
return result>>3;
}
int16_t adc_vbat_read(void)

13
ui.c

@ -196,11 +196,9 @@ static int btn_wait_release(void)
}
// ADC read count for measure X and Y (better be 2^n)
#define TOUCH_MEASURE_COUNT 8
static int
touch_measure_y(void)
{
int v = 0, i = TOUCH_MEASURE_COUNT;
// open Y line
palSetPadMode(GPIOB, GPIOB_YN, PAL_MODE_INPUT_PULLDOWN);
palSetPadMode(GPIOA, GPIOA_YP, PAL_MODE_INPUT_PULLDOWN);
@ -211,16 +209,12 @@ touch_measure_y(void)
palClearPad(GPIOB, GPIOB_XN);
palSetPad(GPIOA, GPIOA_XP);
do{
v+= adc_single_read(ADC_TOUCH_Y);
}while(--i);
return v/TOUCH_MEASURE_COUNT;
return adc_single_read(ADC_TOUCH_Y);
}
static int
touch_measure_x(void)
{
int v = 0, i = TOUCH_MEASURE_COUNT;
// Set X line as input
palSetPadMode(GPIOB, GPIOB_XN, PAL_MODE_INPUT_PULLDOWN);
palSetPadMode(GPIOA, GPIOA_XP, PAL_MODE_INPUT_PULLDOWN);
@ -231,10 +225,7 @@ touch_measure_x(void)
palSetPad(GPIOB, GPIOB_YN);
palClearPad(GPIOA, GPIOA_YP);
do{
v+= adc_single_read(ADC_TOUCH_X);
}while(--i);
return v/TOUCH_MEASURE_COUNT;
return adc_single_read(ADC_TOUCH_X);
}
void

Loading…
Cancel
Save

Powered by TurnKey Linux.