ADI 技术
直播中

孙灿

7年用户 204经验值
私信 关注
[问答]

AD7705增益寄存器修改输出结果却没有变化

版主:我在使用AD7705时,碰到这样的问题:
在ADC自校正后,执行   ZN=ZS+(Z1-Z0)   GN=GS*(G1/G0)  ,
在CH1=0 CHO=1 通道(AIN2 (+ ) AIN2 (- )),修改ZN GN 结果有正常的变化,
但是在CH1=0 CHO=0 通道(AIN1 (+ ) AIN1 (- )),只有对ZN偏移寄存器修改,输出结果有变化,
修改增益寄存器GN,输出结果却没有变化,(已经对修改后的增益寄存器再次读出,确定数据已经改变且正确)。
请问这是什么原因。谢谢  36425701@qq.com

#define Communication_register 0<<4
#define Setup_register 1<<4
#define Clock_register 2<<4
#define Data_register 3<<4
#define Test_register 4<<4
#define No_operation 5<<4
#define Offset_register 6<<4
#define Gain_register 7<<4

#define read 8
#define ch0 0
#define ch1 1

#define MD0 (0<<6)
#define MD1 (1<<6)
#define MD2 (2<<6)
#define MD3 (3<<6)

#define G16 (4<<3)
#define G32 (5<<3)
#define G64 (6<<3)
/////////下面是在CH1=0 CHO=1 通道/////////////////////////////////////////
      case 23:
         Writetoreg(0x38);
         u[CurrentChannle][7]=Read16();//存数7   
         TNum=0;
         Writetoreg(Clock_register|ch1);        //0x21 clock
         Writetoreg(0x00);                      //0 50Hz 84 10Hz
         Writetoreg(Setup_register|ch1);        // setup 选择PT100通道
         Writetoreg(MD1|G32);                   // 自校准 gain 32      
         break;
      case 24:
         Writetoreg(Offset_register|read|ch1);  //read 偏移寄存器
         i=Read(24);
         Temp.i=Offset[ch1]+i;               //Zn=Zs+Z1-Z0
         Temp.c[3]=(Offset_register|ch1);       //write 偏移寄存器
         WriteIntToReg(Temp.i);

         Writetoreg(Gain_register|read|ch1);    //增益寄存器  
         i=Read(24);
         f1=Gain[ch1];
         Temp.i = i*f1;               //Gn=GS*G1/G0
         Temp.c[3]=(Gain_register|ch1);         //write 增益寄存器  
         WriteIntToReg(Temp.i);           
         SelCHL(CurrentChannle,0);
         break;
////////////////////下面是在CH1=0 CHO=0 通道//////////////////
      SelCHL(CurrentChannle,0);
      Writetoreg(Clock_register|ch0);        //0x20 clock
      Writetoreg(0x00);//0 50Hz 84 10Hz
      Writetoreg(Setup_register|ch0);        // setup
      Writetoreg(MD1|G32);                   // 自校准 gain 32
   }
   switch(ADC_DRDY_CNT)
   {
      case 1:
         Writetoreg(Offset_register|read|ch0);  //read 偏移寄存器
         i=Read(24);
         Temp.i=Offset[ch0]+i;                  //Zn=Zs+Z1-Z0
         Temp.c[3]=(Offset_register|ch0);       //write 偏移寄存器
         WriteIntToReg(Temp.i);


         Writetoreg(Gain_register|read|ch0);    //增益寄存器  
         i=Read(24);
         f1=Gain[ch0];
         Temp.i = i*f1;               //Gn=GS*G1/G0
         Temp.c[3]=(Gain_register|ch0);         //write 增益寄存器  
         WriteIntToReg(Temp.i);           
         SelCHL(CurrentChannle,0);
         break;

回帖(2)

孙灿

2018-8-16 07:44:10
问题已经找到,不必回复了
举报

杨波

2018-8-16 07:51:06
引用: yanke76975 发表于 2018-8-16 07:44
问题已经找到,不必回复了

不说说是什么问题吗
举报

更多回帖

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