OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4677|回复: 16

STM32的电压表的最后一位数字不停的跳动怎么解决?

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2020-5-10
在线时间
17 小时
发表于 2020-8-17 22:06:04 | 显示全部楼层 |阅读模式
1金钱
用STM32做了一个电压表,数码管显示,小数点左边和右边各两位数,功能已经实现了,但是有一个问题,在临界点时,最右边的那一位数字不停的跳动,比如电压15.559V,最后一位数就会在5和6之间快速的跳动,视觉效果非常差,我的想法是,显示某个数字之后,隔一秒钟再让它刷新,这样就不会快速跳动了,但是如何才能实现呢?想了很久都想不出办法,请大家多多指教,谢谢

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

152

帖子

0

精华

高级会员

Rank: 4

积分
777
金钱
777
注册时间
2016-7-15
在线时间
119 小时
发表于 2020-8-18 10:48:03 | 显示全部楼层
你这个其实可以通过算法来解决,比如均值算法啥的
好好学习,天天向上。
回复

使用道具 举报

12

主题

3397

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8669
金钱
8669
注册时间
2020-5-11
在线时间
4132 小时
发表于 2020-8-18 11:08:06 | 显示全部楼层
测量值为V1,显示值为V2,隔一秒钟V2=V1。
专治疑难杂症
回复

使用道具 举报

9

主题

219

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1434
金钱
1434
注册时间
2020-5-12
在线时间
394 小时
发表于 2020-8-18 11:14:59 | 显示全部楼层
这用定时器就好了,定个1s,定时到设定标识有效,取电压值,取完标识无效,时间计数器置0.
回复

使用道具 举报

2

主题

459

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4498
金钱
4498
注册时间
2018-5-14
在线时间
962 小时
发表于 2020-8-18 12:26:42 | 显示全部楼层
和滤波算法和其他算法没关系,而是注意刷屏时间,推荐刷屏时间在0.5~2s。如果刷屏时间太快,既浪费CPU的计算,又起不到好的效果。
回复

使用道具 举报

50

主题

1805

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6662
金钱
6662
注册时间
2016-5-29
在线时间
910 小时
发表于 2020-8-18 14:40:29 | 显示全部楼层
这个好解决呀..做一个 微分 检测.. 对微分求 绝对值..在一定的范围内,不刷新显示.超过就刷新.并且刷新微分参考值.
简单地说,就是查看变化的量,变化的量大的时候,刷新,
回复

使用道具 举报

5

主题

269

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1053
金钱
1053
注册时间
2020-5-11
在线时间
253 小时
发表于 2020-8-18 15:28:14 | 显示全部楼层
姚先起 发表于 2020-8-18 12:26
和滤波算法和其他算法没关系,而是注意刷屏时间,推荐刷屏时间在0.5~2s。如果刷屏时间太快,既浪费CPU的计 ...

赞同。我也感觉不要动采集相关的。修改一下屏幕刷新时间。当然题主你可以多试试,看看改屏幕刷新时间效果好还是改算法效果好
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8024
金钱
8024
注册时间
2014-8-13
在线时间
1595 小时
发表于 2020-8-18 15:36:18 | 显示全部楼层
噪声抑制算法:
if((Vcur - Vpre > Vlim1) || (Vcur - V3before > Vlim2))
{
    Update(Vcur);
    Vpre = Vcur;
}
    V3before = V2before;
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2020-5-10
在线时间
17 小时
 楼主| 发表于 2020-8-18 22:23:39 | 显示全部楼层
