avr ADC 多通道 转换 的疑问,急
我采用单片机ATTINY44(V)应用了3个ADC通道分别采集温度 电流 电压
程序结构如下:
int main()
{
if(sec) //T01秒中断标记,系统时钟1MHZ,AD时钟32分频
{
getad1(ch1);
delayms(50);
getad2(ch2);
delayms(50);
getad3(ch3);
}
}
问题是:当3个采样函数都调用时 3个返回值不正确,或者有时一个正确。但是,当只单独调用其中一个时 返回值正确。
采样输入电路无大电容。另外,延时函数去掉也是 3个返回值不正确。还有就是,我每次进if(sec){}只调用一个转换,3个轮流调用也是同样现象。
可能是什么原因?
在线等,谢谢 通道切换代码怎么写的,并且第一次转换结果可能不准确,需要舍弃;转换结果建议做多次平均。 我也遇到同样的问题,atmega8切换adc通道时有误 多久取样,求平均值。第一次舍去。 LZ把你切换通道的程序帖上来,才能让大家帮你找原因 估计是通道切换引起的 通道切换后第一次转换完成需要25个ADC时钟周期,以后每13个时钟周期可以转换完毕。仅供参考 问题应该没在里,在你程序其他地方 【1楼】 yuanfang 说:
...并且第一次转换结果可能不准确,需要舍弃
【3楼】 qybb 说:
多久取样,求平均值。第一次舍去。
看来 持"要舍弃第一次" 观点的人真是不少
流毒很深啊!
建议持这种观点的人仔细阅读DATASHIT,不要迷信书上的说法
建议看一下帖子 "关于ADC的疑问" 中的讨论 读取AD的时候判断完成标志位,可能未完成转会就读了 8楼说的帖子以前看过了,讨论很深入,挺有收获!
一般切换的时候,分连续和单次两种情况,还可以分中断和查询两种模式,
比较复杂,具体情况要具体分析。
另:请教8楼一下,(http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=3344584&bbs_page_no=1&bbs_id=1000)连续转换下中断里面如何切换通道?谢谢 “当3个采样函数都调用时 3个返回值不正确,或者有时一个正确。但是,当只单独调用其中一个时 返回值正确。”
很明显是通道切换问题!因为调用一个时可以不需要通道切换。
通道切换要点:
1.单次转换,查询式:设置通道-》启动转换-》查询ADIF-》读结果-》ADIF写1清0-》设置下一通道-》启动转换
2.单次转换,中断式:设置通道-》启动转换-》等待中断-》读结果-》设置下一通道-》启动转换-》推出中断-》等待下次中断
3.连续转换:设置中断模式-》启动转换-》等待中断-》读上次结果(第一次放弃)-》设置第一通道-》等待下次中断 你通道是怎么对ADMUX怎么操作来切换通道的? 回复【8楼】hzn1948
【1楼】 yuanfang 说:
...并且第一次转换结果可能不准确,需要舍弃
【3楼】 qybb 说:
多久取样,求平均值。第一次舍去。
看来 持"要舍弃第一次" 观点的人真是不少
流毒很深啊!
建议持这种观点的人仔细阅读datashit,不要迷信书上的说法
建议看一下帖子 "关于adc的疑问" 中的讨论
-----------------------------------------------------------------------
恩,刚看了下,datasheet的原话是:参考源改变后的第一次ADC转换结果可能不准确,建议用户不要使用这一次的转换结果。 mark hao mark ! 标记
页:
[1]