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<<REFS1)|(1<<REFS0);  //选择AVCC为ADC的参考电压

     二、设置转换结果的对齐方式:ADMUX|=(1<<ADLAR);  //转换结果左对齐

     三、选择ADC输入通道:ADMUX|=(0<<MUX4)|(0<<MUX3)|(0<<MUX2)|(0<<MUX1)|(0<<MUX0);        //选择通道ADC0

    四、设置ADC的时钟分频系数:ADCSRA|=(1<<ADPS2)|(0<<ADPS1)|(1<<ADPS0);  //时钟分频系数为64

    五、使能A/D 转换: ADCSRA|=(1<<ADEN); 使能AD中断:ADCSRA|=(1<<ADIE);

    六、中断总使能: SREG=0X80;

   七、 启动AD转换: ADCSRA|=(1<<ADSC)  /启动一次AD转换

    八、等待转换完成: while(!ADCSRA&(1<<ADIF))); //ADIF 为1时表示AD转换完成

    九、转换完成后手动清ADC中断标志位: ADCSRA|=(1<<ADIF);

    十、读取AD转换结果 :从AD转换结果寄存器ADCH,ADCL读取结果。

           读取ADCL 之后,ADC 数据寄存器一直要等到ADCH 也被读出才可以进行数据更新。因此,如果转换结果为左对齐,且要求的精度不高于8 比特,那么仅需读取ADCH 就足够了。否则必须先读出ADCL 再读ADCH。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值