CC2530的最高ADC是12位吗?有效位是多少?

2019-07-16 13:40发布

看了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),这是为什么呢?



  1. #include "ioCC2530.h"
  2. #define uint unsigned int

  3. #define ConversionNum 20
  4. //定义控制灯的端口
  5. #define LED1 P1_0
  6. #define LED2 P1_1

  7. char temp[2];
  8. uint adc;
  9. float num;

  10. void Delay(uint);
  11. void InitialAD(void);
  12. void initUARTtest(void);
  13. void UartTX_Send_String(char *Data,int len);

  14. char adcdata[]=" 0.00V ";





  15. /****************************************************************
  16. *函数功能 :主函数                                                *
  17. *入口参数 :无                                                        *
  18. *返 回 值 :无                                                        *
  19. *说    明 :无                                                        *
  20. ****************************************************************/
  21. void main(void)
  22. {        

  23.         //P1控制LED
  24.         P1DIR = 0x03;
  25.         //关LED
  26.         LED1 = 1;
  27.         LED2 = 1;               
  28.      
  29.         //初始化ADC
  30.         InitialAD();
  31.         initUARTtest();
  32.         while(1)
  33.         {
  34.                //等待ADC转换完成
  35.                 if(ADCCON1&0x80)
  36.                 {
  37.                           //转换完毕指示
  38.                         temp[1] = ADCL;
  39.                         temp[0] = ADCH;
  40.                         //初始化AD
  41.                         InitialAD();
  42.                         //开始下一转换
  43.                         ADCCON1 |= 0x40;                  
  44.                         //adc赋值
  45.                         adc |= (uint)temp[1]>>4;
  46.                         adc |= ( (uint) temp[0] )<<4;
  47.                         
  48.                         if(adc&0x8000)
  49.                         {adc = 0;}
  50.                         else
  51.                         {
  52.                         num = adc*3.3/2048;//8192;//8096;//7686
  53.                         //定参考电压为3.3V。14位精确度
  54.                         adcdata[1] = (char)(num)%10+48;
  55.                         adcdata[3] = (char)(num*10)%10+48;
  56.                         adcdata[4] = (char)(num*100)%10+48;
  57.                         UartTX_Send_String(adcdata,6);
  58.                         }
  59.                        //完成数据处理                                
  60.                         Delay(30000);
  61.                         LED1 = ~LED1;                       
  62.                         Delay(30000);         
  63.                 }
  64.         }
  65. }


  66. /****************************************************************
  67. *函数功能 :延时                                                *
  68. *入口参数 :定性延时                                                *
  69. *返 回 值 :无                                                        *
  70. *说    明 :                                                        *
  71. ****************************************************************/
  72. void Delay(uint n)
  73. {
  74.         uint i;
  75.         for(i=0;i<n;i++);
  76.         for(i=0;i<n;i++);
  77.         for(i=0;i<n;i++);
  78.         for(i=0;i<n;i++);
  79.         for(i=0;i<n;i++);
  80. }


  81. /****************************************************************
  82. *函数功能 :初始化ADC                                                *
  83. *入口参数 :无                                                        *
  84. *返 回 值 :无                                                        *
  85. *说    明 :参考电压AVDD,转换对象是1/3AVDD                        *
  86. ****************************************************************/
  87. void InitialAD(void)
  88. {
  89.         
  90.         //清EOC标志
  91.         ADCH &= 0X00;
  92.         //P0.6端口模拟I/O使能
  93.         APCFG |= 0X80;//0x80
  94.         //单次转换,参考电压为电源电压,对P07进行采样 12位分辨率
  95.         ADCCON3=0xb7;//0xb7               
  96.         //停止A/D                                       
  97.         ADCCON1 = 0X30;               
  98.         //启动A/D
  99.         ADCCON1 |= 0X40;        

  100. }
  101. /****************************************************************
  102. *函数功能 :初始化串口1                                                                                
  103. *入口参数 :无                                                                                                
  104. *返 回 值 :无                                                        
  105. *说    明 :57600-8-n-1                                                
  106. ****************************************************************/
  107. void initUARTtest(void)
  108. {
  109.     //晶振选择32MHz
  110.     CLKCONCMD &= ~0x40;  
  111.     //等待晶振稳定
  112.     while(!(SLEEPSTA & 0x40));
  113.     //TICHSPD128分频,CLKSPD不分频
  114.     CLKCONCMD &= ~0x47;
  115.     //关闭不用的RC振荡器
  116.     SLEEPCMD |= 0x04;                  
  117.     //使用串口备用位置1 P0口
  118.     PERCFG = 0x00;                                
  119.     //P0用作串口
  120.     P0SEL = 0x3c;                                
  121.     //选择串口0优先作为串口
  122.     P2DIR &= ~0XC0;                             
  123.     //UART方式
  124.     U0CSR |= 0x80;                                
  125.     //波特率baud_e的选择
  126.     U0GCR |= 10;        
  127.     //波特率设为57600
  128.     U0BAUD |= 216;
  129.     //串口0发送中断标志清零
  130.     UTX0IF = 0;
  131. }

  132. /****************************************************************
  133. *函数功能 :串口发送字符串函数                                       
  134. *入口参数 : data:数据                                                                        
  135. *                        len :数据长度                                                        
  136. *返 回 值 :无                                                                                       
  137. *说    明 :                                
  138. ****************************************************************/
  139. void UartTX_Send_String(char *Data,int len)
  140. {
  141.   int j;
  142.   for(j=0;j<len;j++)
  143.   {
  144.     U0DBUF = *Data++;
  145.     while(UTX0IF == 0);
  146.     UTX0IF = 0;
  147.   }
  148. }
复制代码

一周热门 更多>