|
各位朋友好,近日在使用MEGA8做ADC采样时,遇到一个问题,很困惑,各位朋友来看看是哪里的问题:
code:
void adc_init(unsigned char adc_channel)
{
// PORTA&=~(BIT(PA0)|BIT(PA1));
// DDRA&=~(BIT(PA0)|BIT(PA1));
ACSR = 0x80;
ADMUX = (0 << REFS1) | (1 << REFS0) | adc_channel;
ADCSRA = (1 << ADEN) | (0 << ADSC) | (0 << ADFR) | (0 << ADIE) | (0 << ADPS2) | (0 << ADPS1) | (0 << ADPS0);
}
/******************************************************
** 取通道adc_channel的ADC值 **
******************************************************/
unsigned int GetAdcValue(unsigned char adc_channel)
{
unsigned int adc_value = 0; //定义全局变量来存储ADC值
unsigned int temp;
adc_init(adc_channel);
delay(30);
ADCSRA |= (1 << ADSC);
delay(100);
while ((ADCSRA &0x10) == 0)
;
temp = ADCL;
temp |= (int)ADCH << 8;
adc_value = temp;
return adc_value;
}
上面是我的程序,问题是这样的:
Vref = 5V;
我将ADC采样之后的值(adc_value)直接用串口发送至PC,发现在转换结果为0xff(此时ADC输入电压约为1245mv)之后,继续增加ADC的输入电压,此时转换结果没有变化,仍为0xff,当增大到一定程度之后(增加至1325mv,增幅约80mv),该值直接跳到0x10f(大了约80mv),在(0xff,0x10f)区间外转换基本连续,没有异常。请各位朋友帮忙分析下这是神马原因? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|