资源简介
DS2782测量可充电锂离子和锂离子聚合物电池的电压、温度和电流,并估算其可用电量。电量计算所需的电池特性参数和应用参数存储在片内EEPROM中。通过可用电量寄存器,向主系统报告在当前的温度、放电速率、存储电荷和应用参数下,可供系统使用的电荷量的一个保守估计。估计电量以剩余mAh数和满容量的百分比的形式报告。
用法:
bsp_Init_DS2782();
while(1)
{
Get_ds2782_inif(&Ds2782;)
}
代码片段和文件信息
/*
*********************************************************************************************************
*
* 模块名称 : ds2782驱动
* 文件名称 : DS2782.c
* 版 本 : V1.0
* 说 明 :
*
* 修改记录 :
* 版本号 日期 作者 说明
* V1.0 2019-02-022 Baiyang
*
* Copyright (C) 本宝宝不高兴
*
*********************************************************************************************************
*/
#include “stm8s.h“
#include “bsp.h“
#include “bsp_ds2782.h“
#include “bsp_i2c_gpio.h“
Ds2782_Typedef Ds2782;
Ds278x Ds2782_RAM;
/*
* 函数名 Get_DS2782_Register
* 功能 获取DS2782寄存器
* 详见数据手册 P26页 Basic Transaction Formats 章节
*/
uint8_t Read_DS2782_Shadow_RAM(uint8_t reg_Addres)
{
uint8_t ackdata;
i2c_Start();
i2c_SendByte(DS2782_8bit_Slave_Address|I2C_WR); //器件地址 | 写
ack=i2c_WaitAck(); //等待应答
i2c_SendByte(reg_Addres); //寄存器地址
ack=i2c_WaitAck(); //等待应答
i2c_Start();
i2c_SendByte(DS2782_8bit_Slave_Address|I2C_RD); //器件地址 | 读
ack=i2c_WaitAck(); //等待应答
data=i2c_ReadByte(); //获取 低字节
i2c_NAck(); //非应答
i2c_Stop();
ack=ack; //防止编译器警告
return data;
}
/*
* 函数名 Read_DS2782_Multi_Shadow_RAM
* 功能 获取DS2782多个寄存器
* 详见数据手册 P26页 Basic Transaction Formats 章节
*/
void Read_DS2782_Multi_Shadow_RAM(uint8_t reg_Addresuint8_t Sizeuint8_t * data)
{
uint8_t ack;
i2c_Start();
i2c_SendByte(DS2782_8bit_Slave_Address|I2C_WR); //器件地址 | 写
ack=i2c_WaitAck(); //等待应答
i2c_SendByte(reg_Addres); //寄存器地址
ack=i2c_WaitAck(); //等待应答
i2c_Start();
i2c_SendByte(DS2782_8bit_Slave_Address|I2C_RD); //器件地址 | 读
ack=i2c_WaitAck(); //等待应答
for(int i=0;i {
data[i]=i2c_ReadByte(); //获取 字节
if(i<(Size-1)) i2c_Ack(); //应答
else i2c_NAck(); //非应答
}
i2c_Stop();
ack=ack; //防止编译器警告
}
/*
* 函数名 Write_DS2782_Shadow_RAM
* 功能 写DS2782影子寄存器
*/
void Write_DS2782_Shadow_RAM(uint8_t reg_Addresuint8_t data)
{
uint8_t ack;
i2c_Start();
i2c_SendByte(DS2782_8bit_Slave_Address|I2C_WR); //器件地址 | 写
ack=i2c_WaitAck(); //等待应答
i2c_SendByte(reg_Addres); //寄存器地址
ack=i2c_WaitAck(); //等待应答
i2c_SendByte(data); //写数据
ack=i2c_WaitAck(); //等待应答
i2c_Stop();
ack=ack; //防止编译器警告
}
/*
* 函数名 Copy_Data_For_Shadow_RAM_To_EEPROM
* 功能 将影子寄存器数据Copy至EEPROM
* 详见数据手册 P26页 Function Command Protocol 章节
*/
void Copy_Data_For_Shadow_RAM_To_EEPROM(uint8_t EEPROM_BLOCK)
{
uint8_t ack;
i2c_Start();
i2c_SendByte(DS2782_8bit_Slave_Address|I2C_WR); //器件地址 | 写
ack=i2c_WaitAck(); //等待应答
i2c_SendByte(FCR); //寄存器地址
ack=i2c_WaitAck(); //等待应答
i2c_SendByte(EEPROM_BLOCK); //写数据
ack=i2c_WaitAck(); //等待应答
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 15024 2019-05-16 08:26 bsp_ds2782.c
文件 4844 2019-04-17 09:56 bsp_ds2782.h
评论
共有 条评论