cc2530 adc测外部电压

来源:网络整理 作者:2017年11月07日 18:53
关键词:CC2530adc
  CC2530 是用于2.4-GHz IEEE 802.15.4、ZigBee 和RF4CE 应用的一个真正的片上系统(SoC)解决方案。它能够以非常低的总的材料成本建立强大的网络节点。   要在zigbee的组网中加入烟雾传感器的模块,所以需要用到cc2530的ADC对传感器输出的模拟信号进行采样。下面是自己对实现用CC2530的ADC采集外部电压的程序过程。   以下是ADC的配置:   #include《iocc2530.h》   #include“adc.h”   #include“uart.h”   #include《stdio.h》   #include“led.h”   #define VDD_REF 3.3   float ADCValue = 0.0;//global ,传递电压值   /**************************************************************   *funcTIon:ADInit()   *This funciton is order to iniTIalize ADC of CC2530   *单次采样,采用端口为P0.6   **************************************************************/   void ADInit(void)   {   uint ADCREGValue = 0;   SET_IO_PORT_DIR(0,6,IO_IN);//设置P0..6为输入模式   ADC_ENABLE_CHANNEL(6); //使能通道6作为ADC的采样通道   ADC_SINGLE_CONVERSION(ADC_REF_AVDD|ADC_12_BIT| ADC_AIN6); //配置ADC参数,参考电压为AVDD5引脚电压,抽取率为512(12位分辨率)   ADC_SAMPLE_SINGLE(); //启动单次采样   while(!(ADCCON1&0x80)) ;//等待AD转换完成   // while ( !ADCIF );   /*获取结果,并转换为电压*/   ADCREGValue = ADCL》》4;//程序中设置的是12bit的精度,取低4位值   ADCREGValue |= ADCH《《4; //高八位值   ADCValue = (float)(ADCREGValue/(float)2048)*3.3;//此处有疑问,本来是12bit的精度,除数应该是4096的,但是得用2048才能得到准确的值   }   以下是UART0的配置:   #include《iocc2530.h》   #include“uart.h”   void UARTInit(void)   {   PERCFG = 0; //配置UART0的IO位置为备用位置1   P0SEL = 0x3c; //P0.2-PO.5设置为外设功能的端口   P2DIR &= ~(3《《6);//设置UART0为第一优先级,UART1为第二优先级,   U0CSR |= (1《《7); //select the mode as UART mode   U0GCR |= 0x09;   U0BAUD |= 59; //19200   UTX0IF = 1; //clear the interrupt flag   U0CSR |= (1《《6); //enable receive bit   IEN0 |= 0x84;   }   /*********************************************************   note: “length” is the length of one line   **********************************************************/   void UARTSend(char *data,int length)   {   int i;   for(i=0;i《length;i++)   {   U0DBUF = *data;   data++;   while(UTX0IF==0); // complete receive   UTX0IF = 0; //clear the flag   }   U0DBUF =0x0A; //carriage return   while(UTX0IF==0); // complete receive   UTX0IF = 0;   }   以下是主函数:   #include《iocc2530.h》   #include“adc.h”   #include“uart.h”   #include“led.h”   #include《stdio.h》   #include 《string.h》   void delay(uint n);   void ClockInit(void);   void main(void)   {   char i = 0;   char TempValue[10];   float average ;   char len;   P1_0 = 0;   ClockInit();   UARTInit();   SET_IO_PORT_DIR(1,0,IO_OUT); //设置LED,作为ADC采样进行的标志   IO_FUNC_PORT_PIN(1, 0, IO_FUNC_GIO);//INIT_LED();   IEN0 =IEN1=IEN2 =0;   while(1)   {   average = 0.0;   for(i=0;i《64;i++)//取64次均值   {   ADInit();   average +=ADCValue;   }   average /=64;   LED();   sprintf(TempValue,“%fV\r”,(float)average);//将数值格式化为字符串   len = strlen(TempValue);//字符串的长度   UARTSend(TempValue,len);//向串口发送数据   delay(20000);   }   }   /***********************************************************   初始化时钟参数   *************************************************************/   void ClockInit(void)   {   CLKCONCMD = 0x28; //时器计数时钟设定为1M Hz, 系统时钟设定为32 MHz   while(CLKCONSTA & 0x40); //等晶振稳定   }   串口显示结果:   cc2530 adc测外部电压   一开始的时候,读取出来的AD数值完全不对,最后发现是之前选取板子上的采样端口出现问题,换了P0.6之后,效果就好多了,估计就是由于端口复用的造成的影响。弄好了基本的驱动,后面得开始将程序添加到ZIGBEE的模块中,实现组网。
关注88lifa利发国际娱乐微信
有趣有料的资讯及技术干货
下载发烧友APP
打造属于您的人脉电子圈
关注发烧友课堂
锁定最新课程活动及技术直播
声明:88lifa利发国际娱乐网转载作品均尽可能注明出处,该作品所有人的一切权利均不因本站而转移。
作者如不同意转载,既请通知本站予以删除或改正。转载的作品可能在标题或内容上或许有所改动。
收藏 人收藏
分享:

相关阅读

  1. 全部
  2. CC2530
  3. adc
发表评论
elecfans网友
分享到:

用户评论(0

88lifa利发国际娱乐

百度360搜索搜狗搜索