请问一下ADS7841E要怎么使用?
我最近正照着找来的电路尝试做一个数控电源。电路图的大部分都看懂了,有一部分是ADS7841E和mega16连接。ADS7841E的手册我也大概看明白了一些,但心中还是有几个疑惑:1.我知道ADS7841E在电路中的作用是测量电压和电流,只用了两个通道,控制它大概是向DIN脚写8位控制位,选择通道和模式什么的。但是在程序中药怎么实现呢?
2.BUSY脚的作用是什么呢?
3.要怎么知道它已经转换好了呢?DOUT输出的数据格式是什么样的,又该怎样读取呢?
4.手册上说DCLK是外部时钟输入,这是什么意思呢?要怎么实现,是不是周期性的让单片机引脚置高置低呢?
小弟我在网上找了找寻了很久,但因小弟才疏学浅,对它还是不能很好的理解。所以还得拜托各位,请各位大侠帮帮忙了,非常感谢......:) #define EC_BUSY
#define EC_DCLK
#define EC_DOUT
#define EC_DIN
#define EC_RST
#define EC_SLEEP
unsigned int readdata(unsigned char channel)
{
unsigned int rcvdata;
unsigned char i;
send_cmd_data=((channel&0x07)<<4)|0x87;
EC_CS=0;EC_DCLK=0;EC_DIN=0;
delay(1);
for(i=0;i<8;i++)
{
EC_DCLK=0;
if((send_cmd_data&0x80)==0x80)
{EC_DIN=1;}
else{EC_DIN=0;}
delay(1);
EC_DCLK=1;
delay(1);
send_cmd_data=send_cmd_data<<1;
}
EC_DCLK=0;EC_DIN=0;
delay(5);
for(i=0;i<16;i++)
{
EC_DCLK=0;
delay(1);
EC_DCLK=1;
if(EC_DOUT==0x1)
{rcvdata|=0x0001;}
if(EC_DOUT==0x0)
{rcvdata&=0xfffe;}
rcvdata=rcvdata<<1;
delay(1);
}
rcvdata=rcvdata>>4;
EC_DCLK=0;EC_CS=1;
return rcvdata;
}
unsigned int ad7841_read(unsigned char channel)
{
int i;
int ec_tmp;
int tmp;
for(i=0;i<9;i++)
{
ec_tmp=readdata(channel);
}
for(i=0;i<8;i++)
{
if(ec_tmp>ec_tmp)
{tmp=ec_tmp;ec_tmp=ec_tmp;ec_tmp=tmp;}
if(ec_tmp>ec_tmp&&i<7)
{tmp=ec_tmp;ec_tmp=ec_tmp;ec_tmp=tmp;}
if(ec_tmp>ec_tmp&&i<6)
{tmp=ec_tmp;ec_tmp=ec_tmp;ec_tmp=tmp;}
if(ec_tmp>ec_tmp&&i<5)
{tmp=ec_tmp;ec_tmp=ec_tmp;ec_tmp=tmp;}
if(ec_tmp>ec_tmp&&i<4)
{tmp=ec_tmp;ec_tmp=ec_tmp;ec_tmp=tmp;}
if(ec_tmp>ec_tmp&&i<3)
{tmp=ec_tmp;ec_tmp=ec_tmp;ec_tmp=tmp;}
if(ec_tmp>ec_tmp&&i<2)
{tmp=ec_tmp;ec_tmp=ec_tmp;ec_tmp=tmp;}
if(ec_tmp>ec_tmp&&i<1)
{tmp=ec_tmp;ec_tmp=ec_tmp;ec_tmp=tmp;}
}
return ec_tmp;
}
楼主这是驱动程序 你自己把时序图拿出来对着看吧。可以用的 真是太谢谢你了!:lol 跪求ADS7841E使用手册 急用! BUSY脚的作用程序里面没有写啊,
这个脚从时序图看,只有由高变低后,数据才是有效位开始,,,你程序里面不判断一下,就只延迟了一下,就开始读取,怕会出问题,
还有你后边的程序,是做什么的,
for(i=0;i<8;i++)
{
if(ec_tmp>ec_tmp)
{tmp=ec_tmp;ec_tmp=ec_tmp;ec_tmp=tmp;}
if(ec_tmp>ec_tmp&&i<7)
{tmp=ec_tmp;ec_tmp=ec_tmp;ec_tmp=tmp;}
if(ec_tmp>ec_tmp&&i<6)
{tmp=ec_tmp;ec_tmp=ec_tmp;ec_tmp=tmp;}
if(ec_tmp>ec_tmp&&i<5)
{tmp=ec_tmp;ec_tmp=ec_tmp;ec_tmp=tmp;}
if(ec_tmp>ec_tmp&&i<4)
{tmp=ec_tmp;ec_tmp=ec_tmp;ec_tmp=tmp;}
if(ec_tmp>ec_tmp&&i<3)
{tmp=ec_tmp;ec_tmp=ec_tmp;ec_tmp=tmp;}
if(ec_tmp>ec_tmp&&i<2)
{tmp=ec_tmp;ec_tmp=ec_tmp;ec_tmp=tmp;}
if(ec_tmp>ec_tmp&&i<1)
{tmp=ec_tmp;ec_tmp=ec_tmp;ec_tmp=tmp;}
}
return ec_tmp;
页:
[1]