找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

AVR单片机ADC的应用

[复制链接]
admin 发表于 2010-6-19 22:19:26 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
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中断产生
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-23 06:18 , Processed in 0.050532 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表