我一直在做一个关于ATmega 32的模数转换器项目我的模数转换器是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模拟的输出

发布于 2013-11-19 01:26:35
你的数学有点差。在0V时,模数转换器的输出为0,因此只有1023步骤才能达到2.56V。
2.5V / (2.56V / 1023) = 999.02344
https://stackoverflow.com/questions/20061355
复制相似问题