本文主要是介绍第八节 CC254x内部温度传感器温度采集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第八节 CC254x内部温度传感器温度采集CC254x内部有一个温度传感器,我们这节使用这个传感器来采集芯片的温度,此传感器精度不高。不适合用于实际的工程中,这里只为演示AD采样。要使用内部的温度采集我们需要使用AD采样,所以我们需要先来了解CC254x的AD功能。在后续课程有对ADC的详细说明。
ADC结构图如下所示:
ADC控制寄存器1如下图所示:
我们使用手动触发的方式进行AD采样,所以STSEL = 11B,最低两位始终为1,最终ADCCON1=0x33。
ADC控制寄存器3如图所示:
ADC参考电压使用内部电压,采用12位精度采集。采集温度通道。所以ADCCON3= 0x3E。这里注意一点,ADCCON2和ADCCON3的配置是一样的,我们这里用ADCCON3来配置。
uint16 ADC_Read (uint8 channel)
{int16 reading = 0;uint8 adcChannel = 0x01<<channel;int16 Result = 0;if (channel <= 7) // 通道0-7需要通过P0.0-P0.7输入{ADCCFG |= adcChannel;}uint8 i=0;do{ADCCON3 = channel | 0x20; // 12位精度,启动转换while (!(ADCCON1 & 0x80)); // 等待转换完成// 读取采样结果reading = (int16)(ADCL);reading |= (int16)(ADCH << 8);reading >>= 4; // 丢弃低位Result += reading; // 累加}while(i++ < 10); // 连续采样10次if (channel <= 7){ADCCFG &= (adcChannel ^ 0xFF);}return (Result/10);
}
在读取温度值前,我们还需要使能温度传感器。
int main(void)
{float temp=0;char LCDBuf[21] = {0};SysStartXOSC(); // 启动外部晶振LCD12864_Init(); // LCD初始化// 打开温度传感器TR0 = 0x01;ATEST = 0x01;while(1){temp = (ADC_Read(TEMP_ADC_CHANNEL) - 1340) /10.0;sprintf(LCDBuf, " temp : %0.1f", temp); //LCD12864_DisStr(3, LCDBuf);SoftWaitUs(100000);}return 0;
}
采集的温度显示在LCD上,可以看到温度在跳动,这是由于AD的误差太大导致的,这里只做一个简单的实验,如果需要工程应用,建议外接温度传感器。把手放在芯片上可以看到温度在上升。温度采集结果如下图所示:
本文章转载自
http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/69222.aspx
请勿用于商业
这篇关于第八节 CC254x内部温度传感器温度采集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!