我一直在 ATmega 32 上的 ADC 项目中工作,我的 ADC 是 10 位分辨率,Vref = 2.56V(从内部信息中我可以得出结论,步长 = 2.56/1024 = 2.5mV
那么,如果输入电压为 2.5 伏,则数字数据输出必须为 2.5V /2.5mV = 1000 = 0b1111101000
我已经编写了该代码并在 proteus 中进行了模拟,但是当输入电压为 2.5V 时,输出为 999(十进制)= 0b1111100111 而不是 1000 为什么??!!
注:数字数据输出调整正确
那是我的代码:
包括
int main(void)
{
DDRB = 0xFF;
DDRD = 0xFF;
DDRA = 0;
ADCSRA = 0x87; //ADC enable, clk/128
ADMUX = 0xC0; //Internal vref, single ended ADC0
while(1){
ADCSRA |=(1<<ADSC); //start conversion
while(ADCSRA & (1<<ADIF) == 0);
PORTD = ADCL;
PORTB = ADCH;
}
return 0;
}
这是proteus模拟的输出