TI CC2530 学习笔记-13-NewBit-CC2530-ADC-内部温度传感器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21352095/article/details/83046830

TI CC2530 学习笔记-目录
功能:使用CC2530的ADC对内部温度传感器进行采样,并计算采样结果所对应的真实值,温度值通过串口发送,同时翻转LED灯,CC2530的温度传感器并不精准,请勿在精度要求在5度以内的场合使用。外界温度变化不会立刻体现的采样结果上,如果使用打开的电烙铁靠近CC2530,采样结果会快速发生变化,请尽量不要用手直接接触CC2530来验证内部温度传感器。静电可能会导致芯片损坏。每1000毫秒对温度进行一次更新。

  1. 配置温度传感器等
 halMcuWaitUs(10000);  //等待时间稳定,约10ms
  CLKCONCMD &= ~0x47;   //选择外部32MHZ时钟, 不分频
                        //TICKSPD不改变,保持为0x01,即定时器标记频率为16MHz
  while( (CLKCONSTA & 0x47) != 0x00 ); //切换时钟源后再次等待稳定
  P0DIR |= 0x40;    //配置IO为输出
  /* 初始化串口 */
  P0SEL |= 0x0C; //将P02,P03设为外设功能
  PERCFG &= ~0x01;   //串口0占用P02 P03
  U0CSR = 0X80;    //USART模式设为UART模式
  U0UCR = 0x00;    //禁用流控,禁用奇偶检验,1位停止位
  U0CSR |= 0x40;    //允许接收
  U0GCR   |= 8;     //9600
  U0BAUD  =  59;
  IEN0 |= 0x04;     //开串口0接收中断
  
  /* 初始化定时器3 */
  T3CTL = 0xE2;   //128分频(0.125Mhz),模模式
  T3CCTL0 = 0x04; //比较模式
  T3CC0 = 125;    //溢出值
  T3CTL |= 0x08;  //打开溢出中断
  T3CCTL0 |= 0x40;//开T3通道0中断
  T3IE = 1;        //定时器3中断使能
  T3CTL |= 0x10;  //启动定时器
  IEN0 |= 0X80;   //开总中断
  
  /* 温度传感器初始化 */
  TR0 |= 0x01;//连接温度传感器到SOC_ADC
  ATEST |= 0x01;  //使能温度传感器
  LED_R_IO = LED_R_ACTIVE;
  
  /* 取校准用的值*/
  adc = ADCL;
  adc = ADCH;       //清除ADCCON1.EOC标志  
  ADCCON3 = 0x3E;   //内部参考电压,12位有效精度,对温度传感器进行采样
  while (!(ADCCON1 & 0x80));//等待转换完成
  gVoltageAtTemp25 = ADCL;//保存第一次采集的数据,用于后面的校正
  gVoltageAtTemp25 |= (uint16)ADCH << 8;
  gVoltageAtTemp25 >>= 4;//去除低4位
  1. 在while循环里检测温度
  while(1)
  {
    /* 检查是否需要打印 */
    if (gSample == 1)
    {
      gSample = 0;      
      adc = ADCL;
      adc = ADCH;       //清除ADCCON1.EOC标志
      ADCCON3 = 0x3E;   //内部参考电压,12位有效精度,对温度传感器进行采样
      while (!(ADCCON1 & 0x80));//等待转换完成
      adcResult = ADCL;
      adcResult |= (uint16)ADCH << 8;
      adcResult >>= 4;//去除低4位
      tResult = 25 + ((float)adcResult - gVoltageAtTemp25) / 4.5;//温度校正
      tString[0] = (uint16)tResult / 10 + '0';
      tString[1] = (uint16)tResult % 10 + '0';
      tString[2] = 'C';
      tString[3] = '\n';
      halUart0SendString(tString,4);  
      LED_R_TOG();
    }
  }

代码:NewBit-ZDK CC2530 基础例程

猜你喜欢

转载自blog.csdn.net/qq_21352095/article/details/83046830