[ZLG-ARM] AD采样时出现怪现象。。。

[复制链接]
2343|2
 楼主| jstu023123 发表于 2008-1-12 16:26 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AD采样电池电压(8V),电压经滤波电路和电阻分压(2.5V)接到AIN1输入,但对ADCR操作时出现怪现象:ADC_Sample()调用ADC_Selchan()和ADC_Enable(),外部电阻分压值不对,与电阻值不成比,而注释掉ADC_Selchan()&nbsp;或&nbsp;ADC_Enable(),则电压就对了。不知道是怎么回事?程序如下:<br /><br />#define&nbsp;&nbsp;ADC_Enable(&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;ADCR&nbsp;|=&nbsp;(1&lt&lt24);&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;立即启动转换<br />#define&nbsp;&nbsp;ADC_IsFinished(&nbsp;)&nbsp;&nbsp;{&nbsp;&nbsp;while(&nbsp;(ADDR&0x80000000)&nbsp;==&nbsp;0&nbsp;);&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;//&nbsp;等待<br />void&nbsp;&nbsp;ADC_Selchan(&nbsp;UINT8&nbsp;channum&nbsp;)&nbsp;&nbsp;&nbsp;{&nbsp;ADCR&nbsp;=&nbsp;(ADCR&(~0xFF))|(channum);&nbsp;}&nbsp;&nbsp;&nbsp;//&nbsp;选择通道<br /><br />void&nbsp;ADC_Init(&nbsp;void&nbsp;)<br />{&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;ADCR&nbsp;=&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;SEL&nbsp;=&nbsp;0&nbsp;,选择通道0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;((Fpclk&nbsp;/&nbsp;1000000&nbsp;-&nbsp;1)&nbsp;&lt&lt&nbsp;8)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;时钟为1MHz<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;(0&nbsp;&lt&lt&nbsp;16)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;BURST&nbsp;=&nbsp;0&nbsp;,软件控制转换操作<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;(0&nbsp;&lt&lt&nbsp;17)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;CLKS&nbsp;=&nbsp;0&nbsp;,使用11clock转换<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;(1&nbsp;&lt&lt&nbsp;21)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;PDN&nbsp;=&nbsp;1&nbsp;,&nbsp;正常工作模式<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;(0&nbsp;&lt&lt&nbsp;22)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;TEST1:0&nbsp;=&nbsp;00&nbsp;,正常工作模式<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;(0&nbsp;&lt&lt&nbsp;24)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;START&nbsp;=&nbsp;1&nbsp;,直接启动ADC转换<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;(0&nbsp;&lt&lt&nbsp;27);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;EDGE&nbsp;=&nbsp;0&nbsp;<br />&nbsp;}<br /><br />UINT32&nbsp;ADC_Sample(&nbsp;UINT8&nbsp;num&nbsp;)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;UINT32&nbsp;dat=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ADC_Selchan(&nbsp;num&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;ADC_Enable(&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;ADC_IsFinished(&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;dat&nbsp;=&nbsp;ADDR;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;((dat&gt&gt6)&0x3ff);<br />&nbsp;}&nbsp;&nbsp;&nbsp;<br /><br /><br />int&nbsp;main&nbsp;(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;UINT32&nbsp;dat=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;str[20];<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_Init(&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;LCD_Cls(&nbsp;);&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;ADC_Init(&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dat&nbsp;=&nbsp;ADC_Sample(&nbsp;AIN1_SEL&nbsp;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sprintf(&nbsp;str,&nbsp;&quot;%4d&quot;,&nbsp;dat&nbsp;);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LCD_DispStr(&nbsp;8,&nbsp;2,&nbsp;str,&nbsp;NORMAL_VIEW&nbsp;);&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Delay(15);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br />
blueskyjwf 发表于 2008-1-12 17:14 | 显示全部楼层

可能有两个原因。

发生这种现象可能有两个原因:<br />1、数字口开启;<br />2、ADC输入阻抗不够大。
 楼主| jstu023123 发表于 2008-1-14 15:16 | 显示全部楼层

回blueskyjwf

&nbsp;&nbsp;&nbsp;数字口开启?PINESL1复位时那几个引脚都为AD转换功能啊<br />&nbsp;&nbsp;&nbsp;我单独提供3.3V,分压、输入到AIN1,此时引脚电压高于3.3V的,是什么原因啊,属性设置不对?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

93

帖子

0

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