|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
ad676几个很棘手的问题(附图及程序)。 |
作者:worminight 栏目:测控之家 |
用过AD676.html">AD676的大大请进,有几个很棘手的问题。 如图: 51控制AD676,7404晶振1.8M 1把7474接成2分频(datasheet的参考图)。 multisim,仿真,波形符合预期。 按图接电路,共连了两个。不加AD676,在1端分别施加0V和5V,工作正常。 加AD676后,busy为高,但clk无输出。怀疑是驱动问题,经过2个非门,现象依旧。 或者必须把busy的电平对7474没有用?没道理啊 最后没办法,用51的一条管脚给clk,但是很奇怪。不知道什么原因。 2一直没法正常采样,最后在SAMPLE输出加非门,让上电复位后SAMPLE为低(51默认高输出),同时在smple,busy并接104电容,能正常工作。 我在AD676板和控制板之间使用40PIN排线连接,是不是线太长了。 3关于误差。 使用51给clk脉冲,测试系统误差。 输入前接低通,AD426 16路模拟开关。 AD676.html">AD676经过自校准,但误差始终为50mv左右。 基准源调整至10.000V,观察使采样值溢出的输入电压,大约为10.050V,精度无法保证。 676的datasheet http://www.analog.com/en/prod/0%2C2877%2CAD676%2C00.html * - 本贴最后修改时间:2005-11-23 19:40:43 修改者:worminight |
2楼: | >>参与讨论 |
作者: worminight 于 2005/11/22 23:23:00 发布:
676的时序图 676的时序图 :如图 |
3楼: | >>参与讨论 |
作者: worminight 于 2005/11/22 23:30:00 发布:
程序 //*******************************// //********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); } |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |