专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
电路设计
CC2530的最高ADC是12位吗?有效位是多少?
2019-07-16 13:40
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
电路设计
8314
7
1766
看了CC2530的中文手册,上面写道最高ADC位数是12位,然而在协议栈里可以看到抽取率可以选14位。通俗一点说,CC2530最高的12位ADC采集数据时,是将数据精分成2的12次方=4096份,还是分成2的11次方=2048份?这里有一个有效位的概念,我没有弄清楚,大家思考过吗?
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
Aner58
2019-07-17 09:40
楼主你好,向你请教一下,我在用CC2530的P0_7引脚采集外部电压时,采集显示的一直是参考电压值(3.23V),这是为什么呢?
#include "ioCC2530.h"
#define uint unsigned int
#define ConversionNum 20
//定义控制灯的端口
#define LED1 P1_0
#define LED2 P1_1
char temp[2];
uint adc;
float num;
void Delay(uint);
void InitialAD(void);
void initUARTtest(void);
void UartTX_Send_String(char *Data,int len);
char adcdata[]=" 0.00V ";
/****************************************************************
*函数功能 :主函数 *
*入口参数 :无 *
*返 回 值 :无 *
*说 明 :无 *
****************************************************************/
void main(void)
{
//P1控制LED
P1DIR = 0x03;
//关LED
LED1 = 1;
LED2 = 1;
//初始化ADC
InitialAD();
initUARTtest();
while(1)
{
//等待ADC转换完成
if(ADCCON1&0x80)
{
//转换完毕指示
temp[1] = ADCL;
temp[0] = ADCH;
//初始化AD
InitialAD();
//开始下一转换
ADCCON1 |= 0x40;
//adc赋值
adc |= (uint)temp[1]>>4;
adc |= ( (uint) temp[0] )<<4;
if(adc&0x8000)
{adc = 0;}
else
{
num = adc*3.3/2048;//8192;//8096;//7686
//定参考电压为3.3V。14位精确度
adcdata[1] = (char)(num)%10+48;
adcdata[3] = (char)(num*10)%10+48;
adcdata[4] = (char)(num*100)%10+48;
UartTX_Send_String(adcdata,6);
}
//完成数据处理
Delay(30000);
LED1 = ~LED1;
Delay(30000);
}
}
}
/****************************************************************
*函数功能 :延时 *
*入口参数 :定性延时 *
*返 回 值 :无 *
*说 明 : *
****************************************************************/
void Delay(uint n)
{
uint i;
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
}
/****************************************************************
*函数功能 :初始化ADC *
*入口参数 :无 *
*返 回 值 :无 *
*说 明 :参考电压AVDD,转换对象是1/3AVDD *
****************************************************************/
void InitialAD(void)
{
//清EOC标志
ADCH &= 0X00;
//P0.6端口模拟I/O使能
APCFG |= 0X80;//0x80
//单次转换,参考电压为电源电压,对P07进行采样 12位分辨率
ADCCON3=0xb7;//0xb7
//停止A/D
ADCCON1 = 0X30;
//启动A/D
ADCCON1 |= 0X40;
}
/****************************************************************
*函数功能 :初始化串口1
*入口参数 :无
*返 回 值 :无
*说 明 :57600-8-n-1
****************************************************************/
void initUARTtest(void)
{
//晶振选择32MHz
CLKCONCMD &= ~0x40;
//等待晶振稳定
while(!(SLEEPSTA & 0x40));
//TICHSPD128分频,CLKSPD不分频
CLKCONCMD &= ~0x47;
//关闭不用的RC振荡器
SLEEPCMD |= 0x04;
//使用串口备用位置1 P0口
PERCFG = 0x00;
//P0用作串口
P0SEL = 0x3c;
//选择串口0优先作为串口
P2DIR &= ~0XC0;
//UART方式
U0CSR |= 0x80;
//波特率baud_e的选择
U0GCR |= 10;
//波特率设为57600
U0BAUD |= 216;
//串口0发送中断标志清零
UTX0IF = 0;
}
/****************************************************************
*函数功能 :串口发送字符串函数
*入口参数 : data:数据
* len :数据长度
*返 回 值 :无
*说 明 :
****************************************************************/
void UartTX_Send_String(char *Data,int len)
{
int j;
for(j=0;j<len;j++)
{
U0DBUF = *Data++;
while(UTX0IF == 0);
UTX0IF = 0;
}
}
复制代码
加载中...
查看其它7个回答
一周热门
更多
>
相关问题
如何打开.DDB后缀的文件
2 个回答
关于AD20 使用出现GPU设备暂停提示
1 个回答
[求助]什么是振荡器?
3 个回答
武汉大学电子科学与技术系2009年工程硕士研究生(集成电路工程和电子与通信工程)招
1 个回答
有做激光测距或相关产品的同行请加入这个群,交流一下技术经验
4 个回答
相关文章
DXP,AD不用新建PCB完美解决 Unknown Pin 和Failed to add class
0个评论
protel Altium Designer的使用总结:覆铜 打印 设置 netlable 快捷键等
0个评论
0805,0603,1206这些封装的名字是什么来的
0个评论
这些机房布线规范你都知道吗
0个评论
AD18集成库无法使用解决办法
0个评论
PCB设计中专业英译术语之综合词汇(基础介绍)
0个评论
PCB设计中的电源信号完整性的考虑
0个评论
PCB-从零开始
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
电路设计
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- #include "ioCC2530.h"
- #define uint unsigned int
- #define ConversionNum 20
- //定义控制灯的端口
- #define LED1 P1_0
- #define LED2 P1_1
- char temp[2];
- uint adc;
- float num;
- void Delay(uint);
- void InitialAD(void);
- void initUARTtest(void);
- void UartTX_Send_String(char *Data,int len);
- char adcdata[]=" 0.00V ";
- /****************************************************************
- *函数功能 :主函数 *
- *入口参数 :无 *
- *返 回 值 :无 *
- *说 明 :无 *
- ****************************************************************/
- void main(void)
- {
- //P1控制LED
- P1DIR = 0x03;
- //关LED
- LED1 = 1;
- LED2 = 1;
-
- //初始化ADC
- InitialAD();
- initUARTtest();
- while(1)
- {
- //等待ADC转换完成
- if(ADCCON1&0x80)
- {
- //转换完毕指示
- temp[1] = ADCL;
- temp[0] = ADCH;
- //初始化AD
- InitialAD();
- //开始下一转换
- ADCCON1 |= 0x40;
- //adc赋值
- adc |= (uint)temp[1]>>4;
- adc |= ( (uint) temp[0] )<<4;
-
- if(adc&0x8000)
- {adc = 0;}
- else
- {
- num = adc*3.3/2048;//8192;//8096;//7686
- //定参考电压为3.3V。14位精确度
- adcdata[1] = (char)(num)%10+48;
- adcdata[3] = (char)(num*10)%10+48;
- adcdata[4] = (char)(num*100)%10+48;
- UartTX_Send_String(adcdata,6);
- }
- //完成数据处理
- Delay(30000);
- LED1 = ~LED1;
- Delay(30000);
- }
- }
- }
- /****************************************************************
- *函数功能 :延时 *
- *入口参数 :定性延时 *
- *返 回 值 :无 *
- *说 明 : *
- ****************************************************************/
- void Delay(uint n)
- {
- uint i;
- for(i=0;i<n;i++);
- for(i=0;i<n;i++);
- for(i=0;i<n;i++);
- for(i=0;i<n;i++);
- for(i=0;i<n;i++);
- }
- /****************************************************************
- *函数功能 :初始化ADC *
- *入口参数 :无 *
- *返 回 值 :无 *
- *说 明 :参考电压AVDD,转换对象是1/3AVDD *
- ****************************************************************/
- void InitialAD(void)
- {
-
- //清EOC标志
- ADCH &= 0X00;
- //P0.6端口模拟I/O使能
- APCFG |= 0X80;//0x80
- //单次转换,参考电压为电源电压,对P07进行采样 12位分辨率
- ADCCON3=0xb7;//0xb7
- //停止A/D
- ADCCON1 = 0X30;
- //启动A/D
- ADCCON1 |= 0X40;
- }
- /****************************************************************
- *函数功能 :初始化串口1
- *入口参数 :无
- *返 回 值 :无
- *说 明 :57600-8-n-1
- ****************************************************************/
- void initUARTtest(void)
- {
- //晶振选择32MHz
- CLKCONCMD &= ~0x40;
- //等待晶振稳定
- while(!(SLEEPSTA & 0x40));
- //TICHSPD128分频,CLKSPD不分频
- CLKCONCMD &= ~0x47;
- //关闭不用的RC振荡器
- SLEEPCMD |= 0x04;
- //使用串口备用位置1 P0口
- PERCFG = 0x00;
- //P0用作串口
- P0SEL = 0x3c;
- //选择串口0优先作为串口
- P2DIR &= ~0XC0;
- //UART方式
- U0CSR |= 0x80;
- //波特率baud_e的选择
- U0GCR |= 10;
- //波特率设为57600
- U0BAUD |= 216;
- //串口0发送中断标志清零
- UTX0IF = 0;
- }
- /****************************************************************
- *函数功能 :串口发送字符串函数
- *入口参数 : data:数据
- * len :数据长度
- *返 回 值 :无
- *说 明 :
- ****************************************************************/
- void UartTX_Send_String(char *Data,int len)
- {
- int j;
- for(j=0;j<len;j++)
- {
- U0DBUF = *Data++;
- while(UTX0IF == 0);
- UTX0IF = 0;
- }
- }
复制代码一周热门 更多>