#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(); //关闭测量
}