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

[复制链接]
1451|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

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