1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-07-30 16:24:09 +03:00

Fixed 'shaking' readings from ADC/ADC12

This commit is contained in:
Cristian Maglie
2011-11-27 19:15:33 +01:00
parent b853464da8
commit 037ecd3e3e
4 changed files with 30 additions and 18 deletions

View File

@ -64,7 +64,6 @@ extern "C" {
*/
uint32_t adc_init(Adc *p_adc, uint32_t ul_mck, uint32_t ul_adc_clock, uint32_t ul_startuptime)
{
uint32_t ul_prescal,ul_startup;
p_adc->ADC_CR = ADC_CR_SWRST;
/* Reset Mode Register */
@ -76,9 +75,14 @@ uint32_t adc_init(Adc *p_adc, uint32_t ul_mck, uint32_t ul_adc_clock, uint32_t u
p_adc->ADC_RNCR = 0;
p_adc->ADC_TCR = 0;
p_adc->ADC_TNCR = 0;
ul_prescal = ul_mck/(2 * ul_adc_clock) - 1;
ul_startup = ((ul_adc_clock/1000000) * ul_startuptime / 8) - 1;
p_adc->ADC_MR |= ADC_MR_PRESCAL( ul_prescal ) | ( (ul_startup<<ADC_MR_STARTUP_Pos) & ADC_MR_STARTUP_Msk);
uint32_t prescal = ul_mck/(2 * ul_adc_clock) - 1;
// check for rounding errors
if ( (ul_mck/((prescal+1)*2)) > ul_adc_clock ) {
prescal++;
ul_adc_clock = ul_mck/((prescal+1)*2);
}
uint32_t startup = ((ul_adc_clock/1000000) * ul_startuptime / 8) - 1;
p_adc->ADC_MR |= ADC_MR_PRESCAL(prescal) | ADC_MR_STARTUP(startup);
return 0;
}