INA226 电流监测芯片
请问有谁调试过INA226这块芯片的,能够给个QQ,想请教下问题。谢谢。
#include<reg51.h>
#include<intrins.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define read_addr 0x81 //写配置寄存器时对应的器件地址
#define write_addr 0x80 //读转换结果时对应的器件地址
uchar H_AD; // H_AD用于存储高八位A/D转换结果
uchar L_AD; // L_AD用于存储低八位A/D转换结果
sbit SDA = P1^0;
sbit SCL = P1^1;
void delay_ms(uint n)
{
uchar i;
while(n--)
{
for(i=0;i<100;i++);
}
}
void Start(void)
{
SDA = 1;
SCL = 1;
_nop_();_nop_();_nop_();_nop_();
SDA = 0;
_nop_();_nop_();_nop_();_nop_();
}
void Stop(void)
{
SDA = 0;
SCL = 1;
_nop_();_nop_();_nop_();_nop_();
SDA = 1;
_nop_();_nop_();_nop_();_nop_();
}
void slave_ACK(void)
{
// SDA = 0;
// _nop_();_nop_();_nop_();_nop_();
// SCL = 1;
// _nop_();_nop_();_nop_();_nop_();
// SCL = 0;
uchar i=0;
SCL=1;
_nop_();_nop_();_nop_();_nop_();
while((SDA==1)&&(i<255))
i++;
SCL=0;
_nop_();_nop_();_nop_();_nop_();
}
void check_ACK(void)
{
SDA=1;
SCL=1;
F0=0;
if(SDA==1)
F0=1;
SCL=0;
}
void ATWriteByte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
SCL = 0;
_nop_();_nop_();_nop_();_nop_();
SDA = ((dat<<i)&0x80)?1:0;
SCL = 1;
}
SCL = 0;
}
uchar ATReadByte(void)
{
uchar i,temp = 0;
SDA = 1;
for(i=0;i<8;i++)
{
SCL = 0;
_nop_();_nop_();_nop_();_nop_();
SCL = 1;
_nop_();_nop_();_nop_();_nop_();
temp <<= 1;
if(SDA==1)
{
temp |= 0x01;
}
}
return temp;
}
void setting_INA226(void)
{
Start();
ATWriteByte(write_addr);
slave_ACK();
ATWriteByte(0x00);
slave_ACK();
ATWriteByte(0x42);
slave_ACK();
ATWriteByte(0x93);
slave_ACK();
ATWriteByte(write_addr);
slave_ACK();
ATWriteByte(0x01);
slave_ACK();
Stop();
}
void READ_INA226(void)
{
Start();
ATWriteByte(read_addr);
slave_ACK();
H_AD=ATReadByte();
check_ACK();
L_AD=ATReadByte();
Stop();
ES=0;
SBUF=H_AD;
while(TI==0);
TI=0;
SBUF=L_AD;
while(TI==0);
TI=0;
ES=1;
}
void init()
{
TMOD=0x21;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
PS=1;
EA=1;
ES=1;
}
void main()
{
init();
setting_INA226();
while(1)
{
READ_INA226();
}
}
以上是我的代码,我就是想测一个25毫欧姆电阻的电流,所以我想读出数据寄存器中分流电压的值。我利用串口助手想把读取的数据显示,但是输出的结果不对,请大神帮帮忙,拜谢了。
调试之后,我主器件给从机器发送从器件地址之后,从机没有应答,是怎么回事?
A0A1是怎么连接的?主机给从机的地址是否给对了?另外,现有的程序,是否能够“写”出如图24那样的时序?由图24,首先要主机指定从机地址,然后发register pointer byte,然后才是写数据,检查一下程序是否写对了。
谢谢你的回答。我已经调通了,当时可能是延时有点问题。谢谢。
您的延时指的是哪里的延时啊?小弟现在遇到同样的问题,还望赐教