📄 已经正确可用的ad7705程序 (ourdev_cn 我们的电子开发社区).htm
字号:
color=#ffffff>已经正确可用的AD7705程序</FONT></SPAN> </TD>
<TD align=middle width="19%"><SPAN class=f06><FONT
color=#ffffff>回复数:</FONT><FONT color=#ffffff>34</FONT>,点击数:2526</FONT>
</SPAN></TD></TR></TBODY></TABLE>
<TABLE style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellSpacing=0
cellPadding=6 width="100%" border=0>
<TBODY>
<TR>
<TD></TD></TR>
<TR>
<TD class=f03 vAlign=top align=middle width="100%" bgColor=#a3b2cc><FONT
color=#555555>抱歉本贴的回复数太多,为了减轻网络流量,只显示帖子正文的前后各10个回复。本贴的正文内容中间隐藏了14个回复。你需要
<A class=tt4
href="http://www.ouravr.com/bbs/bbs_content_all.jsp?bbs_sn=782720">点击此处</A>
才能查看全部内容。<BR>对为你带来的访问不便表示歉意。不过我们仍会坚持即使没有登录,仍能共享我们网站的所有资料。你没有 <A class=tt4
href="http://www.ouravr.com/bbs/login_interface.jsp?mother_form=bbs_content.jsp&bbs_sn=782720&bbs_id=1000&bbs_page_no=1">登录</A>后就能消除这个访问上的不便(可增加到显示60个回复)。<BR>如果你是新用户请先
<A class=tt4
href="http://www.ouravr.com/bbs/register_interface.jsp?mother_form=bbs_content.jsp&bbs_sn=782720&bbs_id=1000&bbs_page_no=1">注册</A>。注册是免费的,并且手续简单只需要填写用户名与口令。
<BR>↓↓↓↓↓↓↓↓↓↓↓↓ </FONT></TD></TR>
<TR>
<TD></TD></TR></TBODY></TABLE>
<TABLE style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellSpacing=0
cellPadding=6 width="100%" border=0>
<TBODY>
<TR>
<TD class=f03
style="BORDER-RIGHT: #ffffff 0.5pt solid; BORDER-TOP: #ffffff 0.5pt solid; BORDER-LEFT: #bbbbbb 0.5pt solid; BORDER-BOTTOM: #ffffff 0.5pt solid"
vAlign=top align=left width="19%" bgColor=#d1d9e2 rowSpan=2>【楼主位】 <FONT
color=#000000>nicholasldf 罗</FONT><BR>积分:<FONT
color=#000000>130</FONT><BR>派别:<FONT color=#000000></FONT><BR>等级:<FONT
color=#000000>------</FONT><BR>来自:<FONT color=#000000>广东深圳</FONT><BR></TD>
<TD class=f03
style="BORDER-RIGHT: #bbbbbb 0.5pt solid; BORDER-TOP: #ffffff 0.5pt solid; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none"
vAlign=top width="81%" bgColor=#d1d9e2><FONT
color=#000000> AD7705应用注意要点:
<BR> (1) DRDY逻辑不要搞反,高电平时等待转换状态,低电平为可以读取转换数据
<BR> (2) 系统校准时输入信号要大于所选量程的4/5,否则校准不到32767。
<BR> (3) 校准时要等待一定的时间,读取数据也一样,不能超过转换速率。
<BR> (4) 一般的应用只要内部校准,这个很简单,只要初始化就可以。如果测量范围不是芯片的范围,可以通过系统校准来实现,满量程校准电压要大于量程的4/5
<BR><BR>#include <util/delay.h>
<BR>#include <avr/eeprom.h> <BR>#include "ad7705.h"
<BR>#include "main.h" <BR>#include "crc16.h"
<BR>#include "Usart.h" <BR><BR>//针对四个量程的设置寄存器的设置内容
<BR>//(1)对于单极性V级别输入0-5V、0-20mA、0-10V这三个量程,输入范围为0-2V,无极性,增益为1,缓冲模式--0-2V
<BR>//(2)对于双极性V级别输入+-2.5V、+-5V这两个量程,输入范围为+-1V,双极性,增益为2,缓冲模式--+-2V
<BR>//(3)对于双精度mV级别输入+-500mV,增益为4,双极性,缓冲模式--+-2V
<BR>//(4)对双精度mV级别+-50mV,增益为32,双极性,缓冲模式--+-1.6V
<BR>//------MD1(0) MD0(0) G2(0) G1(0) G0(0) B/U(0) BUF(0) FSYNC(0)--------------------------//
<BR>const unsigned char text_of_setup[4]={0X04,0X08,0X10,0X28}; //非缓冲模式,数字滤波同步
<BR>//const unsigned char text_of_setup[4]={0X06,0X0A,0X12,0X2A}; //缓冲模式,数字滤波同步
<BR><BR>extern volatile unsigned char command[7]; //校准命令全局数组
<BR>extern volatile unsigned char scale; //记录系统量程
<BR>extern volatile unsigned char NO_CALI_TYPE; //未校准类型
<BR>extern volatile unsigned long int ZS,GS; //当前量程的校准系数
<BR>extern volatile unsigned char time_count; //超时标志
<BR><BR>//----------------------------------------------------------------------------
<BR>//函数:reset_AD7705 <BR>//功能:AD7705串行接口失步后将其复位。复位后要延时500us再访问 <BR>//参数:无
<BR>//返回:无 <BR>//变量:无 <BR>//备注:无
<BR>//----------------------------------------------------------------------------
<BR>void reset_AD7705(void) <BR>{
<BR> unsigned char i;
<BR>
<BR> AD_DIN1;
<BR> for( i=0; i<36; i++ )
<BR> {
<BR> AD_CLK0;
<BR> asm("nop");
<BR> asm("nop");
<BR> asm("nop");
<BR> AD_CLK1;
<BR> asm("nop");
<BR> asm("nop");
<BR> asm("nop");
<BR> }
<BR>
<BR> _delay_ms(1);
<BR>}
<BR><BR>//------------------------------------------------------------------------------------------
<BR>//函数:read_AD7705_byte <BR>//功能:从AD7705读一个字节的数据 <BR>//参数:无
<BR>//返回:读到的一字节数据 <BR>//变量:无 <BR>//备注:无
<BR>//------------------------------------------------------------------------------------------
<BR>unsigned char read_AD7705_byte(void) <BR>{
<BR> unsigned char data = 0;
<BR> unsigned char i = 0;
<BR>
<BR> for( i=0; i<8; i++ )
<BR> {
<BR> data <<= 1;
<BR> AD_CLK0;
<BR> asm("nop");
<BR> asm("nop");
<BR> asm("nop");
<BR> if(AD_DOUT)
<BR> {
<BR> data++;
<BR> }
<BR> AD_CLK1;
<BR> asm("nop");
<BR> asm("nop");
<BR> asm("nop");
<BR> }
<BR>
<BR> return data;
<BR>}
<BR><BR>//------------------------------------------------------------------------------------------
<BR>//函数:read_AD7705_word <BR>//功能:从AD7705读一个字的数据,共16bit <BR>//参数:无
<BR>//返回:读到的一字节数据 <BR>//变量:无 <BR>//备注:无
<BR>//------------------------------------------------------------------------------------------
<BR>unsigned int read_AD7705_word(void) <BR>{
<BR> unsigned int data = 0;
<BR> unsigned char i = 0;
<BR>
<BR> for( i=0; i<16; i++ )
<BR> {
<BR> data <<= 1;
<BR> AD_CLK0;
<BR> asm("nop");
<BR> asm("nop");
<BR> asm("nop");
<BR> if(AD_DOUT)
<BR> {
<BR> data++;
<BR> }
<BR> AD_CLK1;
<BR> asm("nop");
<BR> asm("nop");
<BR> asm("nop");
<BR> }
<BR>
<BR> return data;
<BR>}
<BR><BR><BR>//------------------------------------------------------------------------------------------
<BR>//函数:read_AD7705_dword <BR>//功能:从AD7705读一个24的数据 <BR>//参数:无
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -