1. 程式人生 > >zigbee學習之ADC採集晶片內部的溫度

zigbee學習之ADC採集晶片內部的溫度

這個章節沒得什麼講得,用的時候記得呼叫模組,自己配置一些暫存器。

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);//將浮點數轉成字串