且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

zigbee学习之ADC采集芯片内部的温度

更新时间:2022-01-20 23:30:38

这个章节没得什么讲得,用的时候记得调用模块,自己配置一些寄存器。

ADC对自身芯片温度的采集:

void InitClock(void)//还是原来的味道
{   
    CLKCONCMD &= ~0x40;              //设置系统时钟源为 32MHZ晶振
    while(CLKCONSTA & 0x40);         //等待晶振稳定 
    CLKCONCMD &= ~0x47;              //设置系统主时钟频率为 32MHZ
}


void InitSensor(void)//温度传感器初始化函数

   IEN0 = IEN1 = IEN2 = 0x00     //关闭所有中断 
   InitClock();                  //设置系统主时钟为 32M 
   TR0=0x01;                     //设置为1来连接温度传感器到SOC_ADC
   ATEST=0x01;                   //使能温度传感
}   


float GetTemperature(void)//获取温度传感器 AD 值 通过计算返回实际的温度值

   uint  value; 
   
   ADCCON3  = (0x3E);            //选择1.25V为参考电压;14位分辨率;对片内温度传感器采样
   ADCCON1 |= 0x30;              //选择ADC的启动模式为手动
   ADCCON1 |= 0x40;              //启动AD转化  
   while(!(ADCCON1 & 0x80));     //等待 AD 转换完成 
   value =  ADCL >> 4;           //ADCL 寄存器低 2 位无效,由于他只有12位有效,ADCL寄存器低4位无效。网络上很多代码这里都是右移两位,那是不对的
   value |= (((uint)ADCH) << 4);
   
   return (value-1367.5)/4.5-5;  //根据 AD 值,计算出实际的温度,芯片手册有错,温度系数应该是4.5 /℃
                                 //进行温度校正,这里减去5℃(不同芯片根据具体情况校正)
}


 sprintf(strTemp,"%.02f", AvgTemp);//将浮点数转成字符串