应用电路如图,VIN+是开关电源+12V,VIN-接负载正极。
I2C部分代码使用正点原子老师的代码。
关于INA219部分代码如下:
void INA219_WriteReg(unsigned char reg, unsigned int data) //写寄存器
{
unsigned char data_temp[2];
data_temp[0] = (unsigned char)(data>>8);
data_temp[1] = (unsigned char)(data & 0xff);
IIC_Start();
IIC_Send_Byte(0x80);
//IIC_Wait_Ack();
Test_ack();
IIC_Send_Byte(reg);
//IIC_Wait_Ack();
Test_ack();
IIC_Send_Byte(data_temp[0]);
//IIC_Wait_Ack();
Test_ack();
//data++;
IIC_Send_Byte(data_temp[1]);
//IIC_Wait_Ack();
Test_ack();
IIC_Stop();
//delay_ms(10);
}
u8 INA219_ReadReg(unsigned char reg)
{
unsigned int dat;
IIC_Start();
IIC_Send_Byte(0x80);
Test_ack();
//IIC_Wait_Ack();
IIC_Send_Byte(reg);
//IIC_Wait_Ack();
Test_ack();
IIC_Start();
IIC_Send_Byte(0x81);
//IIC_Wait_Ack();
Test_ack();
dat = INA_IIC_Read_Byte();
INA_IIC_ACK_Send(0);
dat<<=8;
dat += INA_IIC_Read_Byte();
INA_IIC_ACK_Send(1);
IIC_Stop();
return dat;
}
unsigned int INA_GET_Current_MA(void) //获取电流(单位:mA)
{
unsigned int dat;
dat=INA219_ReadReg(0x04);
return (int)(dat*0.1); //得到寄存器的值在乘以每位对应的值(IAN_I_LSB)得到实际的电流
}
读取回来的电流值,总是6553
|