条件:M16,采用内置ADC,采样2个数据,外部基准2.5V动态显示采用的AD值
现象:采集数据由0-992变化(未到1023,可能是基准偏差)每步显示不是1个1个加,而是几个或10几步进值。例如,最高992,下一个应该是991,990,899.。。。。。但实际是992,967,963,961,960,927。。。。。。,不知道是什么原因,没有找出规律。
程序如下:
//**************************************************************
//ADC initialize
// Conversion time: 2uS
//**************************************************************
void adc_init(void)
{
ADCSR = 0x00; //disable adc
ADMUX = 0x00; //转换结果右对齐,1x
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);//ADC 128分频,115KHz,单次转换
ACSR = 0x80;
ADCSR = 0xA1;
ACSR=1<<ACD;
}
//*******************************************************************
//adc
//
//*******************************************************************
unsigned int read_adc(unsigned char ad_channel)
{
unsigned int ad,i;
ADMUX = 0x00; //select 外部基准电压源,转换结果右对齐
ADMUX|=ad_channel;//选择ADC通道
ADCSRA|=1<<ADSC;//启动ADC转换
delay(300);
while(0==(ADCSRA&(1<<ADIF)));//等待转换完成
ADCSRA|=1<<ADIF;//清零标志
ad = ADC;
return(ad);//返回测到的电压值
}
|