ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux系统下点亮Led点阵屏实现原理

2020-02-02 16:08:46  阅读:448  来源: 互联网

标签:Led OE 行扫 亮度 线程 Linux PWM 点阵


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 私信 关注

标签:Led,OE,行扫,亮度,线程,Linux,PWM,点阵
来源: https://blog.csdn.net/KOdeCSDN/article/details/104144645

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有