fengkehy 发表于 2009-11-18 12:35:47

AD7705 应用补充说明 附完整程序

AD7705 性价比比较高的 16位 ad 使用比较简单
用做单通道的时候 基本不怎么需要设置
做双通道的时候,发现的点问题 ,而这几点问题在网上的前辈那也没有特别说明
这里提出来供用的着 AD7705 的参考下

1. 关于时钟寄存器 AD7705 只有一个时钟寄存器 而不是两个。 2.4576MHZ 是标准频率 ,如果用 4.9152MHZ的时候,要将 CLKDIV位置位
   也就是 2 分频到 2.4576 具体设置看手册
2. 关于数据寄存器 AD7705 也只有一个数据寄存器 ,一段时间内只能对一路 AD输入做数据转换 。数据转换范围
   单极性 0 -- Vref/Gain 对应 0 -- 0xffff(65535)
   双极性 -Vref/Gain -- 0 对应 0 -- 0x8000(32768) 0 - Vref/Gain 对应 0x8000(32768) -- 0xffff(65535)
3. 关于设置寄存器 同样也只有一个 ,要用哪个通道 就要先设置这个通道对应的寄存器值
4. 校准寄存器 虽然有 4对 但只是对应外部校准的 所以在用自校准,通道切换的时候也要重新自校准一下,校准的时候 DRDY 为高电平,校准完后 为低电平
   校准完后 第一次读的数据 不怎么准 应该读第二次转换出来的数据。

下边是我单通道切换转换的程序:
#include <iom16v.h>

//SPI 引脚定义 PB 口
#define CS_DRDY       3
#define CS_CS      4
#define CS_MOSI      5
#define CS_MISO        6
#define CS_SCK       7

extern void SpiInit(void);                     // SPI 初始化 M16
extern void InitAD7705(void);                  // AD7705 初始化   
extern unsigned int ReadDataCH1(void);         //读取转换数据   
extern unsigned int ReadDataCH2(void);         //读取转换数据   


#include "AD7705.H"

//定义位操作
#define SET_BIT(x,y)   ((x) |= (0x0001 << (y)))
#define CLR_BIT(x,y)   ((x) &= ~(0x0001 <<(y)))
#define CPL_BIT(x,y)   ((x) ^= (0x0001 << (y)))
#define GET_BIT(x,y)   (((x) & (1 << (y))) == 0? 0:1)
#define LET_BIT(x,y,z) ((x) = (x) & (~(1 << (y))) | ((z) << (y)))

//**********************短延时程序50us**************************//
void delay50us(unsigned int t)
{
    unsigned intj;
    for(;t>0;t--)
      for(j=0;j<70;j++);
}

// SPI 初始化 M16
void SpiInit(void)
{   
//cs 置为输出 方可不影响 SPI 总线   
DDRB|=(1<<CS_MOSI)|(1<<CS_SCK)|(1<<CS_CS);
//使能 spi 设置为主机 时钟极性为空闲时高平 上升沿采样下降沿设置分频系数为128分频   
SPCR|=(1<<SPE)|(1<<MSTR)|(1<<SPR0);
SPSR = 0x00; //setup SPI
SET_BIT(PORTB,CS_DRDY);   //设置 REDY 信号输入端口上拉电阻使能   
SET_BIT(PORTB,CS_MISO);   //设置 MISO 信号输入端口上拉电阻使能   
}

// SPI 发送接收数据
unsigned char TransmitterSpi(unsigned char cData)
{   
    SPDR = cData;
    while(!(SPSR&(1<<SPIF)));
    return SPDR;   
}

//复位 AD7705
void ResetAD(void)
{
unsigned char i ;
for(i = 10;i>0;i--)         //持续DIN高电平写操作,恢复AD7705接口
   {
           TransmitterSpi(0xff);
       }
}

// AD7705 初始化   
void InitAD7705(void)
{
CLR_BIT(PORTB,CS_CS);       //CS置为输出低电平,使能 AD7705
ResetAD() ;
TransmitterSpi(0x20);       //通讯寄存器 //通道 1,下一个写时钟寄存器 自校准
TransmitterSpi(0x00);       //时钟寄存器 //写时钟寄存器设置 2.459Mhz更新速率为20hz
TransmitterSpi(0x10);       //通讯寄存器 //通道 1,下一个写设置寄存器
TransmitterSpi(0x48);       //设置寄存器 //自校准,增益 1,双极 ,缓冲
delay50us(100);             //延时
TransmitterSpi(0x21);       //通讯寄存器 //通道 2,下一个写时钟寄存器 自校准
TransmitterSpi(0x00);       //时钟寄存器 //写时钟寄存器设置 2.459Mhz更新速率为20hz
TransmitterSpi(0x11);       //通讯寄存器 //通道 2,下一个写设置寄存器
TransmitterSpi(0x48);       //设置寄存器 //自校准,增益 1,双极,缓冲
delay50us(100);                        
}


