1844|0

1700

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

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()函数中添加如下代码实现初始化电池电量服务,


{     
  
    uint8 critical = DEFAULT_BATT_CRITICAL_LEVEL;  
  
    Batt_SetParameter( BATT_PARAM_CRITICAL_LEVEL, sizeof (uint8 ), &critical );/* 设置默认临界电量 */  
  
  }  
c)在文件simpleBLEPeripheral.c中定义电池电量服务的回调函数


static void BattCB(uint8 event)  
{  
  if (event == BATT_LEVEL_NOTI_ENABLED)  
  {  
    if (gapProfileState == GAPROLE_CONNECTED)  
    {         
   //添加需要的服务代码
    }   
  }  
  
  else if (event == BATT_LEVEL_NOTI_DISABLED)  
  {  
      //添加项目需求的服务代码
  }  
}  
以上回调函数在battservice.c中的下面的函数里面自动调用。


static bStatus_t battWriteAttrCB( uint16 connHandle, gattAttribute_t *pAttr,
                                  uint8 *pValue, uint8 len, uint16 offset )
d)在文件simpleBLEPeripheral.c中的周期函数static void performPeriodicTask( void ) 中添加周期获取电量的代码:
static void performPeriodicTask( void )  
{  
  if ( gapProfileState == GAPROLE_CONNECTED )  
  {  
    // perform battery level check  
    Batt_MeasLevel( );  //该函数定义在battservice.c文件中
  }  
}  
到这里代码部分的修改也完成了。通过手机APP对电量进行读取了。安卓APP推荐使用TI的BLE Device Monitor,苹果推荐使用BLE Stroe.

 

此帖出自RF/无线论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表