ADC采集数据相差太多是为什么
void AdcSetRate(void) //100KSPS@12.000MHz{
ADCCFG &= ~0x0f;
ADCCFG |= 0x01; //SPEED(1)
ADCTIM = 0x2e; //CSSETUP(0), CSHOLD(1), SMPDUTY(14)
}
void ADC_Init(void)
{
P3M0 &= ~0x08; P3M1 |= 0x08; //配置P3.3为高阻输入
AdcSetRate(); //初始化ADC速度
ADC_CONTR |= 0x80; //打开ADC电源
}
uint ADC_Read(uchar no)
{
uint adcvalue = 0;
ADC_CONTR &= 0xf0; //清除低四位
ADC_CONTR |= no; //配置ADC通道
ADC_CONTR |= 0x40; //启动ADC转换
_nop_();
_nop_();
while(!(ADC_CONTR & 0x20)); //等待标志位
ADC_CONTR &= ~0x20; //清除标准位
adcvalue = (((uint)ADC_RES << 8) | ADC_RESL) >> 6; //读取ADC的值
return adcvalue;
}
void main()
{
ADC_Init();
Delay_Ms(1);
while(1)
{
ADC_Read(3);
}
}
这是我的ADC配置,芯片是STC8G1K08A,在采集ADC数据时,采集的数据0x80左右,但示波器上看,P3.3的模拟电压大约在130mV,计算得出的ADC值在0x28作用,寻求大佬帮助
根据您提供的代码和描述,ADC采集数据与实际电压不符的问题可能由以下几个方面引起:
1. ADC配置不正确
在 AdcSetRate() 函数中,ADCCFG &= ~0x0f; ADCCFG |= 0x01; 设置了 ADC 的速度为 SPEED(1)。但 STC8G1K08A 的 ADC 配置需结合 ADCCON 寄存器进行更细致的控制,例如采样时间、参考电压等。建议检查 ADCCON 是否设置正确。
2. 参考电压未正确配置
ADC 的输出值依赖于参考电压(Vref)。若未明确设置参考电压(如使用内部 Vref 或外部 Vref),可能导致 ADC 读数异常。STC8G1K08A 默认使用 VDD 作为参考电压,但若 VDD 不稳定或未正确供电,也可能导致测量误差。
3. 通道选择或寄存器操作错误
在 ADCRead(uchar no) 函数中,ADCCONTR &= 0xf0; ADCCONTR |= no; 可能存在位操作问题。STC8G1K08A 的 ADC 通道选择需要确保 no 的范围在有效范围内(通常为 0~7),且 ADCCONTR 的其他位(如启动位)是否被正确设置。
4. 采样时间不足
在 AdcSetRate() 中,ADCTIM = 0x2e; 设置了采样时间。若该值过小,可能导致采样不充分,从而影响 ADC 转换精度。建议根据具体应用调整采样时间。
5. ADC 电源未完全开启
ADCCONTR |= 0x80; 用于打开 ADC 电源,但需确保电源稳定后才开始转换。建议在 ADCInit() 后增加适当的延时(如 DelayMs(1);)以保证 ADC 正常工作。
6. ADC 结果寄存器读取方式错误
在 ADCRead() 函数中,adcvalue = (((uint)ADCRES > 6; 存在语法错误。正确的读取方式应为 `adcvalue = (ADCRES
[本文内容由国芯人工智能辅助生成,仅供参考] 没开EAXFR
新手必读!新手必读!新手必读!新手必读!新手必读!新手必读!新手必读!新手必读! - 老鸟反刍/吐槽,新手乐园,毕业设计 国芯人工智能技术交流网站 - AI32位8051交流社区
ercircle 发表于 2025-8-21 22:49
没开EAXFR
新手必读!新手必读!新手必读!新手必读!新手必读!新手必读!新手必读!新手必读! - 老鸟反 ...
你好,我没有看懂您是什么意思,这个EAXFR是需要开启吗 ADC对齐错误,请使用ADC右对齐ADCCFG = 0x2f; huashanhui20 发表于 2025-8-21 23:29
ADC对齐错误,请使用ADC右对齐ADCCFG = 0x2f;
你好,我试过右对齐,结果是一样的 ADC时序控制寄存器是扩展寄存器,扩展寄存器访问使能没有开启的情况下,对这个寄存器的配置是无效的
附件的ADC转换例子供参考:
写的太笼统,不明白,应该写差了多少。 乘风飞扬 发表于 2025-8-22 09:15
ADC时序控制寄存器是扩展寄存器,扩展寄存器访问使能没有开启的情况下,对这个寄存器的配置是无效的
你好,按照大佬说的,在最开始对P_SW2的bit7进行置位,但ADC采集还是不准确。我有一个疑问,这个ADCTIM是配置采集速度的,即使配置不成功,系统也有默认的值,采集速度也会影响ADC的值吗 建议使用 AiCube-ISP-V6.96A 的 AiCube来自动生成程序
深圳国芯人工智能有限公司-工具软件
页:
[1]
2