1. 程式人生 > >TI CC2541從機中新增電池服務

TI CC2541從機中新增電池服務

(1)電池服務的作用:

可以實時檢測配備電池的電量情況,可以提醒使用者及時更換電池或者充電.

(2)實現原理:

如果對微控制器有點基礎的就應該知道AD採集(將電壓值轉化成對應的數字值),所以需要我們設定對應的參考值,直觀就是設定電量100%和0%時對應的電壓值。

假設設定2V對應0%,3V對應100%,2V(為CC2541晶片工作電壓的最低值)時對應的AD值是BATT_ADC_LEVEL_2V,3V時對應的AD值為BATT_ADC_LEVEL_3V ,那麼AD值在 B-D直接的數值就代表電量從0到100%,這樣只要獲取當前的AD值進行數值比對就可以得到當前電量了,推薦BATT_ADC_LEVEL_2V值為:287,BATT_ADC_LEVEL_3V 

值為425。具體的轉換方式就是對AD暫存器進行讀取就可以了,AD處理模組以及自動幫我們處理好了。CC2541提供了兩種精確度的採集方式:十位和十二位,說是十位和十二位其實就是9位和11位,最高位是符號位,這個可以用來獲取電量不同精確度而已。看專案需求進行選擇就可以。原始碼中預設的是

#define HAL_ADC_CHN_VDD3    0x0f    /* VDD/3 */十位的精確度。(hal_adc.h)

(3)在TI CC2541中實現

步驟一:在工程中新增hal_adc.c和hal_adc.h,這兩個檔案看名字就知道是關於AD的。

步驟二:在工程的PROFILES分類中新增battservice.c與battservice.h兩個檔案


步驟三:IAR設定中新增倆路徑(batt和HidDev)

這裡有人可能疑惑為什麼要新增HidDev,這是為了初期的編譯,其實這部分可以不用新增


步驟四:新增AD巨集

步驟五:修改程式碼

到這裡準備工作就做完了,下面就是對程式碼部分進行修改,

a)新增電池服務的標頭檔案(#include "battservice.h")到simpleBLEPeripheral.c中。

    b)通過在simpleBLEPeripheral.c的SimpleBLEPeripheral_Init()函式中新增如下程式碼實現初始化電池電量服務,

  1. {     
  2.     uint8 critical = DEFAULT_BATT_CRITICAL_LEVEL;  
  3.     Batt_SetParameter( BATT_PARAM_CRITICAL_LEVEL, sizeof (uint8 ), &critical );/* 設定預設臨界電量 */
  4.   }  

c)在檔案simpleBLEPeripheral.c中定義電池電量服務的回撥函式

  1. staticvoid BattCB(uint8 event)  
  2. {  
  3.   if (event == BATT_LEVEL_NOTI_ENABLED)  
  4.   {  
  5.     if (gapProfileState == GAPROLE_CONNECTED)  
  6.     {         
  7.   //新增需要的服務程式碼
  8.     }   
  9.   }  
  10.   elseif (event == BATT_LEVEL_NOTI_DISABLED)  
  11.   {  
  12.      //新增專案需求的服務程式碼
  13.   }  
  14. }  

以上回調函式在battservice.c中的下面的函式裡面自動呼叫。

  1. static bStatus_t battWriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
                                      uint8 *pValue, uint8 len, uint16 offset )
d)在檔案simpleBLEPeripheral.c中的周期函式staticvoid performPeriodicTask( void ) 中新增週期獲取電量的程式碼:
  1. staticvoid performPeriodicTask( void )  
  2. {  
  3.   if ( gapProfileState == GAPROLE_CONNECTED )  
  4.   {  
  5.     // perform battery level check
  6.     Batt_MeasLevel( );  //該函式定義在battservice.c檔案中
  7.   }  
  8. }  
到這裡程式碼部分的修改也完成了。通過手機APP對電量進行讀取了。安卓APP推薦使用TI的BLE Device Monitor,蘋果推薦使用BLE Stroe.