ADC 切换通道需要关ADC电源吗
型号 是Stc8h1k08我看手册上没有关于这个的说明 Adc切换的时候我直接默认是换通道但是正常使用的时候是读数正常,一切换通道读数马上异常,甚至固定在一个值不变,工作在异常状态翻了一下手册没说明,不知道什么原因想了一下,会不会跟adc电源有关系?然后在结果返回那里加了一个关闭adc电源后续切换通道读书就正常了这是以下代码:
#include <STC8H.h>
#include <intrins.h>
void AdcSetRate(bit t);
float adcRes(int num,float voltage );
void Delay1ms(void) //@24.000MHz
{
unsigned char data i, j;
_nop_();
i = 32;
j = 40;
do
{
while (--j);
} while (--i);
}
float adc(bit ch, float voltage)
{
int res;
if (ch==1)
{
AdcSetRate(1);//1是温度 选择p36
}
else
{
AdcSetRate(0);//0是电压 选择p33
}
ADC_CONTR |= 0x80; // 开启ADC电源
Delay1ms(); // 延时
EA = 0;
ADC_CONTR |= 0x40; // 启动转换
_nop_(); _nop_(); // 等待硬件响应
while (!(ADC_CONTR&0x20));
ADC_CONTR &= ~0x20;
EA = 1;
res=(ADC_RES << 8) | ADC_RESL; // 将ADC_ //读取ADC结果
return adcRes(res,voltage);
}
void AdcSetRate(bit t) //300ksps@24.000MHz
{
ADCCFG &= ~0x0f; //SPEED(0)
ADCCFG |= 0x20; //RESFMT(1) 结果右对齐
ADCTIM = 0x38; //CSSETUP(0), CSHOLD(1), SMPDUTY(24)
if (t==1)
{
ADC_CONTR |=0x0E;
}
else
{
ADC_CONTR |=0x0B;
}
}
float adcRes(int num,float voltage )
{
float res;
res = voltage * (num / 1024.0f);
ADC_CONTR &= 0X10;
return res;
} ADC切换通道不要关ADC电源,否则,重开电源必须延时至少1ms(最好10ms以上)才能做ADC(因为模拟电路上电后需要一定时间才能稳定工作)。
切换ADC通道是ADC输入端的模拟开关实现的。 梁工 发表于 2025-7-18 09:45
ADC切换通道不要关ADC电源,否则,重开电源必须延时至少1ms(最好10ms以上)才能做ADC(因为模拟电路上电后 ...
那不关电源切换的通道产生的异常是什么问题?电源延时有的
{:4_181:}
绎妄无绎 发表于 2025-7-25 02:01
那不关电源切换的通道产生的异常是什么问题?电源延时有的
那跟通道切换无关,检查硬件,使用官方例子测试。 绎妄无绎 发表于 2025-7-25 02:01
那不关电源切换的通道产生的异常是什么问题?电源延时有的
切换通道,转换前四次波动大,第五次开始用数据{:4_168:} 梁工 发表于 2025-7-25 10:31
那跟通道切换无关,检查硬件,使用官方例子测试。
好吧
页:
[1]