//*************************** 按照通道 1 读取 ****************************//
unsigned intReadDataCH1(void)
{
unsigned intgetData = 0;
unsigned char bufR;

TransmitterSpi(0x10);          //通讯寄存器 //通道 1,下一个写设置寄存器
TransmitterSpi(0x48);          //设置寄存器 //自校准,增益 1,双极 ,缓冲
while(PINB&(1<<CS_DRDY));      //等待校准完成READY 信号变为低电平
TransmitterSpi(0x38);          //发送 0x38 读取 CH1 数据寄存器
while(PINB&(1<<CS_DRDY));      //等待 READY 信号变为低电平
bufR=TransmitterSpi(0xff);//转换结果高位
bufR=TransmitterSpi(0xff);//转换结果低位
getData=(bufR<<8)|bufR;//获得数据 16 位

return getData ;                   //返回数据
}

//***************************按照通道 2 读取****************************//
unsigned intReadDataCH2(void)
{
unsigned intgetData = 0;
unsigned char bufR;

TransmitterSpi(0x11);          //通讯寄存器 //通道 1,下一个写设置寄存器
TransmitterSpi(0x48);          //设置寄存器 //自校准,增益 1,双极 ,缓冲
while(PINB&(1<<CS_DRDY));      //等待校准完成 READY 信号变为低电平   
TransmitterSpi(0x39);          //发送 0x01 读取 AD7705 数据寄存器
while(PINB&(1<<CS_DRDY));      //等待 READY 信号变为低电平
bufR=TransmitterSpi(0xff);//转换结果高位
bufR=TransmitterSpi(0xff);//转换结果低位

getData=(bufR<<8)|bufR; //读取数据前 16 位

return getData ;               
}

void main(void)
{
unsigned char adi ;
unsigned int getData,getData2;
SpiInit();
InitAD7705();
while(1)
      {
           if(adi++ >=1) adi = 0;
           if(adi == 0) getData = ReadDataCH1();
       if(adi == 1) getData2 = ReadDataCH2();
           }

}
                                                                  天涯过客

程序文件ourdev_504515.rar(文件大小:18K) (原文件名:AD7705.rar)

aduc812 发表于 2009-12-7 10:46:21

sdxjgby 发表于 2009-12-8 23:14:51

谢啦!

fengye2009 发表于 2009-12-11 23:36:01

mark

lee345 发表于 2010-7-20 13:57:19

谢谢

jtj203 发表于 2010-7-29 09:54:06

mark

ljt8015 发表于 2010-7-29 09:58:12

mark!~~

anxiangbo 发表于 2010-7-30 13:50:38

记号

hailin0716 发表于 2010-7-30 17:37:39

楼主无私。顶一下

s1031129012 发表于 2010-8-2 10:30:02

./emotion/em025.gif

wenming 发表于 2010-8-2 10:42:08

程序不错

HYLG 发表于 2010-8-2 12:58:37

AD7705单通道用得很好.但第二个通道从来没正常过,一般是正常值的一半.
原因也一直没找到.不知是芯片不行还是我不行.
按楼主的方法试试看行不行.
另外楼主的AD7705多少钱买的.我买的好像30左右.
TM7708 24位的10元左右,以前买的,感觉还可以,现在应该有新型号了.

hailin0716 发表于 2011-5-6 09:21:53

谢谢

guochang02 发表于 2011-5-11 08:13:39

好贵的东东啊

unclewolf 发表于 2011-5-11 09:24:07

不错

lcmdw 发表于 2011-10-19 09:55:31

mark

Spunky 发表于 2011-10-19 11:46:02

mark

swustlx86 发表于 2011-11-2 16:01:14

MARK

371278638 发表于 2012-9-19 16:10:18

HYLG 发表于 2010-8-2 12:58 static/image/common/back.gif
AD7705单通道用得很好.但第二个通道从来没正常过,一般是正常值的一半.
原因也一直没找到.不知是芯片不行还 ...

请问你的正常了吗?我的老喜欢死机......

HYLG 发表于 2012-9-19 16:13:52

死机跟时序有关系。

houzengmin 发表于 2012-9-21 10:20:52

{:victory:}{:victory:}{:handshake:}

371278638 发表于 2012-9-22 12:25:45

HYLG 发表于 2012-9-19 16:13 static/image/common/back.gif
死机跟时序有关系。

恩 找到原因了!是换通道是初始化没弄好!

yfgww 发表于 2012-10-8 15:33:27

{:smile:}{:smile:}{:smile:}

qgbgzp 发表于 2012-11-6 15:19:49

记号,最近准备用7705,谢谢楼主

liuyang8023 发表于 2013-8-12 14:52:24

{:smile:}{:smile:}

gzhmcu 发表于 2013-8-12 15:00:54

建议不用这个吧,抗干扰性太差

8s209 发表于 2013-8-12 20:10:16

正需要啊,谢谢分享

qinshiysb 发表于 2014-5-15 23:58:57

谢谢楼主慷慨分享

