打印

AD转换为什么进行两次转换,取第2次值?

[复制链接]
1223|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
寒风晓月|  楼主 | 2016-7-25 09:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD转换为什么进行两次转换,取第2次值?

adcInit();
while (1) {
ulADCData = 0;
for (i = 0; i < 8; i++) {
LPC_ADC->CR |= 1 << 24;                               /*  立即转换 */
while ((LPC_ADC->STAT & (1 << 0)) == 0);      /*  读取 AD0STAT 的通道 0 的 Done */
LPC_ADC->CR |= (1 <<24);                              /*  第一次转换结果丢弃 */
while ((LPC_ADC->STAT & (1 << 0)) == 0);       /*  读取 AD0STAT 的通道 0 的 Done */
ulADCbuf = LPC_ADC->ADDR0;                          /*  读取数据寄存器 */
ulADCbuf = (ulADCbuf >> 4) & 0xfff;
ulADCData += ulADCbuf;
}
ulADCData = (ulADCData / 8);  /*  采样 8 次进行虑波处理 */
ulADCData = (ulADCData * 3000) / 4096;
}

相关帖子

沙发
xyz549040622| | 2016-7-25 15:45 | 只看该作者
有可能是觉得第一次值不准,也有可能是时间设置,这样读两次,达到延时的效果。不知道程序员当初是如何想的了。

使用特权

评论回复
板凳
dupengshixu| | 2016-7-28 17:07 | 只看该作者
原作者应该是怕第一次AD采样的时候“准备的不充足”(STAT是从0到1)造成AD不准,所以先把第一次AD丢弃。第二次读取AD之前,STAT经过了从1到0再到1这个完整的状态,所以此时的AD比较准。
我水平比较低,希望能帮到楼主

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

38

帖子

3

粉丝