tanzhiying 发表于 2015-5-5 15:00

AD7705的DRDY一直是高电平是什么原因?

写程序控制AD7705,但是它的DRDY一直是高电平,好像一直没有转换,是为什么呢?

jishuaihu 发表于 2015-5-6 09:35

配置的不正确吧。你用什么片子控制的,给你个代码,一个是ADI官方的,一个是天微的,完全兼容, 我已经试过了。
你你首先要确定时序对不对。能不能正确的发送命令。可用写一个寄存器再读一下试试。




tanzhiying 发表于 2015-5-6 13:10

jishuaihu 发表于 2015-5-6 09:35
配置的不正确吧。你用什么片子控制的,给你个代码,一个是ADI官方的,一个是天微的,完全兼容, 我已经试过了。
你你首先要确定时序对不对。能不能正确的发送命令。可用写一个寄存器再读一下试试。

我是用MSP430,下面是我的程序,是不是配置完寄存器就可以直接它就自己会进行AD转换?还是要设置什么来启动啊?感觉我的芯片就是没有工作,DRDY电平一直是高的,换一块新的芯片还是这样。




#include "msp430x12x.h"

/*********************define_ad7705**********************************/



#define         SCLK_out         P2DIR|=BIT0      //p2.0_out

#define         SCLK_L         P2OUT&=~BIT0       //p2.0=0

#define         SCLK_H         P2OUT|=BIT0         //p2.0=1



#define         DIN_out      P2DIR|=BIT1      //p2.1_out

#define         DIN_L          P2OUT&=~BIT1       //p2.1=0

#define         DIN_H          P2OUT|=BIT1      //p2.1=1



#define         DOUT_in       P2DIR&=~BIT2      //p2.2_in

#define         DOUT_get       P2IN&BIT2          //为高



#define         DRDY_out      P2DIR|=BIT3      //p2.3_out

#define         DRDY_in         P2DIR&=~BIT3       //p2.3_in

#define         DRDY_H         P2OUT|=BIT3         //p2.3=1      

#define         DRDY_L         P2OUT&=~BIT3       //p2.3=0

#define         DRDY_get      P2IN&BIT3



/*******************************************************************/

void init_7705(void);

void write_7705(unsigned int cmd);

void read_7705(void);

void delay(unsigned int num);

void reset_7705(void);



int main( void )

{

// Stop watchdog timer to prevent time out reset

WDTCTL = WDTPW + WDTHOLD;



//IO口配置

SCLK_out;

DIN_out;

DOUT_in;

DRDY_in;

   reset_7705();

delay(10000);

while(1)

{

      init_7705();

      read_7705();   

}

return 0;

}





void init_7705(void)

{   

    SCLK_H;      //串行时钟置一

    DIN_H;   //串行数据置一   

    write_7705(0x20);   //通道0,选择时钟寄存器

    write_7705(0x00);   //转换速率20HZ   

    write_7705(0x10);   //通道0,选择设置寄存器

    write_7705(0x40);   //自校准1倍 双极性

    //DRDY_in;

/*

    while(DRDY_get)

    {

   delay(100);

    }               //等待drdy变低

    DRDY_out;

*/

}



void read_7705(void)

{

    unsigned int i;

    unsigned int ad16bit=0x0000;

    write_7705(0x38);   //选数据寄存器,通道0   

    DRDY_in;

    while(DRDY_get)

    {

    }

    DRDY_out;

    delay(1000);

    SCLK_H;      

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

    {

      ad16bit=ad16bit<<1;

      SCLK_L;



      if(DOUT_get)

      {

          ad16bit|=BIT0;

      }

      else

      {

          ad16bit&=~BIT0;

      }

       SCLK_H;

    }

    DIN_H;

}



void write_7705(unsigned int cmd)

{

    unsigned int i;   

    DIN_H;

    SCLK_H;   

    for(i=8;i>0;i--)

    {

      SCLK_L;               

         if(cmd&0x80)

      {

            DIN_H;

      }

      else

      {

            DIN_L;

      }      

      SCLK_H;

      cmd<<=1;

    }   

    DIN_H;

}



void delay(unsigned int num)

{

    unsigned int temp;

    for(temp=0;temp<num;temp++)

    {}

}



