找回密码
 立即注册
查看: 84|回复: 19

ADC采集数据相差太多是为什么

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-08-23 11:14:05
已绑定手机

3

主题

13

回帖

67

积分

注册会员

积分
67
发表于 前天 20:27 | 显示全部楼层 |阅读模式
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作用,寻求大佬帮助

回复

使用道具 举报 送花

3

主题

2031

回帖

910

积分

等待验证会员

积分
910
发表于 前天 20:28 | 显示全部楼层
根据您提供的代码和描述,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

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:276
  • 最近打卡:2025-08-23 14:05:57
已绑定手机

80

主题

2982

回帖

6361

积分

荣誉版主

无情的代码机器

积分
6361
发表于 前天 22:49 | 显示全部楼层
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-08-23 11:14:05
已绑定手机

3

主题

13

回帖

67

积分

注册会员

积分
67
发表于 前天 23:10 | 显示全部楼层
erci*** 发表于 2025-8-21 22:49
没开EAXFR
新手必读!新手必读!新手必读!新手必读!新手必读!新手必读!新手必读!新手必读! - 老鸟反 ...

你好,我没有看懂您是什么意思,这个EAXFR是需要开启吗

点评

必须开启,就是截图里第一行代码,也是手册例程里main函数第一行代码。P_SW2|=0x80;  发表于 昨天 09:23
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:377
  • 最近打卡:2025-08-23 16:14:20

6

主题

44

回帖

1004

积分

金牌会员

积分
1004
发表于 前天 23:29 | 显示全部楼层
ADC对齐错误,请使用ADC右对齐  ADCCFG = 0x2f;
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-08-23 11:14:05
已绑定手机

3

主题

13

回帖

67

积分

注册会员

积分
67
发表于 前天 23:59 | 显示全部楼层
huasha*** 发表于 2025-8-21 23:29
ADC对齐错误,请使用ADC右对齐  ADCCFG = 0x2f;

你好,我试过右对齐,结果是一样的
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:498
  • 最近打卡:2025-08-23 08:57:24
已绑定手机

45

主题

2172

回帖

7590

积分

论坛元老

积分
7590
发表于 昨天 09:15 | 显示全部楼层
ADC时序控制寄存器是扩展寄存器,扩展寄存器访问使能没有开启的情况下,对这个寄存器的配置是无效的
截图202508220913431871.jpg

附件的ADC转换例子供参考:
16路ADC轮询-每路16次ADC转换取中间8次求平均值-串口1返回结果.zip (25.59 KB, 下载次数: 3)
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-08-22 10:27:45
已绑定手机

0

主题

11

回帖

68

积分

注册会员

积分
68
发表于 昨天 10:30 | 显示全部楼层
写的太笼统,不明白,应该写差了多少。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-08-23 11:14:05
已绑定手机

3

主题

13

回帖

67

积分

注册会员

积分
67
发表于 昨天 11:04 | 显示全部楼层
乘风*** 发表于 2025-8-22 09:15
ADC时序控制寄存器是扩展寄存器,扩展寄存器访问使能没有开启的情况下,对这个寄存器的配置是无效的

你好,按照大佬说的,在最开始对P_SW2的bit7进行置位,但ADC采集还是不准确。我有一个疑问,这个ADCTIM是配置采集速度的,即使配置不成功,系统也有默认的值,采集速度也会影响ADC的值吗
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:161
  • 最近打卡:2025-08-23 08:11:44

775

主题

1万

回帖

1万

积分

管理员

积分
18735
发表于 昨天 11:57 | 显示全部楼层
建议使用 AiCube-ISP-V6.96A 的 AiCube来自动生成程序
截图202508221157334079.jpg
深圳国芯人工智能有限公司-工具软件
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-23 22:27 , Processed in 0.129187 second(s), 117 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表