AD7705的DRDY一直是高电平是什么原因?
写程序控制AD7705,但是它的DRDY一直是高电平,好像一直没有转换,是为什么呢?配置的不正确吧。你用什么片子控制的,给你个代码,一个是ADI官方的,一个是天微的,完全兼容, 我已经试过了。
你你首先要确定时序对不对。能不能正确的发送命令。可用写一个寄存器再读一下试试。
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);
}
我正在用着的文件,便宜你了。
不明白的先看看datesheet吧。问题直接回帖
jishuaihu 发表于 2015-5-6 15:45
我正在用着的文件,便宜你了。
不明白的先看看datesheet吧。问题直接回帖
问题解决了,发现是硬件电路问题,谢谢大家啦!
tanzhiying 发表于 2015-5-7 13:59
问题解决了,发现是硬件电路问题,谢谢大家啦!
硬件那的问题
<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> <div class='shownolgin' data-isdigest='no'>liu100149 发表于 2015-5-14 09:06
硬件那的问题
引脚DIN和DOUT配置反了,就用这个程序改过来就好了。
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>tanzhiying 发表于 2015-5-14 09:51
引脚DIN和DOUT配置反了,就用这个程序改过来就好了。
我还现读出的数据偏大.</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>liu100149 发表于 2015-5-14 10:59
我还现读出的数据偏大.
大多少?要是跟理论值差别很大的话看看是不是你的单极性双极性设置的问题,差别不大的话测一下你的参考电压,计算的时候应该用2^n-1。
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>tanzhiying 发表于 2015-5-14 11:09
大多少?要是跟理论值差别很大的话看看是不是你的单极性双极性设置的问题,差别不大的话测一下你的参考电压,计算的时候应该用2^n-1。
一半呢
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>liu100149 发表于 2015-5-14 11:12
一半呢
第一次读的都是0x0cff,后面的感觉比实大一半.</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>liu100149 发表于 2015-5-14 11:14
第一次读的都是0x0cff,后面的感觉比实大一半.
先试试是不是极性设置的问题吧。
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>tanzhiying 发表于 2015-5-14 11:18
先试试是不是极性设置的问题吧。
试了不是极性,我用的是AD7706</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>liu100149 发表于 2015-5-14 11:27
试了不是极性,我用的是AD7706
那我做的简单一些了,那你再看看网上的例程好了。
</div><script>showreplylogin();</script> <div class='shownolgin' data-isdigest='no'>解决了吗?</div><script>showreplylogin();</script> <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]