已回答假定已回答

AD7705增益寄存器修改无反应

engineer@volnic.cn 在 2017-3-1 詢問的問題
最後回覆由丽金标於2017-3-10提供

版主:我在使用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;

結果