ATMEGA48的ADC模数转换例子.docVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ATMEGA48的ADC模数转换例子

ATMEGA48的ADC模数转换例子 ATMEGA48的ADC模数转换例子 作者:佚名????AVR单片机来源:不详????点击数: 1401????更新时间:2007-8-11 //ADC结果由串口输出到电脑显示 #include #include #include void main void //外部时钟 7.3728MHz 请取消时钟8分频 ? //串口初始化,波特率9600Hz,8个数据位,1个停止位,无奇偶校验,无中断使能 ? UCSR0B 8; ? UCSR0C 6; ? UBRR0L 47; ? //***************************************************************** ? ADMUX 96; //设置参考电压为AVCC,结构左对齐 就是8位精度 ? ADCSRA| 135; //使能ADC,ADC时钟 系统时钟128分频 ? while 1 unsigned char adc; ADMUX ADMUX240|2; //清除已选择的ADC通道,选择新的ADC通道 0-7 ADCSRA| 64; //启动单次ADC转换 while ADCSRA16 0 ;?? //等待ADC转换结束 adc ADCH; //结果左对齐只需读取高8位数据 ADCSRA| 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 ; //换行 我选用的是单通道输入模式,AD转换周期为208uS,固定对通道0进行采样。奇怪的是,输入电压为0,当参考电压选择内部或者外加的2.56V时,采样值在0x1f和0x1e之间波动,当参考电压选择AVCC 5.0V时,采样值在0x0f、0x0e和0x10之间波动。也就是说,相当于单片机内部叠加了一个约70mv (2.56 * 31/1023)的偏置电压。而且这个偏置电压会随着输入电压的增大而减少,0v时大概为70mv,2V时大概为50mv。 这个现象同时在Atmega8L和Atmega16L上出现。想了、试了很久都没解决,有点怀疑是我买的单片机本身有问题。我是采用查询方式读取AD转换结果的,以下是我的程序,请各位大侠帮忙侃侃呀~~~ void adc_init void ADCSR 0x00;?? ADMUX 0x40; ACSR?? 0x80; ADCSR 0x86; unsigned int ReadADC void unsigned char i 0 ; CLI ; ADMUX 0XF8 ; ADCSR | 0x40; while ! ADCSR 0x10 ; for i 200 ;i 0 ; i-- ; ADCSR | 0x10; //??i ADCL;?? //??i + unsigned int ADCH 8; SEI ; return ADC; 答 1: 呵呵,终于找到原因了问题在于用做AD转换通道的IO要禁用内部上拉电阻,否则就会出现上述问题!!! 另外,也要特别注意的是AD转换时钟不能太高,一般在50KHz~200KHz之间,否则AD转换结果会一直跳动,且不精确。 答 2: AVCC本来就是个很不稳定的源??拿AVCC来当基准,当然会跳! 相关文章: 步进电机的微步控制(也可以叫做细分) ATMEGA64 串口下载上位机程序及BOOTLOAD程序 笔记本上无并口时,怎么使用并口ISP? GCCAVR 和 CodeVision AVR 编译实测对比 [求助]一个外部中断问题 ATMEG IAR的一次使用笔记,奇怪现象,仅作经验记录 今天安装了cv的1248b的版本,程序优化做的很好 2006年的最后一天怎么也的整个新版本progisp1.64 痛恨ATMEL 如何在ICCAVR中定义位变量?急哈~~ 全中国首发——USB AVR mkII Lite,已正式发布! WINAVR出新版本了

文档评论(0)

peain + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档