lncwangfeilnc 发表于 2014-5-17 18:11:37

mark                  

CandD 发表于 2014-5-24 09:22:28

感谢楼主

lxjmcuahz 发表于 2015-3-7 21:40:50

谢谢楼主。

jxcrg_t35 发表于 2015-3-8 10:27:45

马克,留有后续运用。谢谢楼主

laotui 发表于 2015-3-8 10:39:38

gzhmcu 发表于 2013-8-12 15:00
建议不用这个吧,抗干扰性太差

请教一下有没有能可靠分辨100uv的AD,一开始也准备有AD7705.

amigenius 发表于 2015-3-8 10:59:31

我可以直白一点吗?将这个程序用在工业环境,绝对死翘翘。AD7705虽然简单,但要工业环境下365x7x24小时不间断工作,是有一番学问的。

amigenius 发表于 2015-3-8 11:01:05

另外,通道切换,无需自校准,只是需要一些时间等sin5滤波器稳定。

liuchengliaaa 发表于 2015-3-8 12:09:45

原来弄过7715
就是觉得这ad的片子好贵的说

chunyu 发表于 2015-3-12 21:13:11

看看   还是可以备份

281313005 发表于 2017-5-13 16:55:51

amigenius 发表于 2015-3-8 10:59
我可以直白一点吗?将这个程序用在工业环境,绝对死翘翘。AD7705虽然简单,但要工业环境下365x7x24小时不间 ...

前辈,请教您一下:AD7705在工业或者电磁干扰比较严重的情况下运行,要注意哪些细节?谢谢!!

BS_good200xy 发表于 2017-6-23 09:14:28

原来也想用AD7705,有时间研究一下,谢谢!

wkman 发表于 2017-6-25 11:02:13

{:titter:}价格¥太高,就用 Tm7705凑合一下

ffbiao 发表于 2017-6-26 09:46:18

谢谢坛友,看了部分代码,突然有灵感修正一个令我恼怒的bug

wgfnyk 发表于 2017-12-17 08:34:14

TransmitterSpi(0x11);          //通讯寄存器 //通道 1,下一个写设置寄存器
TransmitterSpi(0x48);          //设置寄存器 //自校准,增益 1,双极 ,缓冲
while(PINB&(1<<CS_DRDY));      //等待校准完成 READY 信号变为低电平   
TransmitterSpi(0x39);          //发送 0x01 读取 AD7705 数据寄存器
while(PINB&(1<<CS_DRDY));      //等待 READY 信号变为低电平---->不能在这里再判断DRDY,否则异常。
bufR=TransmitterSpi(0xff);//转换结果高位
bufR=TransmitterSpi(0xff);//转换结果低位

tangly2017 发表于 2018-3-13 22:30:02

好东西,谢谢楼主的分享!!!!!!!!

tangpeng 发表于 2018-4-8 09:43:40

留下了   性价比高的芯片

zxd0225 发表于 2018-4-8 10:36:57

我都不敢用7705了,端口容易迷失。

shuipaopao 发表于 2018-6-22 09:54:25

zxd0225 发表于 2018-4-8 10:36
我都不敢用7705了,端口容易迷失。

你好,请问一下端口迷失是什么意思?有什么现象。最近我也用到这个片子也出现莫名其妙的问题。

amigenius 发表于 2018-6-22 10:05:27

zxd0225 发表于 2018-4-8 10:36
我都不敢用7705了,端口容易迷失。

这个才是含金量的东西

amigenius 发表于 2018-6-22 10:07:01

zxd0225 发表于 2018-4-8 10:36
我都不敢用7705了,端口容易迷失。

我可以告诉您AD7705(不是TM),可以做到在5Kv EFT环境下,24*7*365一直不间断稳定工作吗?

shuipaopao 发表于 2018-6-27 09:02:16

amigenius 发表于 2018-6-22 10:07
我可以告诉您AD7705(不是TM),可以做到在5Kv EFT环境下,24*7*365一直不间断稳定工作吗?
...

请问一下采取什么措施能避免端口迷失?或者端口迷失不可避免的话,在端口迷失后怎样操作,我现在做的是每次读取之前先发送56个脉冲,但这样还不敢确定不出问题。谢谢

gonghuwei 发表于 2018-6-30 21:19:22

感谢楼主, 收藏了。

大眼睛盒 发表于 2018-8-8 06:32:43

天微的TM7705TM7708 怎么样? 价格降成了白菜 不知道稳定性如何

focus_hai 发表于 2018-8-8 07:43:48

mark一下,留着学习

smartmeter 发表于 2018-8-8 07:49:05

7705抗干扰比较差,我用接触器打打里面的寄存器的数据就乱掉了

AllEle 发表于 2018-8-14 10:26:05

又长见识了

tangpeng 发表于 2018-8-15 08:45:14

经典款adc

粤H广宁 发表于 2018-8-17 14:50:18

正正在用这个芯片
页: [1]
查看完整版本: AD7705 应用补充说明 附完整程序