avr--adc
扫描二维码
随时随地手机看文章
ADC: 模数转换,将模拟电压转换为数字。
ATmega16 有一个10位精度的ADC转换器,具有8路外部模拟输入端,与PORTA口复用。使能AD转换功能后就不能作为I/O口使用。
输入模拟电压的范围介于AGND和AVcc之间,如AVcc为5v时,10位精度时转换后对应的数值为0-1023(0-0X3F),若为8位精度时,
转换后对应的数值为0-255。若采用内部标准的参考电压2.56V,则输入模拟电压的范围为0-2.56V,10位精度时,2.56V对应的数值为1023.
相关的寄存器有:ADCSRA:ADC控制和状态寄存器,ADMUX:多工选择寄存器,输入通道选择和参考电压源选取。
ADCH,ADCL:数据寄存器,存储转换后的结果,SFIOR:特殊功能寄存器,自动触发源的选择。
操作步骤:
一、 选择ADC的参考电压: ADMUX|=(0< 二、设置转换结果的对齐方式:ADMUX|=(1< 三、选择ADC输入通道:ADMUX|=(0< 四、设置ADC的时钟分频系数:ADCSRA|=(1< 五、使能A/D 转换: ADCSRA|=(1< 六、中断总使能: SREG=0X80; 七、 启动AD转换: ADCSRA|=(1< 八、等待转换完成: while(!ADCSRA&(1< 九、转换完成后手动清ADC中断标志位: ADCSRA|=(1< 十、读取AD转换结果:从AD转换结果寄存器ADCH,ADCL读取结果。 读取ADCL 之后,ADC 数据寄存器一直要等到ADCH 也被读出才可以进行数据更新。因此,如果转换结果为左对齐,且要求的精度不高于8 比特,那么仅需读取ADCH 就足够了。否则必须先读出ADCL 再读ADCH。