ADC采集为什么有时候是0?
芯片:STC8H1K08,用NTC测温,工作正常,有NTC开路或者短路异常检测,NTC明明是好的,
但是有时候而尔会提示NTC短路,
显示采集到的AD值为0,这个问题是随机的,
有时半小时出现,有时几个小时才出现,
百思不得其解,请大神指点,谢谢!
pzegegdm 发表于 2024-11-19 21:38
把前面说的缺少 P_SW2的这两句也补了上去 还是一样,现在是显示累加小于100的次数
因为输入端脚已经直接 ...
代码我已经直接复制验证过了,没有出现问题。
你把原理图和PCB贴出来再分析吧。
直连电源也要保证电源是可靠的。
贴出来NTC测温部分电路图,大家才好分析 发电路图让大家看看 请看原理图
用的是MF58红色玻璃管的NTC,应该不是NTC的问题,刚开始怀疑是2芯插座接触不良,后来直接焊上去还是一样 出现异常的时候我用数码管显示出采集到的AD值为0,所以怀疑AD转换是不是有时候而尔没采集到数据 本帖最后由 我的用户名 于 2023-12-21 17:50 编辑
判断异常的程序我用连续检测3次来规避这个问题,100ms检测一次,如果3次都异常就判断为NTC异常,如果3次里面只有一次则忽略。只是想搞明白AD值为什么会是0? 采样部分代码如下,请大神们帮忙看看是不是有问题,谢谢!
u16 read_ADC10value()//读取ADC数值
{
P_SW2 |= 0x80;
ADCTIM = 0x3f;
P_SW2 &= 0x7f;
ADCCFG = 0x2f;
ADC_CONTR = 0x80;
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR |=(0x40 | 1);// P1.1脚接NTC
_nop_();
_nop_();
_nop_();
_nop_();
while(!(ADC_CONTR&0X20)); //等待转换结束
ADC_CONTR &=~0X20; //清除ADC结束标志
return (((u16)ADC_RES<<8) | ADC_RESL);
} 试一下使能ADC多次转换功能 jwg 发表于 2023-12-23 09:15
试一下使能ADC多次转换功能
我也想过这个问题,比如转换4次,如果其中有一次是0的话,那么平均后的数值就被拉低不准了,温度值也就不准了