ADC的电源控制是不是不能始终保持打开?
本帖最后由 sky999 于 2023-3-25 00:29 编辑ADC_CONTR=0X80;我上电就打开了电源控制,而且读取过程中也没有关闭他,但是我发现,只要每次读ADC,不再次打开电源控制位,就有各种各样的问题,而且还得在后面加几ms延时,,,,转换的过程中,好像会影响到串口收发数据,是什么原因
直接判你你自己的问题,请使用 STC-USB Link1D 这个专业仿真工具来仿真调试,
不要在那猜
请使用仿真功能来直观的观察芯片内部的真实行为,不要盲人摸象,在那猜
使用STC-USB Link1D 仿真器 硬件SWD仿真STC32详见下帖
【新提醒】使用STC-USB Link1D 仿真器 硬件SWD仿真STC32 - 编译器/仿真器/ISP下载/做自己的ISP/ID号加密/程序加密后传输 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
实际跟你的说法相反,只要不睡眠,ADC电源始终打开是最好的。一旦关闭过ADC电源,再次打开,要延时至少1ms才启动ADC转换。
楼主可以直接测试STC的官方例程。 梁工 发表于 2023-3-25 12:32
实际跟你的说法相反,只要不睡眠,ADC电源始终打开是最好的。一旦关闭过ADC电源,再次打开,要延时至少1ms ...
怪事,因为我用了20个ADC口,开机就给ADC电源打开,for循环读10个,前4个是正常的,后16个全是错的,但是只要我在读ADC的前面,再加个打开ADC电源,并且加6ms延时,就一定是正确的,这是不是电源电流不够? 把你原理图的PDF发上来,大家好帮你 sky999 发表于 2023-3-26 08:03
怪事,因为我用了20个ADC口,开机就给ADC电源打开,for循环读10个,前4个是正常的,后16个全是错的,但是 ...
我们的MCU最多15个输入,你怎么有20个? 梁工 发表于 2023-3-26 11:17
我们的MCU最多15个输入,你怎么有20个?
对哦,我搞错了:L u16 READADC(u8 i)
{
u16 k;
ADC_RES=0;
ADC_RESL=0;
ADC_CONTR |= 0x08+i;
ADCCFG=0X02; //低4位是时钟频率
ADCEXCFG=0X07;
ADC_CONTR |= 0x40; //启动AD转换
_nop_();
_nop_();
while (!(ADC_CONTR & 0x20)); //查询ADC完成标志
ADC_CONTR &= ~0x20; //清完成标志
ADC_CONTR = 0x80; //---------------------------------------------------如果少了这句,程序就会一直错
Delay1ms(1);
k=k+((WORD)ADC_RES<<4)+((WORD)ADC_RESL>>4);
return k;
}
ADC_CONTR = 0x80;这句在程序上电初始化的时候就已经写过了,但是上面这个函数,读一遍之后,末尾如果不再次打开电源位,读出来的结果在5次后就都是错的
具体哪个型号的MCU我们给你个完整的演示程序参考