ad676的问题求助,有图和程序。
用过ad676的大大请进,有几个很棘手的问题。
如图:
51控制AD676,7404晶振1.8M
1把7474接成2分频(datasheet的参考图)。
multisim,仿真,波形符合预期。
按图接电路,共连了两个。不加AD676,在1端分别施加0V和5V,工作正常。
加AD676后,busy为高,但clk无输出。怀疑是驱动问题,经过2个非门,现象依旧。
最后没办法,用51的一条管脚给clk,但是很奇怪。不知道什么原因。
2一直没法正常采样,最后在sample输出加非门,让上电复位后sample为低(51默认高输出),同时在smple,busy并接104电容,能正常工作。
我在AD676板和控制板之间使用40pin排线连接,是不是线太长了。
3关于误差。
使用51给clk脉冲,测试系统误差。
输入前接低通,AD426 16路模拟开关。
ad676经过自校准,但误差始终为50mv左右。
基准源调整至10.000V,观察使采样值溢出的输入电压,大约为10.050V,精度无法保证。
676的datasheet
//*******************************//
//********AD676初始化程序********
///*******************************//
//增加1级反相
void AD676_SelfCal(void)
{
AD676_CAL=1;
while(AD676_BUSY==0)
{
CLK=!CLK;
AD676_CAL=0;
}
AD676_CAL=0;
}
//*******************************//
//********AD676程序**************//
///******************************//
int AD676(unsigned char channel)
{
unsigned int ad676data;
unsigned char ad676datah,ad676datal;
//AD426 channel Select
switch(channel)
{
//Ul
case 1:
{ADG426WR_Ul=0;}
break;
default:
break;
}
//AD676 Sample
if((channel> =1) && (channel <=16))
{
//AD676 sample反向输入 7404
//AD676 busy 反向输入 7404
//AD676 get
AD676_SAMPLE=0;
AD676_SAMPLE=0;
AD676_SAMPLE=1;
while(AD676_BUSY==0)
{
CLK=!CLK;
// AD676_SAMPLE=1;
}
AD676_SAMPLE=1;
//AD676_BUSY==0,data ready
ad676datah=AD676H8_ADD;
ad676datal=AD676L8_ADD;
ad676jk_h=ad676datah;
ad676jk_l=ad676datal;
ad676data= (int)(ad676datah < <8) + (int)(ad676datal) ;
}
//通道不正确可能返回不正确的值
return(ad676data);
}
//*******************************//
//********AD676绦?*******
///*******************************//
int AD676_contin(void)
{
unsigned int ad676data;
unsigned char ad676datah,ad676datal;
//AD676 sample反向输入 7404
//AD676 busy 反向输入 7404
//AD676 get
AD676_SAMPLE=0;
AD676_SAMPLE=0;
AD676_SAMPLE=1;
while(AD676_BUSY=0)
{
CLK=!CLK;
// AD676_SAMPLE=1;
}
AD676_SAMPLE=1;
//AD676_SAMPLE=0;
//AD676_BUSY==0,data ready
//ad676datah=AD676H8_ADD;
//ad676datal=AD676L8_ADD;
//ad676data= (unsigned int)(ad676datah < <8) + (unsigned int)(ad676datal) ;
return(ad676data);
}