打印
[蓝牙]

分享CC2541蓝牙学习有关ADC

[复制链接]
362|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2020-11-3 10:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于程序注意以下几点:
    1、要配置一个端口0脚为一个ADC输入,APCFG寄存器中相应的位必须设置为1。这个寄存器的默认值选择端口0引脚为非ADC,即数字输入输出。APCFG寄存器的设置将覆盖P0SEL的设置,所以无需再配置P0SEL,另外对于I/O口作为外设功能,都无需配置方向,即无需配置寄存器PxDIR。

    2、对于单次ADC转换的配置,只需要配置寄存器ADCCON3,无需配置寄存器ADCCON1和ADCCON2。对于判断转换是否结束,还有一种判断方法:
1   ADCCON1 |=0X30;              //ADC启动方式选择为ADCCON1.ST=1事件
2   ADCCON1 |= 0x40;             //启动转换
3   while(!(ADCCON1 & 0x80));    //等待 AD 转换完成
    ADCCON1.STSEL是用于启动转换序列的触发方式的,对于单次ADC转换,个人感觉这样配置不好,以后对于单次ADC转换,不采用这种判断方式。
单次转换判断是否转换结束:判断ADC中断标志ADCIF。

    3、ADCH的最高位是符号位,对于单次测量,结果总是正的,所以符号位总是0。14位的ADC转换值有效值并不是14位的。
有效分辨率如下:
00: 64 decimation rate (7 bits ENOB)----ADCH低7位
01: 128 decimation rate (9 bits ENOB)---ADCH低7位+ADCH高2位
10: 256 decimation rate (10 bits ENOB)--ADCH低7位+ADCH高3位
11: 512 decimation rate (12 bits ENOB)--ADCH低7位+ADCL高5位
例如:采集VDD/3值时,使用12位分辨率,参考电压AVDD5:3.3V
VDD/3 = vddvalue*3.3/2^11
扩大10倍
VDD/3 = vddvalue*33/2^11
为什么是除以2^11而不是2^12,因为最高位是符号位,12位分辨率实际上只有11位。
VDD = (vddvalue*33/2^11) * 3
   4、差分输入可以用来做比较器。比如通道ADCCON3.ECH=1000,对应差分输入AIN0-AIN1。如果要比较一个模拟信号和另一个模拟信号的大小关系,只需要将这两个信号分别接入AIN0和AIN1,然后判断ADCH的最高位,如果是1,则AIN0<AIN1,如果是0,则AIN0>=AIN1。

    5、最大转换电压等于参考电压,而参考电压的选择不能大于芯片的电源电压,一般为3.3V。虽然差分输入可以转换负电压,但是每一个模拟输入引脚都必须是正电压且小于电源电压VDD,负电压是指两个输入通道的差值。

使用特权

评论回复

相关帖子

沙发
gwsan| | 2020-12-1 09:09 | 只看该作者
介绍的非常详细啊

使用特权

评论回复
板凳
kxsi| | 2020-12-1 09:09 | 只看该作者
在配置这块还是很有讲究的

使用特权

评论回复
地板
nawu| | 2020-12-1 09:12 | 只看该作者
读取数据也要及时

使用特权

评论回复
5
qcliu| | 2020-12-1 09:12 | 只看该作者
多个端口配置需要注意什么

使用特权

评论回复
6
tfqi| | 2020-12-1 09:13 | 只看该作者
有一个转换结束标志可以进行判定

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

980

主题

4028

帖子

10

粉丝