打印

急!!!AD7705通道问题

[复制链接]
4074|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
现在发现AD7705通道2工作是正常的通道1采样不到数据,用1通道的程序,在2通道加模拟信号,把1通道和2通道短路。无采样值,用2通道的程序,在1通道加模拟信号,把1通道和2通道短路,电路正常工作。通道1的程序和通道2仅入口地址不一样。请教各位大侠,怎样解决?

未命名.JPG (60.96 KB )

未命名.JPG

相关帖子

沙发
hubo2782|  楼主 | 2011-6-17 20:42 | 只看该作者
纠结啊,这3天都在查这个问题,还是没什么进展

使用特权

评论回复
板凳
hubo2782|  楼主 | 2011-6-17 20:45 | 只看该作者
ad7705没有损坏

使用特权

评论回复
地板
hubo2782|  楼主 | 2011-6-18 18:17 | 只看该作者
没有人呢?

使用特权

评论回复
5
RGB123| | 2011-6-18 19:39 | 只看该作者
检查一下地址指向

使用特权

评论回复
6
hubo2782|  楼主 | 2011-6-19 09:09 | 只看该作者
sbit AdClk = P2^7;   /* AD7705 时钟脉冲 */
sbit AdDout = P2^4;  /* AD7705 数据输出的反相脉冲 */
sbit AdDin = P2^4;   /* AD7705 数据输入脉冲 */
sbit AdRet = P2^6;   /* AD7705 RESET */
sbit AdDrdy = P2^5;  /* AD7705 DRDY */
/* 功能:延时3 AD7705软件延时 */
void Waitus(unsigned int yanshi4)
{
    for(;yanshi4>0;yanshi4-- );
}
/* AD7705功能函数 */
/* 功能:向AD7705写入一个字节 */
void WriteByte7705(unsigned char x)
{
    unsigned char i;
    AdClk = 1;
    for (i=0;i<8;i++)
    {
        AdClk=0;
        Waitus(1);
        AdDin =(bit) (x & 0x80);
        Waitus(1);
        AdClk=1;
                Waitus(1);
        x<<=1;
    }
}
/* 功能:从AD7705读一个16位数 */
unsigned int ReadWord7705(void)
{
    unsigned char i;
    unsigned int x ;
    AdClk = 1 ;
    for (i=0,x=0;i<16;i++)
    {
        AdClk=0;
        Waitus(1);
        x<<=1;
        if (AdDout==1) //判断AD输出为1
            x |= 0x01;
        AdClk=1;
        Waitus(1);
    }
    return x;
}
/* 功能:AD7705通信端口复位 */
void Reset7705(void)
{
    unsigned char i;
    for(i=0;i<35;i++)
    { /* 多于连续32个 DIN=1 使串口复位 */
        AdClk=0;
        Waitus(1);
        AdDin=1;
        Waitus(1);
        AdClk=1;
        Waitus(1);
    }
}
/**AD7705初始化 输入通道channel--1=IN1,2=IN2;非缓冲模式***************/
void Init7705(unsigned char channel)
{
     
    Reset7705(); /* 防止串口失步 */
    if(channel==1) /* com register ,选择下步操作 setup register */
        {
                  WriteByte7705(0x20);
                     WriteByte7705(0x0D);
                  WriteByte7705(0x10);
                     WriteByte7705(0x40);
                 }
    else
        {
              WriteByte7705(0x21);
                     WriteByte7705(0x0D);
                  WriteByte7705(0x11);
                  WriteByte7705(0x40);
                }
}
/* 读AD7705转换数据 输入通道channel ----1=IN1,2=IN2 */
unsigned int GetData7705(unsigned char channel)
{
    if(channel==1)
        WriteByte7705(0x38);
    else
        WriteByte7705(0x39);
    return ( ReadWord7705() );
}
/* AD7705功能函数结束 */

使用特权

评论回复
7
hubo2782|  楼主 | 2011-6-19 09:10 | 只看该作者
这是相关的程序了,小弟百思不得其解

使用特权

评论回复
8
xuyaqi| | 2011-6-19 09:39 | 只看该作者
不知楼主为何将IN1-,IN2-接2.5v

使用特权

评论回复
9
mmax| | 2011-6-19 09:47 | 只看该作者
感觉你的writebyte7705函数有问题。
只写了8位,那么是写那个寄存器呢?

读到通道1的值,可能AD初始就是切换在通道1上。

使用特权

评论回复
10
xiaotann| | 2011-6-19 12:46 | 只看该作者
地址不一样

使用特权

评论回复
11
hubo2782|  楼主 | 2011-6-19 13:41 | 只看该作者
IN1-,IN2-接2.5v是为了双极性工作,可以采样0-5v的电压值

使用特权

评论回复
12
hubo2782|  楼主 | 2011-6-19 13:43 | 只看该作者
通道1地址最后是00,通道2是01. 11# hubo2782

使用特权

评论回复
13
hubo2782|  楼主 | 2011-6-19 13:44 | 只看该作者
他是先写通信寄存器再写其他的寄存器啊,每次写一个字节 9# mmax

使用特权

评论回复
14
zjy.zz| | 2011-6-19 15:23 | 只看该作者
几年前做电子秤时用过这款ad  ,16bit很稳的,曾用了几年,现在差不多忘光了,如实在需要,联系我,我给你图看看,里面有很多寄存器要设置,现在不想动这个脑子了,qq:709322977

使用特权

评论回复
15
xuyaqi| | 2011-6-19 15:53 | 只看该作者
楼主7705接法有错,双极性工作只需要寄存器设置一下就行,IN1-,IN2-接地。

使用特权

评论回复
16
hubo2782|  楼主 | 2011-6-19 18:43 | 只看该作者
我试试,我是看的pdf才这么接的,pdf上有说若AIN1-=2.5V,双极性输入,增益为2,VREF=2.5V,那么AIN1+输入范围是+1.25-3.75 15# xuyaqi

使用特权

评论回复
17
hubo2782|  楼主 | 2011-6-19 18:44 | 只看该作者
大侠能发到我邮箱么[email=hubo2782@126.comhubo2782@126.com[b[/email]] 14# zjy.zz

使用特权

评论回复
18
hubo2782|  楼主 | 2011-6-20 08:30 | 只看该作者
自己顶一下

使用特权

评论回复
19
hubo2782|  楼主 | 2011-6-20 10:21 | 只看该作者
在顶一下

使用特权

评论回复
20
hubo2782|  楼主 | 2011-6-20 12:48 | 只看该作者
纠结啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

63

帖子

1

粉丝