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中断产生 |