• 大小: 4KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-18
  • 语言: 其他
  • 标签: DS2782  

资源简介

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

评论

共有 条评论