資源簡介
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
評論
共有 條評論