打印

INA226

[复制链接]
5028|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chengzss|  楼主 | 2013-7-5 16:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  请问各位大神有没调试过电流监测芯片INA226的,小弟最近在调试这块芯片,但是出不来数据,想请教各位大神。代码如下,
#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();
   READ_INA226();
}

       
请大神帮忙看看程序把。我的目的是想要测经过一个25毫欧姆的电阻的电流,从想从数据输出寄存器中读出分流电压。

相关帖子

沙发
dirtwillfly| | 2013-7-5 21:07 | 只看该作者
没用过INA226,帮顶

使用特权

评论回复
板凳
chengzss|  楼主 | 2013-7-6 14:32 | 只看该作者
dirtwillfly 发表于 2013-7-5 21:07
没用过INA226,帮顶

谢谢。

使用特权

评论回复
地板
qunyinghc| | 2015-11-16 09:43 | 只看该作者
问题解决了吗?

使用特权

评论回复
5
mmbs| | 2015-11-17 14:48 | 只看该作者
没有说什么问题

使用特权

评论回复
6
mmbs| | 2015-11-17 14:53 | 只看该作者
得看测试时序

使用特权

评论回复
7
MCU丁丁| | 2017-9-19 17:25 | 只看该作者
请问你调试INA226成功了吗

使用特权

评论回复
8
外方爱| | 2017-9-20 15:04 | 只看该作者
void check_ACK(void)

这个函数里是几个意思 我看不懂

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

0

粉丝