//AD7705通信端口复位

void reset_7705(void)

{

    unsigned char i;

      SCLK_H;

    for(i=0;i<40;i++)      //*多于连续32个 din=1 使串口复位

    {

      SCLK_L;

      DIN_H;

      SCLK_H;

    }

      delay(100);

}



jishuaihu 发表于 2015-5-6 15:45

我正在用着的文件,便宜你了。

不明白的先看看datesheet吧。问题直接回帖

tanzhiying 发表于 2015-5-7 13:59

jishuaihu 发表于 2015-5-6 15:45
我正在用着的文件,便宜你了。

不明白的先看看datesheet吧。问题直接回帖

问题解决了,发现是硬件电路问题,谢谢大家啦!

liu100149 发表于 2015-5-14 09:06

tanzhiying 发表于 2015-5-7 13:59
问题解决了,发现是硬件电路问题,谢谢大家啦!

硬件那的问题

liu100149 发表于 2015-5-14 09:07

<div class='shownolgin' data-isdigest='no'>tanzhiying 发表于 2015-5-7 13:59
问题解决了,发现是硬件电路问题,谢谢大家啦!

我也出现这个问题</div><script>showreplylogin();</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

tanzhiying 发表于 2015-5-14 09:51

<div class='shownolgin' data-isdigest='no'>liu100149 发表于 2015-5-14 09:06
硬件那的问题

引脚DIN和DOUT配置反了,就用这个程序改过来就好了。
</div><script>showreplylogin();</script>

liu100149 发表于 2015-5-14 10:59

<div class='shownolgin' data-isdigest='no'>tanzhiying 发表于 2015-5-14 09:51
引脚DIN和DOUT配置反了,就用这个程序改过来就好了。

我还现读出的数据偏大.</div><script>showreplylogin();</script>

tanzhiying 发表于 2015-5-14 11:09

<div class='shownolgin' data-isdigest='no'>liu100149 发表于 2015-5-14 10:59
我还现读出的数据偏大.

大多少?要是跟理论值差别很大的话看看是不是你的单极性双极性设置的问题,差别不大的话测一下你的参考电压,计算的时候应该用2^n-1。
</div><script>showreplylogin();</script>

liu100149 发表于 2015-5-14 11:12

<div class='shownolgin' data-isdigest='no'>tanzhiying 发表于 2015-5-14 11:09
大多少?要是跟理论值差别很大的话看看是不是你的单极性双极性设置的问题,差别不大的话测一下你的参考电压,计算的时候应该用2^n-1。

一半呢
</div><script>showreplylogin();</script>

liu100149 发表于 2015-5-14 11:14

<div class='shownolgin' data-isdigest='no'>liu100149 发表于 2015-5-14 11:12
一半呢

第一次读的都是0x0cff,后面的感觉比实大一半.</div><script>showreplylogin();</script>

tanzhiying 发表于 2015-5-14 11:18

<div class='shownolgin' data-isdigest='no'>liu100149 发表于 2015-5-14 11:14
第一次读的都是0x0cff,后面的感觉比实大一半.

先试试是不是极性设置的问题吧。
</div><script>showreplylogin();</script>

liu100149 发表于 2015-5-14 11:27

<div class='shownolgin' data-isdigest='no'>tanzhiying 发表于 2015-5-14 11:18
先试试是不是极性设置的问题吧。

试了不是极性,我用的是AD7706</div><script>showreplylogin();</script>

tanzhiying 发表于 2015-5-14 11:36

<div class='shownolgin' data-isdigest='no'>liu100149 发表于 2015-5-14 11:27
试了不是极性,我用的是AD7706

那我做的简单一些了,那你再看看网上的例程好了。
</div><script>showreplylogin();</script>

老毒物 发表于 2018-12-2 23:26

<div class='shownolgin' data-isdigest='no'>解决了吗?</div><script>showreplylogin();</script>

海天一色001 发表于 2022-2-17 15:01

<div class='shownolgin' data-isdigest='no'><p><img height="50" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan33.gif" width="58" /></p>
</div><script>showreplylogin();</script>
页: [1]
查看完整版本: AD7705的DRDY一直是高电平是什么原因?