找回密码
 立即注册
楼主: sky999

ADC的电源控制是不是不能始终保持打开?

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12081
发表于 2023-3-26 15:25:08 | 显示全部楼层
本帖最后由 梁工 于 2023-3-26 15:29 编辑
sky*** 发表于 2023-3-26 14:12
u16 READADC(u8 i)
{
u16 k;

ADC_CONTR |= 0x08+i;
这句操作错误,导致你读几个通道之后,就全部是读15通道了。
应该是这样:
ADC_CONTR &= 0x90;
ADC_CONTR  |= 0x08+i;  或者 ADC_CONTR |= i;

有否测试过我们的例子?我们的例子都是只在初始化时打开,后面一直不关。

46

主题

108

回帖

604

积分

高级会员

积分
604
发表于 2023-3-26 15:42:27 | 显示全部楼层
神*** 发表于 2023-3-26 14:33
具体哪个型号的MCU我们给你个完整的演示程序参考

8A8K64D4

46

主题

108

回帖

604

积分

高级会员

积分
604
发表于 2023-3-26 15:45:39 | 显示全部楼层
梁*** 发表于 2023-3-26 15:25
ADC_CONTR |= 0x08+i;
这句操作错误,导致你读几个通道之后,就全部是读15通道了。
应该是这样:

ADC_CONTR |= 0x08+i; 这里的i  是 0-6,因为用的是P0口,所以要加0X08呀

点评

是这个意思。我一般都按0~15给出通道,P1.0~P1.7对应0~7通道,P0.0~P0.6对应8~14通道,15通道是内部的Bandgap电压。有些少引脚的型号(比如STC8G1K08A-SOP8)的通道号与IO对应会不同,以引脚图为准。  详情 回复 发表于 2023-3-26 17:51

46

主题

108

回帖

604

积分

高级会员

积分
604
发表于 2023-3-26 15:54:37 | 显示全部楼层
梁*** 发表于 2023-3-26 15:25
ADC_CONTR |= 0x08+i;
这句操作错误,导致你读几个通道之后,就全部是读15通道了。
应该是这样:

哦哦哦,懂了懂了,总算明白了,用“|”就会不断累加,你不说我还不知道,谢谢谢谢
  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15646
发表于 2023-3-26 16:03:11 | 显示全部楼层
梁工辛苦了,每天要坚持学习错误程序:)
能否大家坚持学习我们的正确程序
1.png

还有这种问题,你用仿真器仿真,立即就可以观察到的啊,没必要学大佬,不仿真也照样出产品
下贴我们销售部客服全部会仿真,都可以教您啊
2.png
【新提醒】用STC-USB Link1D仿真STC8系列MCU - 编译器/仿真器/ISP下载/做自己的ISP/ID号加密/程序加密后传输 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)

点评

服务大众,全年无休!  详情 回复 发表于 2023-3-26 17:52
仿真器是不是脱机烧录棒?  发表于 2023-3-26 16:09
回复 支持 1 反对 0

使用道具 举报 送花

46

主题

108

回帖

604

积分

高级会员

积分
604
发表于 2023-3-26 16:08:28 | 显示全部楼层
梁*** 发表于 2023-3-26 15:25
ADC_CONTR |= 0x08+i;
这句操作错误,导致你读几个通道之后,就全部是读15通道了。
应该是这样:

另外再问个问题啊,为什么ADCEXCFG设置为16次平均值,数值却还是依旧不是很稳定,但是如果我ADCEXCFG设置为2次,然后用for循环3次结果相加,再除以3,这样得到的数值就很稳定?

点评

有可能跟干扰信号的频谱有一定关系。 举例来说,比如信号叠加有50Hz的市电干扰,则一般的连续采样N次求平均是很难滤除的。但是如果按市电N个周期内采样M次,则能很好的滤除工频干扰,一些Sigma Delta ADC专门有一项  详情 回复 发表于 2023-3-26 17:46
  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15646
发表于 2023-3-26 16:14:30 | 显示全部楼层
STC-USB Link1D /【专业仿真器,全自动在线下载器/自动停电上电,脱机烧录器,USB转双串口工具】
1.png
你用这个仿真,实时观察到进行采样转换的是第几个通道,你那个软件错误你自己就会立即发现了
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12081
发表于 2023-3-26 17:46:00 | 显示全部楼层
sky*** 发表于 2023-3-26 16:08
另外再问个问题啊,为什么ADCEXCFG设置为16次平均值,数值却还是依旧不是很稳定,但是如果我ADCEXCFG设置 ...

有可能跟干扰信号的频谱有一定关系。
举例来说,比如信号叠加有50Hz的市电干扰,则一般的连续采样N次求平均是很难滤除的。但是如果按市电N个周期内采样M次,则能很好的滤除工频干扰,一些Sigma Delta ADC专门有一项参数,就是抑制50/60Hz干扰的能力。
如果是做电压表显示给人眼睛看,我常用400ms刷新(2.5次一秒),则使用1~5KHz的均匀采样400ms求平均,就可以很好滤除。如果要更快的采样(用于控制系统),则20ms刷新,使用10KHz的速度均匀采样20ms求平均。
对于缓慢的信号,比如常用的测温,则可以使用一阶低通、二阶低通这种简单算法,就可以得到很稳定的读数(模拟大惯性的RC滤波)。
而对于电子秤这种高分辨率的应用,则混合多种滤波,各取优点,比如 平均值+一阶低通,就有很好的效果,既照顾到响应速度,又照顾到高分辨率读数的稳定性。
  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12081
发表于 2023-3-26 17:51:19 | 显示全部楼层
sky*** 发表于 2023-3-26 15:45
ADC_CONTR |= 0x08+i; 这里的i  是 0-6,因为用的是P0口,所以要加0X08呀

是这个意思。我一般都按0~15给出通道,P1.0~P1.7对应0~7通道,P0.0~P0.6对应8~14通道,15通道是内部的Bandgap电压。有些少引脚的型号(比如STC8G1K08A-SOP8)的通道号与IO对应会不同,以引脚图为准。
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:51
  • 最近打卡:2025-05-02 10:07:51

73

主题

5883

回帖

1万

积分

超级版主

积分
12081
发表于 2023-3-26 17:52:22 | 显示全部楼层
神*** 发表于 2023-3-26 16:03
梁工辛苦了,每天要坚持学习错误程序
能否大家坚持学习我们的正确程序

:handshake服务大众,全年无休!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-3 12:46 , Processed in 0.636374 second(s), 111 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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