mack13013 发表于 2020-8-18 15:36
噪声抑制算法:
if((Vcur - Vpre > Vlim1) || (Vcur - V3before > Vlim2))
{

这个代码看不懂,能不能麻烦你讲一下?我自己试着写了一些代码,对最后一个数字延时的时间长一点,最后一个数字是不跳那么快了,但是前面3个数字开始闪了,亮一下灭一下,第4个数字延时越长,前3个数字灭的时间越长
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2020-5-10
在线时间
17 小时
 楼主| 发表于 2020-8-18 22:24:45 | 显示全部楼层
姚先起 发表于 2020-8-18 12:26
和滤波算法和其他算法没关系,而是注意刷屏时间,推荐刷屏时间在0.5~2s。如果刷屏时间太快,既浪费CPU的计 ...

应该怎么延长刷屏时间?这个是数码管显示的,刷屏时间长了,它会闪
回复

使用道具 举报

2

主题

459

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4498
金钱
4498
注册时间
2018-5-14
在线时间
962 小时
发表于 2020-8-19 10:31:32 | 显示全部楼层
新手上路啊 发表于 2020-8-18 22:24
应该怎么延长刷屏时间?这个是数码管显示的,刷屏时间长了,它会闪

那问题不是出在你采集和滤波了,而是出在你的显示功能代码,你的显示肯定用了大量的Delay进行阻塞来保证显示的正常,当某个delay时间长以后导致与其他LED的亮度不一致。数码管显示网上大多只是Demo。好好修改你的显示代码吧。
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2020-5-10
在线时间
17 小时
 楼主| 发表于 2020-8-19 12:42:40 来自手机 | 显示全部楼层
姚先起 发表于 2020-8-19 10:31
那问题不是出在你采集和滤波了,而是出在你的显示功能代码,你的显示肯定用了大量的Delay进行阻塞来保证 ...

是的,一共4个数字,每个数字显示之后延时2ms,这样轮流显示,第4个数字延时的时间越长,它就跳的越慢,但是前面三个数字就会闪了,有什么办法才能让第4个数字延时长一点,前面3个又不闪?
回复

使用道具 举报

2

主题

459

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4498
金钱
4498
注册时间
2018-5-14
在线时间
962 小时
发表于 2020-8-19 15:17:03 | 显示全部楼层
新手上路啊 发表于 2020-8-19 12:42
是的,一共4个数字,每个数字显示之后延时2ms,这样轮流显示,第4个数字延时的时间越长,它就跳的越慢, ...

一般性delay是在演示代码中使用的,正式的项目不会用的,当多个演示代码放在一起,delay的时间可以让while(1)运行变得特别慢。可以去看一下 状态机。或者最简单的方法是用定时器进行刷屏(同样定时器中断里面不能存在delay)。
回复

使用道具 举报

9

主题

219

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1434
金钱
1434
注册时间
2020-5-12
在线时间
394 小时
发表于 2020-8-19 15:27:24 | 显示全部楼层
用定时器创建软定时器来代替delay。把阻塞变成非阻塞。
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2017-12-28
在线时间
24 小时
发表于 2020-8-19 15:44:24 | 显示全部楼层
其实小数点后两位就够了,没有必要设置这么多位,ADC也没有那么精确,可以忽略了。
世界上最远的距离不是天涯和海角,而是老师在讲第四章,学霸在自学第八章,而我在看目
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2017-12-28
在线时间
24 小时
发表于 2020-8-19 15:45:36 | 显示全部楼层
莫索菲特 发表于 2020-8-19 15:44
其实小数点后两位就够了,没有必要设置这么多位,ADC也没有那么精确,可以忽略了。

占用资源的东西如中断和定时器尽量不要用,影响数码管刷新不说,还能搞出其他的问题
世界上最远的距离不是天涯和海角,而是老师在讲第四章,学霸在自学第八章,而我在看目
回复

使用道具 举报

2

主题

459

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4498
金钱
4498
注册时间
2018-5-14
在线时间
962 小时
发表于 2020-8-19 16:35:57 | 显示全部楼层
莫索菲特 发表于 2020-8-19 15:45
占用资源的东西如中断和定时器尽量不要用,影响数码管刷新不说,还能搞出其他的问题

神理论,资源放着就是要用的,影响刷新是由于数码管的驱动代码本身存在问题。如果说定时器1ms的定时器中断里面存在100ms的阻塞延时导致的程序异常,难不成是定时器资源问题?做软件的找问题一定要从自身出发。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 17:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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