AD7799使用困惑

[复制链接]
3859|0
 楼主| jianghuang 发表于 2007-4-7 15:20 | 显示全部楼层 |阅读模式
我用的是AD7799BRUZ芯片,打算应用于称重。<br />电路连接参照数据手册(Rev.0)&nbsp;27页的那个电路,<br />我只用了AIN1一个通道,其余未用。<br /><br />出现的问题是:采不出数据。<br /><br />进行满量程校准后读出的数据全为FF,读状态寄存器有错误标志。把REF_DEC置位后有NOREF错误标志,可是我的参考电压接是是正5V啊,是不是AD7799内部的参考电压电路部分损坏了啊!!<br />#include&nbsp;&ltintrins.h&gt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;use&nbsp;_nop_()&nbsp;function&nbsp;*/<br />/*<br />AD7799写寄存器函数<br />WriteData:要写的数据<br />*/<br />void&nbsp;WriteByteToAd7799(unsigned&nbsp;char&nbsp;WriteData)<br />{<br />&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br />&nbsp;&nbsp;&nbsp;//AD7799_CS=0;<br />&nbsp;&nbsp;&nbsp;for(i=0;i&lt8;i++)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AD7799_SCLK=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(WriteData&0x80)AD7799_DIN=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;AD7799_DIN=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteData=WriteData&lt&lt1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AD7799_SCLK=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;//AD7799_CS=1;<br />}<br /><br />/*<br />AD7799读寄存器函数<br />*/<br />unsigned&nbsp;char&nbsp;ReadByteFromAd7799(void)<br />{<br />&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;i;<br />&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;ReadData;<br />&nbsp;&nbsp;&nbsp;//AD7799_CS=0;<br />&nbsp;&nbsp;&nbsp;ReadData=0;<br />&nbsp;&nbsp;&nbsp;for(i=0;i&lt8;i++)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AD7799_SCLK=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReadData=ReadData&lt&lt1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(AD7799_DOUT)ReadData+=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AD7799_SCLK=1;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;//AD7799_CS=1;<br />&nbsp;&nbsp;&nbsp;return(ReadData);<br />}<br /><br />void&nbsp;WaiteRDY(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;iint;<br />&nbsp;&nbsp;&nbsp;&nbsp;iint=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(AD7799_RDY)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iint++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(iint&gt20000)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//reset&nbsp;ad7799<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0xff);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0xff);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0xff);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0xff);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(iint=0;iint&lt1000;iint++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ad7799_Ini(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />void&nbsp;Ad7799_Ini(unsigned&nbsp;char&nbsp;ChannelNum)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0x10);//b0000&nbsp;1000<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Writes&nbsp;to&nbsp;Communications&nbsp;Register&nbsp;Setting&nbsp;Next&nbsp;Operation&nbsp;as&nbsp;Write&nbsp;to<br />&nbsp;&nbsp;&nbsp;&nbsp;CONFIGURATION&nbsp;Register*/<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0x00);&nbsp;//增益为0<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0x10+ChannelNum);&nbsp;//1通道<br />&nbsp;&nbsp;&nbsp;&nbsp;/*CONFIGURATION&nbsp;REGISTER[00,BO(0),U/B(0),<br />&nbsp;&nbsp;&nbsp;&nbsp;0(0),G2(1),G1(1),G0(1),0,0,REF_DET(0),BUF(1),0(0),CH2(0),CH1(0),CH0(0)]*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0x08);&nbsp;//b0000&nbsp;1000<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Writes&nbsp;to&nbsp;Communications&nbsp;Register&nbsp;Setting&nbsp;Next&nbsp;Operation&nbsp;as&nbsp;Write&nbsp;to<br />&nbsp;&nbsp;&nbsp;&nbsp;Mode&nbsp;Register*/<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0x80);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0x0a);<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Writes&nbsp;to&nbsp;Mode&nbsp;Register&nbsp;Initiating&nbsp;Internal&nbsp;Zero-Scale&nbsp;Calibration*/<br />&nbsp;&nbsp;&nbsp;&nbsp;WaiteRDY();<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Wait&nbsp;for&nbsp;RDY&nbsp;pin&nbsp;to&nbsp;go&nbsp;low&nbsp;to&nbsp;indicate&nbsp;end&nbsp;of&nbsp;calibration&nbsp;cycle*/<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0x08);<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Writes&nbsp;to&nbsp;Communications&nbsp;Register&nbsp;Setting&nbsp;Next&nbsp;Operation&nbsp;as&nbsp;Write&nbsp;to<br />&nbsp;&nbsp;&nbsp;&nbsp;Mode&nbsp;Register*/<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0xa0);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0x0a);<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Writes&nbsp;to&nbsp;Mode&nbsp;Register&nbsp;Initiating&nbsp;Internal&nbsp;Full-Scale&nbsp;Calibration*/<br />&nbsp;&nbsp;&nbsp;&nbsp;WaiteRDY();<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Wait&nbsp;for&nbsp;RDY&nbsp;pin&nbsp;to&nbsp;go&nbsp;low&nbsp;to&nbsp;indicate&nbsp;end&nbsp;of&nbsp;calibration&nbsp;cycle*/<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0x08);&nbsp;//b0000&nbsp;1000<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Writes&nbsp;to&nbsp;Communications&nbsp;Register&nbsp;Setting&nbsp;Next&nbsp;Operation&nbsp;as&nbsp;Write&nbsp;to<br />&nbsp;&nbsp;&nbsp;&nbsp;Mode&nbsp;Register*/<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0x0A);<br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Mode&nbsp;Register[MD2(0),MD1(0),MD0(0),PSW(0),0(0),0(0),0(0),0(0),<br />&nbsp;&nbsp;&nbsp;&nbsp;(0),(0),0(0),0(0),FS3(1),FS2(0),FS1(1),FS0(0)]*/<br />&nbsp;&nbsp;&nbsp;&nbsp;/*模式0&nbsp;Continuous-Conversion&nbsp;Mode.,Fadc=16.7HZ;*/<br />}<br /><br />long&nbsp;ReadAd7799ConversionData(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;ConverData;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;ADSAT;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;iint;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;WaiteRDY();<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0x40);<br />&nbsp;&nbsp;&nbsp;&nbsp;ADSAT=ReadByteFromAd7799();<br />&nbsp;&nbsp;&nbsp;&nbsp;if((ADSAT&0x40)||(ADSAT&&nbsp;0x08)==0)&nbsp;&nbsp;//出错或者读写异常<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0xff);<br />&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0xff);<br />&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0xff);<br />&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0xff);<br />&nbsp;&nbsp;&nbsp;for(iint=0;iint&lt3000;iint++)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_nop_();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;Ad7799_Ini(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteByteToAd7799(0x58);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Writes&nbsp;to&nbsp;Communications&nbsp;Register&nbsp;Setting&nbsp;Next&nbsp;Operation&nbsp;as&nbsp;Continuous<br />&nbsp;&nbsp;&nbsp;&nbsp;Read&nbsp;From&nbsp;Data&nbsp;Register*/<br />&nbsp;&nbsp;&nbsp;&nbsp;WaiteRDY();<br />&nbsp;&nbsp;&nbsp;/*&nbsp;Wait&nbsp;for&nbsp;RDY&nbsp;pin&nbsp;to&nbsp;go&nbsp;low&nbsp;to&nbsp;indicate&nbsp;end&nbsp;of&nbsp;calibration&nbsp;cycle*/<br />&nbsp;&nbsp;&nbsp;if(!AD7799_RDY)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConverData=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConverData=ReadByteFromAd7799();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConverData=ConverData&lt&lt8;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConverData=ReadByteFromAd7799()+ConverData;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConverData=ConverData&lt&lt8;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ConverData=ReadByteFromAd7799()+ConverData;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;/*&nbsp;Read&nbsp;Conversion&nbsp;Result&nbsp;from&nbsp;AD7730's&nbsp;Data&nbsp;Register*/<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;return(ConverData);<br /><br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br />#include&nbsp;&ltreg52.h&gt<br />#include&nbsp;&quot;ad7799.h&quot;<br /><br />idata&nbsp;long&nbsp;addata;<br /><br />main()<br />{<br />&nbsp;&nbsp;&nbsp;Ad7799_Ini(0);<br />&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addata=ReadAd7799ConversionData();<br />&nbsp;&nbsp;&nbsp;}<br />}<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

20

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部