Linux系统下点亮Led点阵屏实现原理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Linux系统下点亮Led点阵屏实现原理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2009字,纯文字阅读大概需要3分钟。
内容图文
![Linux系统下点亮Led点阵屏实现原理](/upload/InfoBanner/zyjiaocheng/943/11ad543e42f14a41a392b69021101321.jpg)
1. 环境
驱动Led点阵屏一般的通用做法是使用单片机,其原因是单片机是裸机编程,无操作系统以及复杂的系统调度,扫描Led点阵屏的时间精度较高,因此扫屏时不会出现闪屏或者行亮度不一的情况(若闪屏,则表示行扫间隔太久;若某一行特别亮,则表示每行的扫描时间相差太大)。
当前的实现环境为Linux系统,需要考虑操作系统以及程序调度带来的时间延迟,时间精度不准会造成上述两个问题。
2. 实现原理
考虑两种自然而然的做法:
1. 在内核开驱动线程,不停的进行数据移位和行扫。但是这种做法有一个问题,就是线程必须让出时间片,否则系统会整个死掉,但是让出时间片意味着线程需要休眠,由于系统调度,又会导致线程唤醒的时间长度不一,很容易就会导致行亮度不一的情况。
2. 内核提供ioctl接口,用户层开线程不停的数据移位和行扫。这种方式无需考虑让出时间片,但是在用户层进行如此高频率的操作会导致cpu占用很高,同时由于需要在用户层和内核之间切换,系统调度也会带来行亮度不一的问题。
上述两个自然而然的方法都无法控制行扫的时间间隔,有很多行扫是多余的。在Linux下控制Led点阵屏需要解决两个问题:cpu占用率高以及时间精度不准的问题。
Led点阵屏显示时需要不停地依次扫描每一行,如果扫描行的时间长度相差太大,就会出现行亮度不一的问题,但通常cpu又无法专门提供一个稳定的时钟用于驱动Led屏。解决办法是中断 + PWM 来驱动Led屏进行扫描,大致过程如下:
1. 将Led屏的数据使能OE脚与两个GPIO相接,GPIO设置为输入,OE复用为PWM。通过PWM,OE脚上能输出周期性的高低电平,且时间精度很高。当电平转换时,两个GPIO脚就能检测到变化,并产生相应的中断,由此进入到中断回调函数
2. 根据Led屏控制的时序,在中断回调函数中进行锁存和行扫。当OE脚电平有效时进行行扫,当OE脚无效时进行锁存。由于PWM电平变化的间隔稳定且精确,每次行扫的间隔也就能稳定,因此也就解决了行亮度不一的问题。
3. 使用PWM作为时钟源还有伸缩性:
(一) 通过控制PWM的周期个数,可控制产生中断的速率,以此来控制屏扫的帧率,帧率可视不同的平台进行不同的设置,不会进行无用的屏扫,以达到降低和控制CPU占用率的问题。
(二) 通过控制PWM的占空比,可实现LED屏的亮度控制,不同硬件可实现不同的亮度等级
3. 总结
该方法是操作系统下驱动Led屏的一种通用方法,简单且易用。
KOdecsdn 发布了2 篇原创文章 · 获赞 0 · 访问量 2163 私信 关注
内容总结
以上是互联网集市为您收集整理的Linux系统下点亮Led点阵屏实现原理全部内容,希望文章能够帮你解决Linux系统下点亮Led点阵屏实现原理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。