• musk.yang
    了解作者
  • C/C++
    开发工具
  • 1KB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 9
    下载次数
  • 2019-08-09 09:31
    上传日期
INA219 驱动程序,基于CC2541控制器,
INA219.zip
  • ElectricMeter.h
    1.3KB
  • ElectricMeter.c
    3.6KB
内容介绍
#include "ElectricMeter.h" //参与计算的预设定常量 //存储读出来的值 uint8 ShuntVoltage_REGValue[2]; uint8 BusVoltage_REGValue[2]; uint8 Current_REGValue[2]; uint8 Power_REGValue[2]; //计算值 uint16 ShuntVoltageValue; uint16 BusVoltageValue; uint16 CurrentValue; uint16 PowerValue; void PowerDownMode(void) { uint8 Temp[2]; Temp[0] = 0; Temp[1] = 0; HalSensorWriteReg(CFG_REG, Temp, 2); } void MeasureMode(void) { uint8 Temp[2]; Temp[0] = Model_1 >> 8; Temp[1] = Model_1 & 0x00FF; HalSensorWriteReg(CFG_REG, Temp, 2); } //初始化从器件 //Add:从设备地址,Clock:IIC时钟 void HalSlaveInit(uint8 Add,uint8 Clock) { uint8 Temp[2]; uint8 result; HalI2CInit(SlaveAdd,I2cClock); Temp[0] = 0x80; Temp[1] = 0x00; result=HalSensorWriteReg(CFG_REG, Temp, 2); //复位 Temp[0] = 0x10;//1109 Temp[1] = 0; result=HalSensorWriteReg(CAL_REG, Temp, 2); //设置校正寄存器的值 Temp[0] = Model_0 >> 8; Temp[1] = Model_0 & 0x00FF; result=HalSensorWriteReg(CFG_REG, Temp, 2); //配置配置寄存器参数 } //读出电压电流值 void Read_ElectricMeter(void) { uint8 Useful_Flag; uint8 Overflow_Flag; //清空计算值和寄存器值 ShuntVoltageValue=0; BusVoltageValue=0; CurrentValue=0; PowerValue=0; osal_memset(BusVoltage_REGValue,0,2); osal_memset(ShuntVoltage_REGValue,0,2); osal_memset(Current_REGValue,0,2); osal_memset(Power_REGValue,0,2); HalI2CInit(INA219_SlaveAdd,INA219_I2cClock); MeasureMode(); //开启测量 //读取输入值并显示、判断数据有效性 HalSensorReadReg(Bus_Voltage_REG, &BusVoltage_REGValue[0],2); Overflow_Flag = BusVoltage_REGValue[1] & 0x01; //得到溢出标志位 Useful_Flag = BusVoltage_REGValue[1] & 0x02; //得到数据是否有效 if(Useful_Flag == 0 ) { NPI_PrintString("Invalid data\r\n"); return; //如果数据无效,则不进行数据读取 } if(Overflow_Flag == 1 ) { NPI_PrintString("Overflow\r\n"); return; //如果数据超出量程,则不进行数据读取 } NPI_PrintString("\r\n"); NPI_PrintString("\r\n"); NPI_PrintString("*******************\r\n"); BusVoltageValue =BusVoltage_REGValue[0]; BusVoltageValue <<=8; BusVoltageValue +=BusVoltage_REGValue[1]; BusVoltageValue >>=3; BusVoltageValue *=4; NPI_PrintValue("输入电压:",BusVoltageValue,10); NPI_PrintString("mV\r\n"); //读取并联电压值并显示 HalSensorReadReg(ShuntVoltage_REG, &ShuntVoltage_REGValue[0], 2); ShuntVoltageValue = ShuntVoltage_REGValue[0]; ShuntVoltageValue <<=8; ShuntVoltageValue += ShuntVoltage_REGValue[1]; NPI_PrintValue("并联电压:",ShuntVoltageValue,10); NPI_PrintString("0uV\r\n"); //读取电流值并显示 HalSensorReadReg(Current_REG, &Current_REGValue[0],2); CurrentValue =Current_REGValue[0]; CurrentValue <<=8; CurrentValue +=Current_REGValue[1]; CurrentValue *=100; //单位 NPI_PrintValue("电流:",CurrentValue,10); //uA NPI_PrintString("uA\r\n"); //读取功率值并显示 HalSensorReadReg(Power_REG, &Power_REGValue[0],2) ; PowerValue =Power_REGValue[0]; PowerValue <<=8; PowerValue +=Power_REGValue[1]; PowerValue *=100*20; // NPI_PrintValue("功率:",PowerValue/1000,10); //mW NPI_PrintString("mW\r\n"); NPI_PrintString("*******************\r\n"); NPI_PrintString("\r\n"); NPI_PrintString("\r\n"); PowerDownMode(); //关闭测量 }
评论
    相关推荐