在线时间169 小时
UID3095435
注册时间2015-3-17
NXP金币158
该用户从未签到
高级会员

- 积分
- 905
- 最后登录
- 2025-7-17
|
本帖最后由 momososo 于 2015-7-21 20:50 编辑
修改红字部分
修改ADC与GPIO demo学习偏移与校准的部分
while (1) { vuint16 cal_var;
Vout = adcGetUint(); /* 获取adc值 */
printf("Vout=%d\n",Vout);
myDelay(100);
if(!GPIO_GET_VALUE(MKL_PORTE,20))
{
GPIO_TOGGLE(MKL_PORTB,19);
myDelay(500); //去抖
}
if(!GPIO_GET_VALUE(MKL_PORTA,4)) //按K4偏移
{
ADC0_OFS += 100;
每按一次K4偏移值加100
但是输出的值是少200
写得不好,按着比较明显
myDelay(500); //去抖
}
if(!GPIO_GET_VALUE(MKL_PORTD,6)) //按K6校准
{
myDelay(500); //去抖
ADC0_SC3 |= ADC_SC3_AVGE_MASK; //依手册启用32点平均
ADC0_SC3 |= ADC_SC3_AVGS(3);
ADC0_CFG1 |= ADC_CFG1_ADIV(3); //减低ADC时钟
ADC0_SC2 &= ~ADC_SC2_ADTRG_MASK; //改为软体触发
ADC0_SC3 |= ADC_SC3_CAL_MASK; //启用校准
while((ADC0_SC1(0) & ADC_SC1_COCO_MASK) != ADC_SC1_COCO_MASK); /* 等待转换完成 */
if(ADC0_SC3 & ADC_SC3_CALF_MASK)
{
ADC0_SC3 &= ~ADC_SC3_CALF_MASK; //清除校准失败旗帜
}
/*校准正侧增益*/
cal_var = 0x00;
cal_var = ADC0_CLP0;
cal_var += ADC0_CLP1;
cal_var += ADC0_CLP2;
cal_var += ADC0_CLP3;
cal_var += ADC0_CLP4;
cal_var += ADC0_CLPS;
cal_var = cal_var/2;
cal_var += 0x8000;
ADC0_PG = cal_var;
/*校准负侧增益*/
cal_var = 0x00;
cal_var = ADC0_CLM0;
cal_var += ADC0_CLM1;
cal_var += ADC0_CLM2;
cal_var += ADC0_CLM3;
cal_var += ADC0_CLM4;
cal_var += ADC0_CLMS;
cal_var = cal_var/2;
cal_var += 0x8000;
ADC0_MG = cal_var;
ADC0_SC3 &= ~ADC_SC3_CAL_MASK;
/*回复平均与时钟*/
ADC0_SC3 &= ~ADC_SC3_AVGE_MASK;
ADC0_SC3 &= ~ADC_SC3_AVGS_MASK;
ADC0_CFG1 &= ~ADC_CFG1_ADIV_MASK;
}
}
}
还是有点不懂
侦错时
ADC0_SC3 |= ADC_SC3_CAL_MASK; //启用校准
命令下完
OFS值会变动
但CAL旗帜马上又变回0
不是应该等命令下完才变回0吗
|
评分
-
查看全部评分
|