欢迎来到天天文库
浏览记录
ID:20251921
大小:34.00 KB
页数:3页
时间:2018-10-11
《atmega48adc模数转换例子》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、ATMEGA48的ADC模数转换例子ATMEGA48的ADC模数转换例子作者:佚名 AVR单片机来源:不详 点击数:1401 更新时间:2007-8-11 //ADC结果由串口输出到电脑显示#include#include#includevoidmain(void){ //外部时钟7.3728MHz(请取消时钟8分频) //串口初始化,波特率9600Hz,8个数据位,1个停止位,无奇偶校验,无中断使能 UCSR0B=8; UCSR0C=6; UBRR0L=47; //********************
2、********************************************* ADMUX=96; //设置参考电压为AVCC,结构左对齐(就是8位精度) ADCSRA
3、=135; //使能ADC,ADC时钟=系统时钟128分频 while(1) { unsignedcharadc; ADMUX=ADMUX&240
4、2; //清除已选择的ADC通道,选择新的ADC通道(0-7) ADCSRA
5、=64; //启动单次ADC转换 while((ADCSRA&16)==0);
6、 //等待ADC转换结束 adc=ADCH; //结果左对齐只需读取高8位数据 ADCSRA
7、=16; //清除ADC转换结束标记 putchar(adc/100+48); //从串口输出ADC的百位数 putchar(adc/10%10+48); //从串口输出ADC的十位数 putchar(adc%10+48); //从串口输出ADC的个位数 delay_ms(500); //延时 putchar(13); //回车 putchar(10);
8、 //换行 }}我选用的是单通道输入模式,AD转换周期为208uS,固定对通道0进行采样。奇怪的是,输入电压为0,当参考电压选择内部或者外加的2.56V时,采样值在0x1f和0x1e之间波动,当参考电压选择AVCC5.0V时,采样值在0x0f、0x0e和0x10之间波动。也就是说,相当于单片机内部叠加了一个约70mv(2.56*31/1023)的偏置电压。而且这个偏置电压会随着输入电压的增大而减少,0v时大概为70mv,2V时大概为50mv。这个现象同时在Atmega8L和Atmega16L上出现。想了、试了很久都没解决,有点怀疑是我买的单片机本身有问题。我是采
9、用查询方式读取AD转换结果的,以下是我的程序,请各位大侠帮忙侃侃呀~~~voidadc_init(void){ADCSR=0x00; ADMUX=0x40;ACSR =0x80;ADCSR=0x86;}unsignedintReadADC(void){ unsignedchari=0; CLI(); ADMUX&=0XF8; ADCSR
10、=0x40; while(!(ADCSR&0x10)); for(i=200;i>0;i--); ADCSR
11、=0x10
12、; // i=ADCL; // i+=(unsignedint)ADCH<<8; SEI(); returnADC;}答1:呵呵,终于找到原因了问题在于用做AD转换通道的IO要禁用内部上拉电阻,否则就会出现上述问题!!!另外,也要特别注意的是AD转换时钟不能太高,一般在50KHz~200KHz之间,否则AD转换结果会一直跳动,且不精确。答2:AVCC本来就是个很不稳定的源 拿AVCC来当基准,当然会跳!相关文章:步进电机的微步控制(也可以叫做细分)ATMEGA64串口下载上位机程序及BOOTLOAD程序笔记本上无并口时,怎么使用并口ISP?GC
13、CAVR和CodeVisionAVR编译实测对比[求助]一个外部中断问题(ATMEG)IAR的一次使用笔记,奇怪现象,仅作经验记录今天安装了cv的1248b的版本,程序优化做的很好2006年的最后一天怎么也的整个新版本progisp1.64痛恨ATMEL如何在ICCAVR中定义位变量?急哈~~全中国首发——USBAVRmkIILite,已正式发布!WINAVR出新版本了
此文档下载收益归作者所有