INA226

2019-07-15 16:27发布

  请问各位大神有没调试过电流监测芯片INA226的,小弟最近在调试这块芯片,但是出不来数据,想请教各位大神。代码如下,
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include<absacc.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define read_addr 0x81                  //写配置寄存器时对应的器件地址
  7. #define write_addr 0x80                 //读转换结果时对应的器件地址

  8. uchar H_AD;                 //        H_AD用于存储高八位A/D转换结果
  9. uchar L_AD;                 // L_AD用于存储低八位A/D转换结果

  10. sbit SDA = P1^0;
  11. sbit SCL = P1^1;


  12. void delay_ms(uint n)
  13. {
  14.         uchar i;
  15.         while(n--)
  16.         {
  17.                 for(i=0;i<100;i++);
  18.         }
  19. }

  20. void Start(void)
  21. {
  22.         SDA = 1;
  23.     SCL = 1;
  24.         _nop_();_nop_();_nop_();_nop_();
  25.         SDA = 0;
  26.         _nop_();_nop_();_nop_();_nop_();
  27. }
  28. void Stop(void)
  29. {
  30.         SDA = 0;
  31.     SCL = 1;
  32.         _nop_();_nop_();_nop_();_nop_();
  33.         SDA = 1;
  34.         _nop_();_nop_();_nop_();_nop_();
  35. }
  36. void slave_ACK(void)
  37. {
  38. //        SDA = 0;
  39. //        _nop_();_nop_();_nop_();_nop_();
  40. //        SCL = 1;
  41. //        _nop_();_nop_();_nop_();_nop_();
  42. //        SCL = 0;
  43.    uchar i=0;
  44.    SCL=1;
  45.    _nop_();_nop_();_nop_();_nop_();
  46.    while((SDA==1)&&(i<255))
  47.       i++;
  48.    SCL=0;
  49.    _nop_();_nop_();_nop_();_nop_();
  50. }
  51. void check_ACK(void)
  52. {
  53. SDA=1;
  54. SCL=1;
  55. F0=0;
  56. if(SDA==1)
  57.     F0=1;
  58. SCL=0;
  59. }

  60. void ATWriteByte(uchar dat)
  61. {
  62.         uchar i;
  63.         for(i=0;i<8;i++)
  64.         {
  65.                 SCL = 0;
  66.                 _nop_();_nop_();_nop_();_nop_();
  67.                 SDA = ((dat<<i)&0x80)?1:0;
  68.                 SCL = 1;
  69.         }
  70.         SCL = 0;
  71. }
  72. uchar ATReadByte(void)
  73. {
  74.         uchar i,temp = 0;
  75.         SDA = 1;
  76.         for(i=0;i<8;i++)
  77.         {
  78.                 SCL = 0;
  79.                 _nop_();_nop_();_nop_();_nop_();
  80.                 SCL = 1;
  81.                 _nop_();_nop_();_nop_();_nop_();
  82.                 temp <<= 1;
  83.                 if(SDA==1)
  84.                 {
  85.                         temp |= 0x01;
  86.                 }
  87.         }
  88.         return temp;
  89. }


  90. void setting_INA226(void)
  91. {
  92.   Start();
  93.   ATWriteByte(write_addr);
  94.   slave_ACK();
  95.   ATWriteByte(0x00);
  96.   slave_ACK();
  97.   ATWriteByte(0x42);
  98.   slave_ACK();
  99.   ATWriteByte(0x93);
  100.   slave_ACK();
  101.   ATWriteByte(write_addr);
  102.   slave_ACK();
  103.   ATWriteByte(0x01);
  104.   slave_ACK();
  105.   Stop();
  106. }
  107. void READ_INA226(void)
  108. {       
  109.         Start();
  110.         ATWriteByte(read_addr);
  111.         slave_ACK();

  112.     H_AD=ATReadByte();
  113.         check_ACK();
  114.         L_AD=ATReadByte();
  115.         Stop();

  116.         ES=0;
  117.     SBUF=H_AD;
  118.         while(TI==0);
  119.         TI=0;

  120.         SBUF=L_AD;
  121.         while(TI==0);
  122.         TI=0;
  123.         ES=1;       
  124. }
  125. void init()
  126. {
  127.         TMOD=0x21;
  128.         TH1=0xfd;
  129.         TL1=0xfd;
  130.         TR1=1;
  131.         SM0=0;
  132.         SM1=1;
  133.         REN=1;
  134.         PS=1;
  135.         EA=1;
  136.         ES=1;
  137. }
  138. void main()
  139. {  
  140.    init();       
  141.    setting_INA226();
  142.    READ_INA226();
  143. }

  144.        
复制代码请大神帮忙看看程序把。我的目的是想要测经过一个25毫欧姆的电阻的电流,从想从数据输出寄存器中读出分流电压。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。