zigbee學習之ADC採集晶片內部的溫度
阿新 • • 發佈:2019-02-02
這個章節沒得什麼講得,用的時候記得呼叫模組,自己配置一些暫存器。
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);//將浮點數轉成字串