注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
wen06990234的个人空间 https://home.eeworld.com.cn/space-uid-81842.html [收藏] [复制] [分享] [RSS]
日志

调试ad7705

已有 10690 次阅读2009-3-25 10:34

       刚开学的那两天,刚接触到ad7705的时候我的第一感觉就是,把调试出来应该很是件很容易的事,但是在接下来的时间内,我发现我先前的想法是错的,断断续续用了来个两天的时间,数码管上始终显示5.000V,很是郁闷。。。。这才慢慢的静下心来第一次认真的研读datasheet,之后认为是时序出了问题,又断断续续调了两天,结果还是一个样,没办法。。。只好再一次认真研读datasheet和网上的前辈们的调试经验,在这里我特别感谢深圳亿佳电子的罗老师写的ad7705调试经验,很据他的文章和datasheet我从头到尾把我的程序修改了一下,最后成功了,误差在3mv以内呵呵还不是很理想,总共断断续续调了8天,可把我郁闷的 哎!!!

ad7705的工作原理

工作原理:  AD7705/06以及AD7707比较典型的一种16A/D转换芯片。  AD7705/06芯片是带有自校正功能的Σ-ΔA/D转换器。其内部由多路模拟开关、缓冲器、可编程增益放大器(PGA)、Σ-Δ调制器、数字滤波器、基准电压输入、时钟电路及串行接口组成。其中串行接口包括寄存器组,它由通讯寄存器、设置寄存器、时钟寄存器、数据输出寄存器、零点校正寄存器和满程校正寄存器等组成。该芯片还包括2通道差分输入(AD7705)和3种伪差分通道输入(AD7706)。

       AD7705/06PGA可通过指令设定,对不同幅度的输入信号实现1248163264128倍的放大,因此AD7705/06芯片既可接受从传感器送来的低电平输入信号,亦可接受高电平(10V)信号,它运用Σ―Δ技术实现16位无误码性能;它的输出速度同样可由指令设定,范围由 20Hz500Hz;它能够通过指令设定对零点和满程进行校正;AD7705/06与微处理器的数据传送通过串行方式进行,采用了节省端口线的通讯方式,最少只占用控制机的两条端口线。

再说一下ad7705很便宜相对max公司的16位ad转换我买的一片只有20几块钱呵呵!!!

 

  #include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code df[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值01234567
uchar code daf[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
uchar code sg[]={0,1,2,3,4,5,6,7};//分别对应相应的数码管点亮
uchar shu[5];
sbit DRDY=P1^3;
sbit CS=P1^4;
sbit SO=P1^5;
sbit SCK=P1^6;
sbit SI=P1^7;
sbit dian=P0^7;


void delay(uint z) //延时
{
 uchar p;
 while(z-->0)
 {for(p=0;p<20;p++);}
 }


void write(uchar x)  //写一个字节子程序
{
 uchar i;
 CS=0;
 SCK=1;
for (i=0;i<8;i++)
   {
     SCK=0;
  //  delay(1);
     SI=(bit)(x&0x80);
//     delay(1);
     SCK=1;
   //  delay(1);
     x<<=1;
   }
   SI=1;
  // SO=1;
   CS=1;
}

uint read(void)   //读转换数据子程序
{
  uchar i;
  uint w ;
    w=0;
    CS=0;
    SCK=1 ;
     for(i=0;i<16;i++)
     { 
        SCK=0;
      // delay(1);
        w<<=1;
        if(SO==1)
         w|=0x01;
         SCK=1;
       //  delay(1);
      }
    //SI=1;
    CS=1;
    //SO=1;
  return w;
}
void zhua(float m)
 {  uint n;
    n=(uint)(m*10000);
shu[0]=(uchar)m;
shu[1]=n%10000/1000;
shu[2]=n%10000%1000/100;
shu[3]=n%10000%1000%100/10;
shu[4]=n%10;
 }

void xianshi()

  uchar i;
  for(i=0;i<5;i++)
   {
    if(i==0)
          { P0=daf[shu[i]];
            P2=sg[i];
           }
    else
        {
           P0=df[shu[i]];
           P2=sg[i];
         }
     delay(1);
    } 
}

void init()
{
  write(0x20);   //AD7705初始化-读第1通道A/D转换值下写时钟寄存器
  write(0x05);//改刷新频率为20 不分频
  write(0x10);//下写setup寄存器
  write(0x44);
   //delay(3);
}

void main()       //主程序
{
    float a,b;
   /* for(i=0;i<100;i++)
    {reset=0;}
     reset=1;*/
     init();

while(1)
    {
       if(DRDY==0)   //等待DRDY变低
        {
           write(0x38);
           if(DRDY==0)  
             {
               a=read();
               b=5*(a/65536);
               zhua(b);   
              }
        }
       xianshi();
}

 

发表评论 评论 (1 个评论)
回复 yhymo321 2010-1-29 09:09
你好,我在一家公司搞开发,有机会的话可以相互交流下,我的QQ63538357

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章