zt997354616 发表于 2024-4-18 10:37:07

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

我想请教一下各位大佬,STC8G1K08的ADC可以用定时器中断定时触发一路ADC,同时在大循环内轮询其他几路ADC吗?我这样使用发现会存在以下情况,中断里面的ADC和大循环里面的ADC会互相影响,我认为的原因是,在大循环里的ADC采样转换之后但是还没有进行赋值的时候,就进入了中断,然后中断里面的ADC值就变成了大循环的值,然后就这样互相影响。我想请教一下有什么解决办法吗

电子DIY小家 发表于 2024-4-18 10:54:47

定时触发?定时器做标志位,比如10ms定时器触发一次,每次触发后主循环监测到标志位然后读取一次adc并切换通道就好了呀,这样每一路adc都是定时读取的了

zt997354616 发表于 2024-4-18 11:03:20

电子DIY小家 发表于 2024-4-18 10:54
定时触发?定时器做标志位,比如10ms定时器触发一次,每次触发后主循环监测到标志位然后读取一次adc并切换 ...

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

电子DIY小家 发表于 2024-4-18 11:36:40

zt997354616 发表于 2024-4-18 11:03
不太行,我试过的,中断那一路的ADC是用来作开关电源的,时间要求较高,如果定时器置了标志位,但是这时 ...

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

zt997354616 发表于 2024-4-18 11:48:43

电子DIY小家 发表于 2024-4-18 11:36
你的循环里是放了别的延时函数吗,如果中断和循环里都在采集的话,循环里的采集还没结束直接到中断里采集 ...

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

电子DIY小家 发表于 2024-4-18 13:05:05

zt997354616 发表于 2024-4-18 11:48
循环里没有延时,现在就是中断和循环都在采集发现数值会互相影响,有什么好的建议吗 ...

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

梁工 发表于 2024-4-18 16:00:05

在定时器中断里触发ADC,或者用PWM自动触发ADC。
在ADC中断里读取结果,并启动其余各路ADC。

zt997354616 发表于 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:49

zt997354616 发表于 2024-4-18 20:15
没太懂最后这个启动其余各路ADC,是开启adc电源吗,我是在大循环里轮询其余的ADC,进定时器中断的时候我 ...

所以就要用我说的方法,中断处理也不用占什么时间。
你这样前后台都操作同一个外设,还没有占用标志,所以很大机会会出现冲突。
页: [1]
查看完整版本: 求助!!关于STC8G1K08的ADC使用问题