找回密码
 立即注册
查看: 720|回复: 8

求助!!关于STC8G1K08的ADC使用问题

[复制链接]

2

主题

4

回帖

36

积分

新手上路

积分
36
发表于 2024-4-18 10:37:07 | 显示全部楼层 |阅读模式
我想请教一下各位大佬,STC8G1K08的ADC可以用定时器中断定时触发一路ADC,同时在大循环内轮询其他几路ADC吗?我这样使用发现会存在以下情况,中断里面的ADC和大循环里面的ADC会互相影响,我认为的原因是,在大循环里的ADC采样转换之后但是还没有进行赋值的时候,就进入了中断,然后中断里面的ADC值就变成了大循环的值,然后就这样互相影响。我想请教一下有什么解决办法吗
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2024-4-18 10:54:47 | 显示全部楼层
定时触发?定时器做标志位,比如10ms定时器触发一次,每次触发后主循环监测到标志位然后读取一次adc并切换通道就好了呀,这样每一路adc都是定时读取的了
回复 支持 反对

使用道具 举报 送花

2

主题

4

回帖

36

积分

新手上路

积分
36
发表于 2024-4-18 11:03:20 | 显示全部楼层
电子DI*** 发表于 2024-4-18 10:54
定时触发?定时器做标志位,比如10ms定时器触发一次,每次触发后主循环监测到标志位然后读取一次adc并切换 ...

不太行,我试过的,中断那一路的ADC是用来作开关电源的,时间要求较高,如果定时器置了标志位,但是这时候大循环内已经运行过了检测那个标志位的语句,那就得等我后面的语句都运行完了才会检测到这个标志位

点评

你的循环里是放了别的延时函数吗,如果中断和循环里都在采集的话,循环里的采集还没结束直接到中断里采集这样数值会不准的。  详情 回复 发表于 2024-4-18 11:36
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2024-4-18 11:36:40 | 显示全部楼层
zt9973*** 发表于 2024-4-18 11:03
不太行,我试过的,中断那一路的ADC是用来作开关电源的,时间要求较高,如果定时器置了标志位,但是这时 ...

你的循环里是放了别的延时函数吗,如果中断和循环里都在采集的话,循环里的采集还没结束直接到中断里采集这样数值会不准的。
回复 支持 反对

使用道具 举报 送花

2

主题

4

回帖

36

积分

新手上路

积分
36
发表于 2024-4-18 11:48:43 | 显示全部楼层
电子DI*** 发表于 2024-4-18 11:36
你的循环里是放了别的延时函数吗,如果中断和循环里都在采集的话,循环里的采集还没结束直接到中断里采集 ...

循环里没有延时,现在就是中断和循环都在采集发现数值会互相影响,有什么好的建议吗

点评

最好的办法还是优化下代码结构,定时器给个标志位在控制主函数里开始循环,这样也可以保证adc时基很准的。 如果不愿意这样的话,你得考虑adc都在中断里处理了,1ms中断,然后每次切换一个都通道开始采样,这样每一  详情 回复 发表于 2024-4-18 13:05
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:135
  • 最近打卡:2024-12-25 10:15:05

47

主题

1350

回帖

8058

积分

荣誉版主

冲哥视频教程和各种开源资料QQ交流群884047237,可群

积分
8058
QQ
发表于 2024-4-18 13:05:05 | 显示全部楼层
zt9973*** 发表于 2024-4-18 11:48
循环里没有延时,现在就是中断和循环都在采集发现数值会互相影响,有什么好的建议吗 ...

最好的办法还是优化下代码结构,定时器给个标志位在控制主函数里开始循环,这样也可以保证adc时基很准的。  如果不愿意这样的话,你得考虑adc都在中断里处理了,1ms中断,然后每次切换一个都通道开始采样,这样每一路的adc时基都是准的
回复 支持 反对

使用道具 举报 送花

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

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-4-18 16:00:05 | 显示全部楼层
在定时器中断里触发ADC,或者用PWM自动触发ADC。
在ADC中断里读取结果,并启动其余各路ADC。
回复 支持 反对

使用道具 举报 送花

2

主题

4

回帖

36

积分

新手上路

积分
36
发表于 2024-4-18 20:15:24 | 显示全部楼层
梁*** 发表于 2024-4-18 16:00
在定时器中断里触发ADC,或者用PWM自动触发ADC。
在ADC中断里读取结果,并启动其余各路ADC。 ...

没太懂最后这个启动其余各路ADC,是开启adc电源吗,我是在大循环里轮询其余的ADC,进定时器中断的时候我不知道是哪一路的ADC被打断了

点评

所以就要用我说的方法,中断处理也不用占什么时间。 你这样前后台都操作同一个外设,还没有占用标志,所以很大机会会出现冲突。  详情 回复 发表于 2024-4-18 23:25
回复 支持 反对

使用道具 举报 送花

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

73

主题

5883

回帖

1万

积分

超级版主

积分
12079
发表于 2024-4-18 23:25:49 | 显示全部楼层
zt9973*** 发表于 2024-4-18 20:15
没太懂最后这个启动其余各路ADC,是开启adc电源吗,我是在大循环里轮询其余的ADC,进定时器中断的时候我 ...

所以就要用我说的方法,中断处理也不用占什么时间。
你这样前后台都操作同一个外设,还没有占用标志,所以很大机会会出现冲突。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 13:20 , Processed in 0.902788 second(s), 104 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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