ADI 技术
直播中

陈小鸥

8年用户 190经验值
私信 关注
[问答]

ADE7754读写数据在变化

初始化寄存器,然后读取一个寄存器(已初始化)的值,发现读出的数据在变化,请大神帮我看看程序!万分感谢!!


void init_ADE7754(void)                           //ADE7754初始化
{

  write_Data_8(0x0a, 0x04);   //OPMODE CF的输出不使能
  write_Data_8(0x0b, 0x10);   //mmode,相的选择,A:0x10;B:0x25;C:0x4a/0x70 ABC都选
  write_Data_8(0x0c, 0x08);      //Wavmode 第五位为0,累加有功电能
  write_Data_8(0x0d, 0x2d);   //Watmode 电能计算公式,A:0x24;B:0x12;C:0x09;ABC:0x3f
  write_Data_8(0x18,0x04);       //GAIN(绝对值求和)
  write_Data_16(0x0f, 0x0400);   //IRQEN 中断使能
  write_Data_16(0x13, 0x0004);   //LINCYC 累积周期4
  //write_Data_16(0x26, 0x0000);   //CF的输出频率
  write_Data_16(0x3d, 0x01f7);   //减小相间的耦合

}



void write_Data_8( char addr,int8 data)             //ADE7754写数据(8位)
{
  int8 i=16;
  int16 add=0;
  int16 buf1=0;
  add=0x80|addr;           //地址
  buf1=(add<<8)|data;
  IO0SET=CS_SPI;     
  IO0CLR=CS_SPI;      //通讯模式
  IO0SET=CLK_SPI;
  while(i)                      //发送地址和数据
  {
  IO0CLR=CLK_SPI;
  if(buf1&(1<<(i-1)))
  IO0SET=DIN_SPI;
  else
  IO0CLR=DIN_SPI;
  IO0SET=CLK_SPI;
  i--;
  }
  IO0CLR=CLK_SPI;
  IO0SET=CS_SPI;
}



int8 read_Data_8(char addr)         //读数据(8位)
{
  int8 data=0;
  int8 i=8;int8 j=8;
  IO0CLR=CLK_SPI;
  IO0CLR=CS_SPI;           
  IO0SET=CLK_SPI;               //write 要读的寄存器地址
  while(i)
  {
  IO0CLR=CLK_SPI;
  if(addr&(1<<(i-1)))
  IO0SET=DIN_SPI;
  else
  IO0CLR=DIN_SPI;
  IO0SET=CLK_SPI;
  i--;
  }
  IO0CLR=CLK_SPI;
  delay_5us();              //延时5us
  while(j)                      // 读数据
  {
  IO0SET=CLK_SPI;
  if(IO0PIN&DOUT_SPI)
  data|=1<<(i-1);
  IO0CLR=CLK_SPI;
  i--;
  }
  IO0SET=CS_SPI;
  return(data);
}

回帖(2)

李龙

2018-10-15 09:54:28
您好,您的问题工程师正在处理,由于出差的原因,可能回复有延迟,请您耐心等待,由此带来的不便,敬请见谅。
举报

张博

2018-10-15 10:06:24
您好。请您详细的描述一下您遇到的问题
举报

更多回帖

发帖
×
20
完善资料,
赚取积分