硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1040|回复: 13
收起左侧

[μCOS-III] 对于有7段码数码管需要动态扫描显示的需求,使用UCOS合适吗

  [复制链接]

77

主题

274

回帖

505

积分

金牌会员

积分
505
发表于 2024-9-7 11:08:39 | 显示全部楼层 |阅读模式
本帖最后由 logo 于 2024-9-7 11:11 编辑

我有个疑问,对于数码管需要动态扫描保持显示,在不用专门的数码管驱动芯片,自己程序定时动态扫描实现显示的话感觉用ucos就不是很合适。我认为一旦有数码管动态扫码就需要定时扫描数码管。定时时间不能太长,太长显示闪烁。太短太占用cpu。不知道如果要用ucos的话程序结构该怎么写。感觉好像不是很合适使用ucos,感觉ucos如果想驱动数码管的话最好还是搭配个专门的驱动芯片,不知道我的理解是否正确。
回复

使用道具 举报

6

主题

269

回帖

287

积分

高级会员

积分
287
发表于 2024-9-7 11:36:33 | 显示全部楼层
当然可以啊,你上windows点数码管都可以,创建一个任务,10mS运行一次,假如是有4段数字的话,第一次显示第一段数字,第二次显示第2段数字,40mS全部显示完成,也就是25HZ,人眼也看不到闪烁。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116230
QQ
发表于 2024-9-7 11:41:01 | 显示全部楼层
适合,就跟按键扫描一样。

扫描间隔还可以释放CPU权限,让低优先级任务执行。
回复

使用道具 举报

2

主题

73

回帖

79

积分

初级会员

积分
79
发表于 2024-9-7 12:32:41 | 显示全部楼层
扫描数码管主要是切换IO电平,所以每次操作很快。  可以将数码管扫描单独一个任务,把任务设最高优先级,这样其他任务运行慢也不会导致扫描卡住,同时扫描任务每次运行耗时也非常短,也不会对其他低优先级任务有影响。   需要注意的是扫描任务里面不要用死循环那种延时, 所有延时都要用系统的延时函数,延时期间其他任务可以运行。
回复

使用道具 举报

3

主题

425

回帖

434

积分

高级会员

积分
434
发表于 2024-9-7 15:34:28 | 显示全部楼层
放在1ms中断里扫描很合适
回复

使用道具 举报

77

主题

274

回帖

505

积分

金牌会员

积分
505
 楼主| 发表于 2024-9-8 22:48:47 | 显示全部楼层
fxyc87 发表于 2024-9-7 11:36
当然可以啊,你上windows点数码管都可以,创建一个任务,10mS运行一次,假如是有4段数字的话,第一次显示第 ...

我印象中要做到50Hz,人肉眼看着才不会闪烁。也就是20ms就要把所有数字刷一轮,假设4个数字的话要每5ms就要切换一个数字。创建一个5ms跑一次的任务,感觉这样频繁跑这个5ms任务的话,如果赶上系统中还有其他cpu使用率比较高的任务的话会可能处理不过来。如果其他任务都很简单cpu使用率不高的话用起来应该没问题。我是这么理解的。
回复

使用道具 举报

6

主题

269

回帖

287

积分

高级会员

积分
287
发表于 2024-9-9 08:37:19 | 显示全部楼层
logo 发表于 2024-9-8 22:48
我印象中要做到50Hz,人肉眼看着才不会闪烁。也就是20ms就要把所有数字刷一轮,假设4个数字的话要每5ms就 ...

这个你要实测的,我实测的感觉是10HZ基本上是连续的,但有微弱的闪烁感,15HZ完全看不出来,20HZ就非常好了.
当然这是指数码管,如果显示LCD图案肯定越快越好.
回复

使用道具 举报

21

主题

481

回帖

544

积分

金牌会员

积分
544
发表于 2024-9-9 11:12:34 | 显示全部楼层
开个定时器中断(50ms),再指派一个高优先级任务处理,想怎么刷都行
回复

使用道具 举报

42

主题

1024

回帖

1155

积分

至尊会员

积分
1155
发表于 2024-9-9 11:28:12 | 显示全部楼层
logo 发表于 2024-9-8 22:48
我印象中要做到50Hz,人肉眼看着才不会闪烁。也就是20ms就要把所有数字刷一轮,假设4个数字的话要每5ms就 ...

没问题啊,测试一下就知道了。不过其实我觉得最好是不用OS线程扫描更好,直接底层驱动封装,留一个送显示的接口就可以了。底层驱动自己在中断中扫描。这样将来程序需要移植到其他平台,或者修改驱动方式,就只需要改这个驱动就可以了。你用OS线程扫描,将来要是换成芯片驱动,你OS这部分程序也得改。这并不是一个好架构。
回复

使用道具 举报

77

主题

274

回帖

505

积分

金牌会员

积分
505
 楼主| 发表于 2024-9-9 12:17:13 | 显示全部楼层
fxyc87 发表于 2024-9-9 08:37
这个你要实测的,我实测的感觉是10HZ基本上是连续的,但有微弱的闪烁感,15HZ完全看不出来,20HZ就非常好了.
...

很多年前我做过数码管动态扫描驱动,现在都是用驱动芯片了。印象中实测动态扫描就是刷新频率最好要到50Hz肉眼看才不会有频闪。比如我们家用电的电网频率就是50Hz。频率太低的话,以前的白炽灯肉眼看着会有频闪的。
回复

使用道具 举报

77

主题

274

回帖

505

积分

金牌会员

积分
505
 楼主| 发表于 2024-9-9 12:18:27 | 显示全部楼层
ghslfgkkl88 发表于 2024-9-9 11:28
没问题啊,测试一下就知道了。不过其实我觉得最好是不用OS线程扫描更好,直接底层驱动封装,留一个送显示 ...

底层独立于操作系统搞中断担心和系统打架,影响整个系统的稳定性。
回复

使用道具 举报

5

主题

24

回帖

39

积分

新手上路

积分
39
发表于 2024-10-17 22:13:17 | 显示全部楼层
能用dma循环输出的方式吗?探讨下
我也是rtos里驱动4位数码管,试了6ms以下,不闪
如果在os里面,我觉得可以放在idle里面进行扫描输出,这样,理论上其他高权限线程可以尽快获得执行;就是,这样的话,系统任务一忙,显示就会闪
回复

使用道具 举报

11

主题

694

回帖

727

积分

金牌会员

积分
727
发表于 2024-10-18 09:21:22 | 显示全部楼层
logo 发表于 2024-9-9 12:17
很多年前我做过数码管动态扫描驱动,现在都是用驱动芯片了。印象中实测动态扫描就是刷新频率最好要到50Hz ...

最早驱动数码管电路好多74系列的芯片。现在集成芯片很便宜。TM 16XX
回复

使用道具 举报

77

主题

274

回帖

505

积分

金牌会员

积分
505
 楼主| 发表于 2024-10-18 09:50:31 来自手机 | 显示全部楼层
hqgboy 发表于 2024-10-18 09:21
最早驱动数码管电路好多74系列的芯片。现在集成芯片很便宜。TM 16XX

是的这种驱动芯片很好用,需要更新显示的时候送数据,送过数据以后会自动保持显示,不需要单片机不停的刷新显示
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-11 03:42 , Processed in 0.284314 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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