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

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

[复制链接]

该用户从未签到

2

主题

4

回帖

34

积分

新手上路

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

使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

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

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

    使用道具 举报

    该用户从未签到

    2

    主题

    4

    回帖

    34

    积分

    新手上路

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

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

    点评

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

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

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

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

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

    使用道具 举报

    该用户从未签到

    2

    主题

    4

    回帖

    34

    积分

    新手上路

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

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

    点评

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

    使用道具 举报

  • TA的每日心情
    开心
    3 天前
  • 签到天数: 90 天

    [LV.6]常住居民II

    38

    主题

    986

    回帖

    6773

    积分

    荣誉版主

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

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

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

    使用道具 举报

    该用户从未签到

    46

    主题

    2932

    回帖

    6609

    积分

    超级版主

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

    使用道具 举报

    该用户从未签到

    2

    主题

    4

    回帖

    34

    积分

    新手上路

    积分
    34
     楼主| 发表于 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
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    46

    主题

    2932

    回帖

    6609

    积分

    超级版主

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

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-2 22:25 , Processed in 0.090648 second(s), 62 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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