找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3718|回复: 2
打印 上一主题 下一主题
收起左侧

cc2530的ADC精度解释

[复制链接]
跳转到指定楼层
楼主
ID:99624 发表于 2015-12-27 03:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                                                                                                     cc2530的ADC精度解释                                                                                      转载                                                        2015-12-15 17:51:38               
                                          
                                                                                      在调试cc2530的上的ADC的小实验中,遇到的一些问题,想和大家一起分享一下。
关于ADC的使用需要注意以下几点:
1.关于配置的寄存器:IO口的配置,其实仔细用大脑想想不用看数据手册就应该想到,IO口要配置成为输入模式,以下摘自数据手册:当使用ADC时,端口0引脚必须配置为ADC输入。可以使用多达八个ADC输入引脚。要配置一个端口0脚为一个ADC输入,APCFG寄存器中相应的位必须设置为1。这个寄存器的默认值选择端口0引脚为非ADC,即数字输入输出。APCFG寄存器的设置将覆盖P0SEL的设置。
2.关于和ADC有关的几个寄存器,实验中使用的是ADCL和ADCH,主要放的是ADC转换完毕的值,控制ADC启用转换的是三个控制器,分类是这样的ADCCON1,ADCCON2,ADCCON3.其中ADCCON1,ADCCON2可以启用连续转换,而ADCCON3可以控制某一个通道执行一次转换。以上这些一般人都是可以通过看手册配置的,但是配置不是什么大问题,但是从ADCL和ADCH取值有疑问的。经过我的实验,我总结到一个规律:
  说实话,TI的CC2530的数据手册有点失败,不过还好ADC能用,数据手册上是说ADC的最大有效数据位为12位。令人奇怪的是却留给用户一个ADCH和ADCL的高6位总共14位,真是令人费解,说好呢12位呢?不禁让人猜想是不是本来设计的是14位,发现无法满足设计的要求,就成12位了,呵呵。
我用的是10位的有效数据,但是怎么从ADCH和ADCL拼凑这10位的数据,通过实验,我可以负责任地告诉大家,其实是这样算的。注我选的是以AVDD5作为参考电压的,AVDD5= 3.3V
例:ADCH为
01101100
ADCL为(注ADCL的低两位无效,读为0)
10101000

那么如何取值呢?经过计算,发现ADCH中最高位是带有一位的有效数字的,对于单端的ADC转换,转换的数据是大于0的,所以符号位为0,那么总共是10位的有效数字位,所以抛开符号位,那么ADCL取高3位,和ADCH的除了符号位的7位组成10位的数字,那么此时有效值为1101100101,转化为10进制的数是869,那么电压值此时为869/1024*3.3V*1000MV。
至于剩余的12位依次类推,可得到结果,需要注意的是对于电压值是0V的,会导致转换的值溢出的问题,需特别注意。





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:100748 发表于 2015-12-28 13:15 来自手机 | 只看该作者
值得学习的资料
回复

使用道具 举报

板凳
ID:433184 发表于 2018-12-29 10:24 | 只看该作者
老哥,请问代码编译时出现无法打开ADC头文件怎么办?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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