参考程序如下
//INA226初始化配置:
#include "ina226.h"
#include "myiic.h"
#include "usart.h"
#include "delay.h"
#include "lcd.h"
#include "led.h"
#include "stdio.h"
#include "string.h"
u8 Voltage_Current_data[64]={0x01,0xFA,0x01,0x00};//电压电流存储数组
//INA226初始化
void INA226_Init(void)
{
IIC_Init();//iic初始化
delay_ms(10);
}
//INA226参数配置
//INA226参数配置
//返回值:None
//写入校准值CAL=0.00512/(Current_LSB*Rshunt);-->>Current_LSB选择为1mA/bit,Rshunt=采样电阻0.1R
//**********Current_LSB=Maximum Expected Current/32768;-->>Maximum Expected Current=5A,2^15=32768
void INA226_Config(void)
{
INA226_write(0x80,Config_Reg,Config_data);//配置寄存器参数配置
INA226_write(0x80,Calib_Reg,Calib_data);//校准寄存器参数配置
INA226_write(0x82,Config_Reg,Config_data);//配置寄存器参数配置
INA226_write(0x82,Calib_Reg,Calib_data);//校准寄存器参数配置
INA226_write(0x84,Config_Reg,Config_data);//配置寄存器参数配置
INA226_write(0x84,Calib_Reg,Calib_data);//校准寄存器参数配置
INA226_write(0x86,Config_Reg,Config_data);//配置寄存器参数配置
INA226_write(0x86,Calib_Reg,Calib_data);//校准寄存器参数配置
INA226_write(0x88,Config_Reg,Config_data);//配置寄存器参数配置
INA226_write(0x88,Calib_Reg,Calib_data);//校准寄存器参数配置
}
//INA226数据读写
//INA226数据读取
//slaveaddr:从机地址
//readaddr:读取的寄存器地址
//返回值:16位数据data_temp
u16 INA226_Read(u8 slaveaddr,u8 readaddr)
{
u8 data_H=0,data_L=0;
u16 data_temp=0;
IIC_Start();
IIC_Send_Byte(slaveaddr);//从机地址
IIC_Wait_Ack();
IIC_Send_Byte(readaddr);//寄存器地址
IIC_Wait_Ack();
IIC_Stop();//
IIC_Start();
IIC_Send_Byte(slaveaddr+1);//进入接收模式
IIC_Wait_Ack();
data_H=IIC_Read_Byte(1); //读取数据高字节
data_L=IIC_Read_Byte(0); //读取数据低字节
IIC_Stop(); //产生一个停止条件
data_temp|=data_H;
data_temp<<=8;
data_temp|=data_L;
return data_temp;
}
//INA226数据写入
//slaveaddr:从机地址
//writeaddr:写入的寄存器地址
//writedata:要写入的数据
//返回值:None
void INA226_write(u8 slaveaddr,u8 writeaddr,u16 writedata)
{
u8 data_temp[2];
data_temp[0]=(u8)(writedata>>8); //高字节
data_temp[1]=(u8)(writedata&0xff); //低字节
IIC_Start();
IIC_Send_Byte(slaveaddr);//从机地址
IIC_Wait_Ack();
IIC_Send_Byte(writeaddr);//写入寄存器地址
IIC_Wait_Ack();
IIC_Send_Byte(data_temp[0]);//发送高字节
IIC_Wait_Ack();
IIC_Send_Byte(data_temp[1]);//发送低字节
IIC_Wait_Ack();
IIC_Stop(); //产生一个停止条件
}
//INA233读取电压数据
//INA233读取电压电流数据
//Power_LSB = 25 * Current_LSB
//BusVoltage_LSB = 1.25 mv/bit 固定值(由公式3计算得到)
//ShuntVoltage_LSB = 2.5uv/bit 固定值(由公式3计算得到)
//Bus Voltage Register的LSB = 1.25mV,FSR = 0x7FFF
//Shunt Voltage Register的LSB = 2.5uV,FSR = 0x7FFF
//Current Register的LSB = 0.02mA,FSR = 0x7FFF
//Power Register的LSB = Current_LSB * 25,FSR = 0xFFFF
//读取INA233电压(4组)
void INA226_Read_Voltage()
{
u8 i;
u16 Voltage_temp=0;
float Data_V=0;
u32 Voltage_data=0;
char INA226_V[20];
for(i=1;i<6;i++)
{
switch(i)
{
case 1:
{
Voltage_temp=INA226_Read(0x80,Bus_V_Reg);//读取电压寄存器-->>Bus Voltage Register
Data_V=Voltage_temp*1.25;//乘LSB-->>1.25 mV
Voltage_data=Data_V*100;//数据放大100
Voltage_Current_data[4]=(Voltage_d