摘要: 使用MAX6952和MAX6953 5x7矩阵LED驱动器的单色和双色LED图形显示板的软件控制建议。
本应用笔记讨论了使用MAX6952和MAX6953 SPI和I2C 5 × 7矩阵LED显示驱动器构建单色和双色图形留言板的软件设计技术。
本应用笔记是讨论MAX6952和MAX6953 LED驱动器应用中的软件和处理器接口问题的两个应用笔记之一,用于构建用于留言板和动画图形显示的点海LED矩阵图形面板。本笔记涵盖了面板设计的软件方面。另一个说明,“用MAX6952和MAX6953构建LED点阵图形面板”,涵盖了面板设计的电气方面,应该先阅读。
MAX6952和MAX6953是4位阴极行5×7矩阵LED显示驱动器,通过高速SPI (MAX6952)或I(2)C (MAX6953)串行接口控制。这些驱动程序主要用于字符显示应用程序,其中单个5×7矩阵数字在物理上间隔以形成一个或多个字符行(图1)。
图1所示。使用5×7矩阵字符的8字符乘2行的矩阵显示面板的示例。
MAX6952和MAX6953将4个单独的5×7矩阵led视为4个字符数字。用户可以控制在每个数字上显示104个固定字符和24个自定义字符中的哪一个。如果需要,用户可以在通电后将自定义字符上传到24个用户定义的字体中。显示器由数字寄存器控制,从128个字符的字体中选择一个字符。这种方法对于字符显示是快速和有效的,但不适合图形显示。
对于使用MAX6952或MAX6953的图形应用,控制技术正好相反。固定字体被忽略,24个用户定义字体用于直接图形显示控制。每个数字寄存器都被设置为指向不同的用户定义字体位置,并且对字体本身进行操作以调整5×7部分中的图形显示。如果不需要blink控件,则只需要4个用户定义的字体位置,每个5×7节一个(表1)。如果使用blink,则需要8个用户定义的字体位置,每个5×7节一个闪烁阶段(P1和P0)(表2)。数字寄存器只需要用适当的RAMxx字符地址写入一次,并且对字体本身进行操作以设置图形图像。
数字0 | 数字1 | 数字2 | 数字3 | |
字体的位置 | RAM00 | RAM01 | RAM02 | RAM03 |
数字0 | 数字1 | 数字2 | 数字3 | |||||
眨眼阶段 | P1 | P0 | P1 | P0 | P1 | P0 | P1 | P0 |
字体的位置 | RAM00 | RAM04 | RAM01 | RAM05 | RAM02 | RAM06 | RAM03 | RAM07 |
上面概述的简单方案适用于静态显示,其中图形图像相对不频繁地上传到显示器,可能使用闪烁来提供一些动画效果。但是,通过充分利用更多的用户定义字体,可以获得高度的无伪影图像处理。有24个用户定义的字体位置可用,实际上只需要4个(没有闪烁)或8个(有闪烁)字体位置来存储显示的图形图像。额外的字体位置可用于预加载图形框架。图形帧是为了显示而存储在显示驱动程序中的完整显示图像。24个用户定义的字体允许显示驱动程序存储3个完整的图形帧(其中一个正在显示),在像素级上具有闪烁控制(表4),或6个完整的帧,不具有闪烁控制(表3)。预显示是在需要显示图像数据之前将图像数据发送给显示驱动程序的技术。
数字0 | 数字1 | 数字2 | 数字3 | |
第1帧字体位置 | RAM00 | RAM01 | RAM02 | RAM03 |
框架2字体位置 | RAM04 | RAM05 | RAM06 | RAM07 |
框架3字体位置 | RAM08 | RAM09 | RAM0A | RAM0B |
框架4字体位置 | RAM0C | RAM0D | RAM0E | RAM0F |
框架5字体位置 | RAM10 | RAM11 | RAM12 | RAM13 |
框架6字体位置 | RAM14 | RAM15 | RAM16 | RAM17 |
数字0 | 数字1 | 数字2 | 数字3 | |||||
眨眼阶段 | P1 | P0 | P1 | P0 | P1 | P0 | P1 | P0 |
框架1字体位置 | RAM00 | RAM04 | RAM01 | RAM05 | RAM02 | RAM06 | RAM03 | RAM07 |
框架2字体位置 | RAM08 | RAM0C | RAM09 | RAM0D | RAM0A | RAM0E | RAM0B | RAM0F |
框架3字体位置 | RAM10 | RAM14 | RAM11 | RAM00 | RAM15 | RAM12 | RAM13 | RAM17 |
显示动态图像的挑战是无缝地改变图像,而不让观众看到短暂的效果(伪影)。每次更改图像时必须发送给驱动程序的数据量越小,就越容易实现这一点。在留言板上看到的一个常见现象是滚动波纹,因为控制器不能足够快地移动所有显示数据。最小化数据流将最小化处理器负载,并且接口数据速率也可能变慢。
使用帧的优点是,将显示从一个预加载帧切换到另一个预加载帧需要发送给驱动程序的控制字比更改显示图像本身要少。为了改变帧,每个MAX6952或MAX6953的4位寄存器写入与新帧对应的用户定义字体值。这涉及到对每个MAX6952或MAX6953进行4次写入(每个数字寄存器一次写入)。直接更改显示图像则需要对每个MAX6952或MAX6953进行20次写操作(对于4个用户定义的字体,每次5次写操作)。当然,帧数据仍然需要加载一段时间,所以这20次对4个用户定义字体的写入仍然需要执行。这样做的好时机是在启动初始化期间。
推荐的无缝更改图像的技术需要启用闪烁,尽管图像中没有必要有任何闪烁段。假设目前使用的是第1帧,那么显示的图像从0位到3位使用RAM00到RAM07(表4)。注意,如果RAM00数据= RAM04数据,RAM01数据= RAM05数据,RAM02数据= RAM06数据,RAM03数据= RAM07数据,那么图像不会闪烁,因为闪烁平面P1和P0中的图像是相同的。然后可以将另一个完整的图像加载到帧2中,即RAM08到RAM0F。上传可以按照微处理器允许的速度或慢或快进行,因为图像还没有显示出来。将显示器从第一帧无缝切换到第二帧的诀窍是在P1眨眼阶段改变数字的P0数据,然后在P0眨眼阶段改变数字的P1数据。当前的闪烁阶段可以通过blink输出引脚或配置寄存器中P位的状态来监控。注意,闪烁计时现在设置了更改图像的响应时间,因为图像更新是同步到闪烁的。如果应用程序将使用分段闪烁,那么权衡明显较慢的分段闪烁速度与在不同图像之间切换时合理快速的响应时间的竞争需求。闪烁速度设置控制这两个参数。
使用帧也使慢速动画变得容易。MAX6952或MAX6953驱动程序可以存储6帧动画。同样,该技术是在显示P1阶段时更改P0闪烁阶段的数字数据,并在显示P0阶段时更改P1闪烁阶段的数字数据(表6)。片段闪烁不用于动画,因此闪烁速度仅用于设置动画速度或帧速率。这可以从每秒4帧(OSC = 8MHz)到每2秒一帧(OSC = 1MHz)设置。
表5中的用户操作确保下一个闪烁阶段显示一个新帧,在六个可用帧之间循环。因此,序列控制6步动画,无限重复。如果需要,动画可以少于6帧;例如,驱动程序可以存储两个3步动画。请注意,连续帧的时间同步完全由MAX6952或MAX6953驱动程序的闪烁时钟设置。用户的任务只是在每个闪烁阶段向每个MAX6952或MAX6953驱动程序写入4个字的数字数据,以控制动画。表5中没有显示的是将动画数据的所有帧上传到所有MAX6952或MAX6953驱动程序的用户定义字体中的一次性任务。
数字0 | 数字1 | 数字2 | 数字3 | 眨眼阶段 | 闪烁输出引脚电平 (配置寄存器P位) (在当前闪烁阶段) | 用户操作期间 当前闪烁阶段 | |
初始化 | 将动画数据写入RAM00 - RAM17 | ||||||
第一帧 | RAM00 | RAM01 | RAM02 | RAM03 | P0 | 高 | 写0x04到地址0x40(0位P1) 写0x05到地址0x41(数字1 P1) 将0x06写入地址0x42(数字2 P1) 将0x07写入地址0x43(数字3 P1) |
第二帧 | RAM04 | RAM05 | RAM06 | RAM07 | P1 | 低 | 写0x08到地址0x20(0位P0) 写0x09到地址0x21(数字1 P0) 将0x0A写入地址0x22(2位P0) 写0x0B到地址0x23(数字3 P0) |
第三帧 | RAM08 | RAM09 | RAM0A | RAM0B | P0 | 高 | 将0x0C写入地址0x40(数字0 P1) 将0x0D写入地址0x41(数字1 P1) 将0x0E写入地址0x42(数字2 P1) 将0x0F写入地址0x43(数字3 P1) |
框架4 | RAM0C | RAM0D | RAM0E | RAM0F | P1 | 低 | 写0x10到地址0x20(数字0 P0) 写0x11到地址0x21(数字1 P0) 写0x12到地址0x22(2位P0) 写0x13到地址0x23(数字3 P0) |
框架5 | RAM10 | RAM11 | RAM12 | RAM13 | P0 | 高 | 写0x14到地址0x40(0位P1) 将0x15写入地址0x41(数字1 P1) 将0x16写入地址0x42(数字2 P1) 将0x17写入地址0x43(数字3 P1) |
框架6 | RAM14 | RAM15 | RAM16 | RAM17 | P1 | 低 | 写0x00到地址0x20(数字0 P0) 写0x01到地址0x21(数字1 P0) 写0x02到地址0x22(2位P0) 写0x03到地址0x23(数字3 P0) |
为了运行不断变化的动画序列,系统处理器需要做更多的工作(表6)。用户在每帧期间的操作现在包括为每个MAX6952或MAX6953更新字体RAM,因为帧数据是不断变化的,而不是像以前那样永久存储(一次)。然而,连续帧的时间同步仍然由MAX6952或MAX6953驱动程序的闪烁时钟控制。同样,处理器只需要在每个闪烁阶段的某个时候传送一个数据包。数据包包含4个字的数字数据,加上20个字的字体数据。
当受到接口速度的限制时,图形显示器的尺寸限制值得探索(表7)。该表显示了串行接口以最大比特率连续运行连续动画序列时的理论最大显示尺寸。实际限制将至少比理论限制低一点(或很多),这取决于处理器必须执行的后台处理,以及串行接口是硬件同步串行端口还是位式I/O。
数字0 | 数字1 | 数字2 | 数字3 | 眨眼阶段 | 闪烁输出引脚电平 (配置寄存器P位) (在当前闪烁阶段) | 用户操作期间 当前闪烁阶段 | |
初始化 | 将动画数据写入RAM00 - RAM17 | ||||||
第一帧 | RAM00 | RAM01 | RAM02 | RAM03 | P0 | 高 | 写0x04到地址0x40(0位P1) 写0x05到地址0x41(数字1 P1) 将0x06写入地址0x42(数字2 P1) 将0x07写入地址0x43(数字3 P1) 确保第2帧的RAM04-RAM07已更新 如果处理器时间和帧数据可用,可以更新RAM08-RAM17吗 |
第二帧 | RAM04 | RAM05 | RAM06 | RAM07 | P1 | 低 | 写0x08到地址0x20(0位P0) 写0x09到地址0x21(数字1 P0) 将0x0A写入地址0x22(2位P0) 写0x0B到地址0x23(数字3 P0) 确保第3帧的RAM08-RAM0B已更新 如果处理器时间和帧数据可用,可以更新RAM0C-RAM17, RAM00-RAM03吗 |
第三帧 | RAM08 | RAM09 | RAM0A | RAM0B | P0 | 高 | 将0x0C写入地址0x40(数字0 P1) 将0x0D写入地址0x41(数字1 P1) 将0x0E写入地址0x42(数字2 P1) 将0x0F写入地址0x43(数字3 P1) 确保第4帧的RAM0C-RAM0F已更新 如果处理器时间和帧数据可用,可以更新RAM10-RAM17, ram00 - ram07吗 |
框架4 | RAM0C | RAM0D | RAM0E | RAM0F | P1 | 低 | 写0x10到地址0x20(数字0 P0) 写0x11到地址0x21(数字1 P0) 写0x12到地址0x22(2位P0) 写0x13到地址0x23(数字3 P0) 确保第5帧的RAM10-RAM13更新 是否可以更新RAM14-RAM17, RAM00-RAM0Bif处理器时间和帧数据 |
框架5 | RAM10 | RAM11 | RAM12 | RAM13 | P0 | 高 | 写0x14到地址0x40(0位P1) 将0x15写入地址0x41(数字1 P1) 将0x16写入地址0x42(数字2 P1) 将0x17写入地址0x43(数字3 P1) 确保第6帧的RAM14-RAM17已更新 如果处理器时间和帧数据可用,可以更新RAM00-RAM0F吗 |
框架6 | RAM14 | RAM15 | RAM16 | RAM17 | P1 | 低 | 写0x00到地址0x20(数字0 P0) 写0x01到地址0x21(数字1 P0) 写0x02到地址0x22(2位P0) 写0x03到地址0x23(数字3 P0) 确保第1帧的RAM00-RAM03已更新 如果处理器时间和帧数据可用,可以更新RAM04-RAM13吗 |
单色40x56像素子块 (16个MAX6952/3驱动) | 双色40x56像素子块 (32个MAX6952/3驱动) | |||
简单的动画 每个驱动程序每帧4个字 | 完整的动画 每个驱动程序每帧24个字 | 简单的动画 每个驱动程序每帧4个字 | 完整的动画 每个驱动程序每帧24个字 | |
I(2)C接口位/帧 | 18 × 4 × 16 = 1152位 | 18 × 24 × 16 = 6912位 | 18 × 4 × 32 = 1304位 | 18 × 24 × 32 = 13824位 |
SPI接口位/帧 | 16 × 4 × 16 = 1024位 | 16 × 24 × 16 = 6144位 | 16 × 4 × 32 = 2048位 | 16 × 24 × 32 = 12288位 |
400k bits(-1) I(2)C接口最大显示尺寸 | 342区块 | 57岁的子块 | 171区块 | 28岁的子块 |
26M bitss(-1)SPI interface最大显示尺寸 | 25200区块 | 4200区块 | 12600区块 | 2100区块 |
SPI接口可能是除最小显示尺寸外的所有首选接口。每个I(2)C MAX6953可设置为16个I(2)C地址之一。这意味着包含16个max6953的每个单色子块必须在自己的I(2)C总线上运行,以避免寻址冲突。一个中等大小的图形显示器,例如,224 × 80像素,将使用6个单色子块,需要12个处理器I/O线来处理6个I(2)C总线。如果使用菊链(级联SPI接口)代替SPI max6952,则同一面板可以由2个处理器I/O线驱动。
使用MAX6952s,具有完整动画的双色面板的限制显示尺寸为2100个子块。一个实际的设计示例可能有一个处理器,它可以将四分之一的时间用于接口,运行在10mbits(-1)(通过RS-485链路)上。因此,该应用程序的显示尺寸限制下降到(2100 × 10/26 × 1/4) = 200个子块。因此,可以驱动的最大双色面板是10个子块乘20个子块,可能排列为1120 × 400双色像素。一个两倍于这个尺寸的单色面板可以被驱动。
社群二维码
关注“华强商城“微信公众号
Copyright 2010-2023 hqbuy.com,Inc.All right reserved. 服务热线:400-830-6691 粤ICP备05106676号 经营许可证:粤B2-20210308