已回答假定已回答

AD7606-4 编写串行程序 采集到的数据全部是错的

fanfanfdx 在 2016-4-26 詢問的問題
最後回覆由hpkamen於2016-4-28提供

AD7606-4 串行-10~10V电压采集,两通道同时读取转换数据,采集到的数据都是错误的,感觉是时序有问题,但是不知道是哪的时序出现错误了,用官网上的采集到的也是错误的

 

void ResetAD7606(void)

{ ADCSH;  //CS

  ADOS0L; //过采样

  ADOS1L; //过采样

  ADOS2L; //过采样

  ADSCLKH;//sclk

  ADRSTL; nop(); nop(); //复位信号

  ADRSTH; nop(); nop();//复位信号

  ADRSTL; nop(); nop();//复位信号

}

void ReadAD7606(void)

{ uchar i;

  uint dtA=0,dtB=0;

 

 

  ADCSH;

  ADSCLKL; nop();nop();

  ADCONABH; nop();nop(); //  CONVST A,CONVST B

 

  ADCONABL; nop();nop();

  ADCONABH; nop();nop();

 

 

  for(i=0;i<20;i++) nop();

 

  ADCSL;

  if(ADOUTAisH) dtA=1;

  if(ADOUTBisH) dtB=1;

 

 

  for(i=1;i<16;i++)

  { dtA<<=1;

  dtB<<=1;

  ADSCLKH; nop();

  if(ADOUTAisH) dtA++;

  if(ADOUTBisH) dtB++;

  ADSCLKL;

  }

  ADValue[0]=dtA; dtA=0; //XOUT

  ADValue[1]=dtB; dtB=0; //ROUT

 

 

  for(i=0;i<16;i++)

  { dtA<<=1;

  dtB<<=1;

  ADSCLKH; nop();

  if(ADOUTAisH) dtA++;

  if(ADOUTBisH) dtB++;

  ADSCLKL;

  }

  ADValue[2]=dtA; //OSGO

  ADValue[3]=dtB; //BALANCE

  ADCSH;

  ADSCLKH;

}

結果