51/AVR单片机技术驿站!  <在线翻译>     便利工具    特色网址   无弹窗、无插件的绿色站点...  英才招聘   学历查询  喜欢>>收藏我站 

当前位置:首页 > 单片机技术文章 > AVR单片机 > 详细内容
AVR单片机ADC的应用
发布时间:2009/7/22  阅读次数:967  字体大小: 【】 【】【

来源:网络 源鹏 发表

AVR单片机ADC的应用

1.数模转换的基础知识  
           数模转换器(ADC)基本上是一个比例上的问题,即由ADC产生的数字值跟输入模拟量与转换器量程的比值有关的。转换关系如下:
           Vin/Vfullscale=X/(2N-1)  其中X是数字输出,N是数字输出的位数(ADC的位数),Vin是模拟输入量的值,Vfullscale是模拟输入量的最大值。
  数模转换的转换精度计算:
           Vresolution=Vfullscale/((2N-1)
2.AVR微控器的ADC介绍
  AVR微控器的ADC具有两个ADC寄存器:ADC控制与状态寄存器ADCSR控制ADC的运行;ADC多路复用选择器ADMUX,控制8个测量的模拟量输入。
ADEN
ADSC
ADFR
ADIF
ADIE
ADPS2
ADPS1
ADPS0
                                                                                                               表2-1 ADCSR位定义
    
                                              说明
ADEN
    ADC支持位设置为1则允许ADC
ADSC
    ADC开始转换位,设置为1则开始第一次轮换
ADFR
  ADC自由模式选择位,设置为1则允许自由模式
ADIF
  ADC中断标志
ADIE
  ADC中断屏蔽位,设置为1允许每个转换结束时产生中断
ADPS2
  ADC比例因子选择位
ADPS1
  ADC比例因子选择位
ADPS0
  ADC比例因子选择位
  
  为了ADC以最大的精度操作时,要求使用50HZ---200K HZ之间的时钟频率,选择合适的比例分频因子以获得50HZ---200KHZ的转换频率。由于ADC的速度比较慢,如果处理器在ADC转换数据时处于等待状态,会浪费时间,则ADC通常采用中断模式。ADC初始化:
            (1) 设置ADCSR的最低三位,确定分频因子
            (2)       设置ADIE为1,打开中断模式
            (3) 设置ADEN为高电平,使ADC有效
            (4)   设置ADSC,以马上开始转换
3.应用
  系统功能:当在模拟通道3输入电压超过3V时,系统点亮红色LED;当输入电压小于2V时,点亮黄色LED,当输入电压在2V--3V间,点亮绿色LED.
               硬件连接:三个LED分别接至AT908535的PORD口的PORTD.0、 PORTD.1、PORTD.2 AVR微控制器的ADC外设会根据所使用的具体微控制器而有所不同,所有的ADC都对VCC连接中的引脚电压有噪声抑制要求,有些拥有内置的噪声消除器,有些则拥用在内部控制Vref的能力,使用ADC时需要查看相关微控制器的手册。
  程序代码:
#i nclude<90s9535.h>
#define LEDS PORTD
#define red 0xfe
#define yellow 0xfd
#define green 0xfc
#define uchar unsigned char
interrupt[ADC_INT] void adc_isr(void)
{
     uchar adc_data;             //variable for ADC result
     adc_data=ADCW;     //read all 10bits into variable
   if(adc_data>(3*1023)/5)
           LEDS=red;
  else(adc_data<(2*1023)/5)
           LEDS=yellow;
   else
         LEDS=green;
     ADCSR=ADCSR|0x40;                 //start the next conversion
}
void main()
{
  DDRD=0x07;                                               //least signifcant 3 bits for output
ADMUX=0x03;                                                //select to read only channel 3
ADCSR=0xCE;                                               //ADC中断,64分频
#asm("sei")
while(1);                                                                   //等待ADC中断产生
}
我要评论
  • 匿名发表
  • [添加到收藏夹]
  • 发表评论:(匿名发表无需登录,已登录用户可直接发表。) 登录状态:未登录
最新评论
所有评论[0]
    暂无已审核评论!

网站导航 管理登陆 ┊ 免责声明 问题反馈  友链说明
本站部分内容来自网络共享资源,如有冒犯您的权利请来信告之删除或纠正!
不得对本站进行复制、盗链或镜像,转载内容须获得同意或授权;欢迎友情链接、站务合作!

    我要报警 Alexa
 mcusy_cn#126.com (请把#改成@) 交流:522422171
本站学习交流群:138..158(高级群1-)、77930286(高级群2)、61804809(群3)
Copyright© MCUSY All Rights Reserved
本站网警备案号: WZ36040002485
  ICP备案证书号:粤ICP备09034963号