微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > INA226 电流监测芯片

INA226 电流监测芯片

时间:10-02 整理:3721RD 点击:

  请问有谁调试过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,然后才是写数据,检查一下程序是否写对了。

谢谢你的回答。我已经调通了,当时可能是延时有点问题。谢谢。

您的延时指的是哪里的延时啊?小弟现在遇到同样的问题,还望赐教

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top