找回密码
 立即注册
查看: 719|回复: 3

关于adc_stc.c中16次ADC采集的平均值问题

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-03-26 08:49:01

2

主题

8

回帖

158

积分

注册会员

积分
158
发表于 2024-1-10 15:57:43 | 显示全部楼层 |阅读模式
本帖最后由 Q289466080 于 2024-1-10 15:57 编辑
  1. uint16 GetADC_CHX(uint8 chx)
  2. {
  3.     uint16 ADCx;
  4.     uint8 i;
  5.     ADCInit(0); //ADC 初始化
  6.     //通过ADC的chx通道读取Bandgap电压的ADC测量值
  7.     ADCRead(chx); //前两个数据丢弃
  8.     ADCRead(chx);
  9.     ADCx = ADCRead(chx);
  10.     for (i = 0; i < 16; i++)
  11.     {
  12.         ADCx += ADCRead(chx);
  13.     }
  14.     ADCx >>= 4; //取平均值
  15.     return ADCx;
  16. }
复制代码
代码中(代码是adc_stc.c中的),FOR循环前有一次采样,FOR循环里有16次,一共17次。>>4是16次平均值
范例代码:1-老刘爱捣鼓示波器,使用I2C OLED屏显示或者通过USB-CDC虚拟串口送STC-ISP虚拟OLED接口显示
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-1-10 16:57:20 | 显示全部楼层
诶 好像看起来是有问题的0.0  emm 这不应该测不出来问题把。。
等大佬们的回复看看
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:514
  • 最近打卡:2025-05-02 10:18:47

24

主题

515

回帖

990

积分

荣誉版主

积分
990
发表于 2024-1-10 17:07:54 | 显示全部楼层
本帖最后由 社区闲人 于 2024-1-10 17:10 编辑

楼主有心了,确实是代码不严谨。第12行应改为:ADCx = 0;
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:435
  • 最近打卡:2025-04-30 08:43:23

33

主题

2351

回帖

4860

积分

论坛元老

积分
4860
发表于 2024-1-10 17:16:07 | 显示全部楼层
社区*** 发表于 2024-1-10 17:07
楼主有心了,确实是代码不严谨。应该删除第12行。

直接删除会有问题把,,如果工程配置在large模式,这个ADCx变量应该会被定义到xdata区 由于xdata区中的数据不会被清除的原因,如果不加入对变量的初始化代码。直接进行运算操作应该会导致数据错误把。
我感觉 要么在定义变量的时候直接对变量进行初始化操作,或者在这个变量使用前进行初始化操作。
可以把11行代码 改为ADCx = 0; 应该就可以了。
不知道我上面的理解是正确的么。。我记得会有问题
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 13:02 , Processed in 0.114168 second(s), 64 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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