打印

请问一下ADS7841E要怎么使用?

[复制链接]
5074|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lknmlo|  楼主 | 2011-4-17 19:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我最近正照着找来的电路尝试做一个数控电源。电路图的大部分都看懂了,有一部分是ADS7841E和mega16连接。ADS7841E的手册我也大概看明白了一些,但心中还是有几个疑惑:
    1.我知道ADS7841E在电路中的作用是测量电压和电流,只用了两个通道,控制它大概是向DIN脚写8位控制位,选择通道和模式什么的。但是在程序中药怎么实现呢?
    2.BUSY脚的作用是什么呢?
    3.要怎么知道它已经转换好了呢?DOUT输出的数据格式是什么样的,又该怎样读取呢?
    4.手册上说DCLK是外部时钟输入,这是什么意思呢?要怎么实现,是不是周期性的让单片机引脚置高置低呢?

小弟我在网上找了找寻了很久,但因小弟才疏学浅,对它还是不能很好的理解。所以还得拜托各位,请各位大侠帮帮忙了,非常感谢......:)

相关帖子

沙发
yicaiwu| | 2011-4-17 23:00 | 只看该作者
#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[9];
        int tmp;
        for(i=0;i<9;i++)
        {
                ec_tmp[i]=readdata(channel);
        }
        for(i=0;i<8;i++)
        {
                if(ec_tmp[0]>ec_tmp[1])
                {tmp=ec_tmp[0];ec_tmp[0]=ec_tmp[1];ec_tmp[1]=tmp;}
                if(ec_tmp[1]>ec_tmp[2]&&i<7)
                {tmp=ec_tmp[1];ec_tmp[1]=ec_tmp[2];ec_tmp[2]=tmp;}
                if(ec_tmp[2]>ec_tmp[3]&&i<6)
                {tmp=ec_tmp[2];ec_tmp[2]=ec_tmp[3];ec_tmp[3]=tmp;}
                if(ec_tmp[3]>ec_tmp[4]&&i<5)
                {tmp=ec_tmp[3];ec_tmp[3]=ec_tmp[4];ec_tmp[4]=tmp;}
                if(ec_tmp[4]>ec_tmp[5]&&i<4)
                {tmp=ec_tmp[4];ec_tmp[4]=ec_tmp[5];ec_tmp[5]=tmp;}
                if(ec_tmp[5]>ec_tmp[6]&&i<3)
                {tmp=ec_tmp[5];ec_tmp[5]=ec_tmp[6];ec_tmp[6]=tmp;}
                if(ec_tmp[6]>ec_tmp[7]&&i<2)
                {tmp=ec_tmp[6];ec_tmp[6]=ec_tmp[7];ec_tmp[7]=tmp;}
                if(ec_tmp[7]>ec_tmp[8]&&i<1)
                {tmp=ec_tmp[7];ec_tmp[7]=ec_tmp[8];ec_tmp[8]=tmp;}
        }
        return ec_tmp[4];
}
楼主这是驱动程序 你自己把时序图拿出来对着看吧。可以用的

使用特权

评论回复
板凳
lknmlo|  楼主 | 2011-4-18 12:26 | 只看该作者
真是太谢谢你了!:lol

使用特权

评论回复
地板
754385743| | 2013-5-16 21:52 | 只看该作者
跪求ADS7841E使用手册

使用特权

评论回复
5
754385743| | 2013-5-16 21:53 | 只看该作者
急用!

使用特权

评论回复
6
sanzi666| | 2022-9-6 15:17 | 只看该作者
BUSY脚的作用程序里面没有写啊,
这个脚从时序图看,只有由高变低后,数据才是有效位开始,,,你程序里面不判断一下,就只延迟了一下,就开始读取,怕会出问题,
还有你后边的程序,是做什么的,
for(i=0;i<8;i++)
        {
                if(ec_tmp[0]>ec_tmp[1])
                {tmp=ec_tmp[0];ec_tmp[0]=ec_tmp[1];ec_tmp[1]=tmp;}
                if(ec_tmp[1]>ec_tmp[2]&&i<7)
                {tmp=ec_tmp[1];ec_tmp[1]=ec_tmp[2];ec_tmp[2]=tmp;}
                if(ec_tmp[2]>ec_tmp[3]&&i<6)
                {tmp=ec_tmp[2];ec_tmp[2]=ec_tmp[3];ec_tmp[3]=tmp;}
                if(ec_tmp[3]>ec_tmp[4]&&i<5)
                {tmp=ec_tmp[3];ec_tmp[3]=ec_tmp[4];ec_tmp[4]=tmp;}
                if(ec_tmp[4]>ec_tmp[5]&&i<4)
                {tmp=ec_tmp[4];ec_tmp[4]=ec_tmp[5];ec_tmp[5]=tmp;}
                if(ec_tmp[5]>ec_tmp[6]&&i<3)
                {tmp=ec_tmp[5];ec_tmp[5]=ec_tmp[6];ec_tmp[6]=tmp;}
                if(ec_tmp[6]>ec_tmp[7]&&i<2)
                {tmp=ec_tmp[6];ec_tmp[6]=ec_tmp[7];ec_tmp[7]=tmp;}
                if(ec_tmp[7]>ec_tmp[8]&&i<1)
                {tmp=ec_tmp[7];ec_tmp[7]=ec_tmp[8];ec_tmp[8]=tmp;}
        }
        return ec_tmp[4];

使用特权

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

本版积分规则

个人签名:静坐长思己过,闲谈莫论人非

0

主题

6

帖子

1

粉丝