本应用笔记讨论了使用MAX6952和MAX6953 SPI和I2C 5×7矩阵LED显示驱动器构建单色和双色图形留言板的软件设计技术。
本应用笔记是讨论MAX6952和MAX6953 LED驱动器应用中的软件和处理器接口问题的两篇应用笔记之一,用于构建用于留言板和动画图形显示的点数海LED矩阵图形面板。本说明介绍了面板设计的软件方面。
MAX6952和MAX6953为4位阴极排5×7矩阵LED显示驱动器,通过高速SPI控制™(MAX6952)或I2C (MAX6953) 串行接口。这些驱动程序主要用于字符显示应用,其中单个 5×7 矩阵数字在物理上间隔开以形成一个或多个字符行(图 1)。
图1.使用 8×2 个矩阵字符的 5 个字符 x 7 行矩阵显示面板的示例。
MAX6952和MAX6953将4个独立的5×7矩阵LED处理为4位数字。用户控制每个数字上显示 104 个固定字符和 24 个用户定义字符中的哪一个。如果需要,用户可以在通电后将自定义字符加载到 24 种用户定义的字体中。显示使用数字寄存器控制,以从 128 个字符的字体中选择一个字符。此方法对于字符显示快速有效,但不适用于图形显示。
对于使用MAX6952或MAX6953的图形应用,控制技术正好相反。固定字体被忽略,24 种用户定义的字体用于直接图形显示控制。每个数字寄存器都设置为指向不同的用户定义的字体位置,并且对字体本身进行操作以调整 5×7 部分中的图形显示。如果不需要闪烁控制,则只需要 4 个用户定义的字体位置,每个 5×7 部分一个(表 1)。如果使用闪烁,则需要 8 个用户定义的字体位置,每个闪烁阶段(P1 和 P0)每个 5×7 部分一个(表 2)。数字寄存器只需使用适当的RAMxx字符地址写入一次,并且字体本身作以设置图形图像。
数字 0 | 数字 1 | 数字 2 | 数字 3 | |
字体位置 | RAM00 | RAM01 | RAM02 | RAM03 |
数字 0 | 数字 1 | 数字 2 | 数字 3 | |||||
闪烁阶段 | 小一 | 小一 | 小一 | 小一 | 小一 | 小一 | 小一 | 小一 |
字体位置 | 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 | |||||
闪烁阶段 | 小一 | 小一 | 小一 | 小一 | 小一 | 小一 | 小一 | 小一 |
框架 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 |
显示动态图像的挑战是无缝地更改图片,而不会对观众造成瞬态效果(伪影)。每次更改映像时必须发送给驱动程序的数据量越小,就越容易实现。在留言板上看到的一个常见伪影是滚动波纹,因为控制器无法足够快地移动所有显示数据。最小化数据流可最大程度地减少处理器负载,并且接口数据速率也可以较慢。
使用帧的优点是,与更改显示图像本身相比,将显示从一个预加载帧翻转到另一个预加载帧需要向驱动程序发送更少的控制字。为了改变帧,MAX4或MAX6952的6953位寄存器用与新帧对应的用户定义字体值写入。这涉及对MAX4或MAX6952的每个数字寄存器进行6953次写入(每个数字寄存器20次写入)。直接改变显示图像需要对MAX5或MAX4进行6952次写入(6953种用户定义字体各写入20次)。当然,帧数据仍然需要加载一些时间,因此仍然需要执行这 4 次写入 <> 种用户定义的字体。执行此操作的好时机是在上电初始化期间。
无缝更改图像的推荐技术需要启用闪烁,尽管图像中不必有任何闪烁段。假设当前正在使用第 1 帧,因此显示的图像对数字 00 到数字 07 使用 RAM0 到 RAM3(表 4)。请注意,如果 RAM00 数据 = RAM04 数据、RAM01 数据 = RAM05 数据、RAM02 数据 = RAM06 数据、RAM03 数据 = RAM07 数据,则图像不会闪烁,因为闪烁平面 P1 和 P0 中的图像相同。然后可以将另一个完整的图像加载到第 2 帧中,即 RAM08 到 RAM0F。上传可以像微处理器允许的那样慢或尽可能快地执行,因为图像尚未显示。将显示器从第 1 帧无缝翻转到第 2 帧的诀窍是在 P0 闪烁阶段更改数字的 P1 数据,然后在 P1 闪烁阶段更改数字的 P0 数据。电流闪烁相位可以在Blink输出引脚上监控,也可以通过在配置寄存器中读取P位的状态来监控。请注意,闪烁计时现在设置更改图像的响应时间,因为图像更新已同步为闪烁。如果应用程序将使用段闪烁,则权衡明显较慢的段闪烁速度与在不同图像之间切换时相当快的响应时间的竞争要求。闪烁速度设置控制这两个参数。
使用帧还可以使慢速动画变得容易。MAX6952或MAX6953驱动器可存储6帧动画。同样,该技术是在显示P0相位时更改P1闪烁相位的数字数据,并在显示P1相位时更改P0闪烁相位的数字数据(表6)。片段闪烁不用于动画,因此闪烁速度只是设置动画速度或帧速率。这可以设置为每秒 4 帧 (OSC = 8MHz) 到每 2 秒一帧 (OSC = 1MHz)。
表 5 中的用户操作可确保下一个闪烁阶段显示一个新帧,围绕六个可用帧循环。因此,该序列控制一个 6 步动画,该动画无限期重复。如果需要,动画可以单步执行少于 6 帧;例如,驱动程序可以存储两个 3 步动画。注意,连续帧的时间同步完全由MAX6952或MAX6953驱动器的闪烁时钟设置。用户的任务就是在每个闪烁阶段向MAX4或MAX6952驱动器写入6953字数字数据,以控制动画。表5中未显示的是将所有动画数据帧上传到所有MAX6952或MAX6953驱动器的用户定义字体中的一次性任务。
数字 0 | 数字 1 | 数字 2 | 数字 3 | 闪烁阶段 |
闪烁输出引脚电平 (配置寄存器 P 位)( 在当前闪烁阶段) |
当前闪烁阶段的用户 操作 |
|
初始化 | 将动画数据写入 RAM00 - RAM17 | ||||||
帧 1 | RAM00 | RAM01 | RAM02 | RAM03 | 小一 | 高 |
将0x04写入地址0x40(数字 0 P1) 将0x05写入地址0x41(数字 1 P1) 将0x06写入地址0x42(数字 2 P1) 将0x07写入地址0x43(数字 3 P1) |
帧 2 | RAM04 | RAM05 | RAM06 | RAM07 | 小一 | 低 |
将0x08写入地址0x20(数字 0 P0) 将0x09写入地址0x21(数字 1 P0) 将0x0A写入地址0x22(数字 2 P0) 将0x0B写入地址0x23(数字 3 P0) |
帧 3 | RAM08 | RAM09 | RAM0A | RAM0B | 小一 | 高 |
将0x0C写入地址0x40(数字 0 P1) 将0x0D写入地址0x41(数字 1 P1) 将0x0E写入地址0x42(数字 2 P1) 将0x0F写入地址0x43(数字 3 P1) |
帧 4 | RAM0C | RAM0D | RAM0E | RAM0F | 小一 | 低 |
将0x10写入地址0x20(数字 0 P0) 将0x11写入地址0x21(数字 1 P0) 将0x12写入地址0x22(数字 2 P0) 将0x13写入地址0x23(数字 3 P0) |
帧 5 | RAM10 | RAM11 | RAM12 | RAM13 | 小一 | 高 |
将0x14写入地址0x40(数字 0 P1) 将0x15写入地址0x41(数字 1 P1) 将0x16写入地址0x42(数字 2 P1) 将0x17写入地址0x43(数字 3 P1) |
帧 6 | RAM14 | RAM15 | RAM16 | RAM17 | 小一 | 低 |
将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 | ||||||
帧 1 | RAM00 | RAM01 | RAM02 | RAM03 | 小一 | 高 |
将0x04写入地址0x40(数字 0 P1) 将0x05写入地址0x41(数字 1 P1) 将0x06写入地址0x42(数字 2 P1) 将0x07写入地址0x43(数字 3 P1) 确保 RAM04-RAM07 已针对第 2 帧进行更新 如果处理器时间和帧数据可用,则可以更新 RAM08-RAM17 |
帧 2 | RAM04 | RAM05 | RAM06 | RAM07 | 小一 | 低 |
将0x08写入地址0x20(数字 0 P0) 将0x09写入地址0x21(数字 1 P0) 将0x0A写入地址0x22(数字 2 P0) 将0x0B写入地址0x23(数字 3 P0) 确保 RAM08-RAM0B 已针对第 3 帧进行更新 如果处理器时间和帧数据可用,则可以更新 RAM0C-RAM17、RAM00-RAM03 |
帧 3 | RAM08 | RAM09 | RAM0A | RAM0B | 小一 | 高 |
将0x0C写入地址0x40(数字 0 P1) 将0x0D写入地址0x41(数字 1 P1) 将0x0E写入地址0x42(数字 2 P1) 将0x0F写入地址0x43(数字 3 P1) 确保 RAM0C-RAM0F 已针对第 4 帧进行更新 可以更新 RAM10-RAM17、RAM00-RAM07如果处理器时间和帧数据可用 |
帧 4 | RAM0C | RAM0D | RAM0E | RAM0F | 小一 | 低 |
写入0x10以地址0x20(数字 0 P0) 将0x11写入地址0x21(数字 1 P0) 将0x12写入地址0x22(数字 2 P0) 将0x13写入地址0x23(数字 3 P0) 确保 RAM10-RAM13 已针对第 5 帧进行更新 可以更新 RAM14-RAM17,RAM00-RAM0Bif 处理器时间和帧数据可用 |
帧 5 | RAM10 | RAM11 | RAM12 | RAM13 | 小一 | 高 |
写入0x14以地址0x40(数字 0 P1) 将0x15写入地址0x41(数字 1 P1) 将0x16写入地址0x42(数字 2 P1) 将0x17写入地址0x43(数字 3 P1) 确保 RAM14-RAM17 已针对第 6 帧进行更新 如果处理器时间和帧数据可用,则可以更新 RAM00-RAM0F |
帧 6 | RAM14 | RAM15 | RAM16 | RAM17 | 小一 | 低 |
写入0x00以地址0x20(数字 0 P0) 将0x01写入地址0x21(数字 1 P0) 将0x02写入地址0x22(数字 2 P0) 将0x03写入地址0x23(数字 3 P0) 确保 RAM00-RAM03 已针对第 1 帧进行更新 如果处理器时间和帧数据可用,则可以更新 RAM04-RAM13 |
单色40x56像素子模块 (16个MAX6952/3驱动器) |
双色40x56像素子模块 (32个MAX6952/3驱动器) |
|||
简单动画 每个驱动程序每帧 4 个单词 |
完整动画 每个驱动程序每帧 24 个单词 |
简单动画 每个驱动程序每帧 4 个单词 |
完整动画 每个驱动程序每帧 24 个单词 |
|
我2C 接口位/帧 | 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 位-1我2C 接口最大显示尺寸 | 342 个子块 | 57 个子块 | 171 个子块 | 28 个子块 |
26M 位-1SPI 接口最大显示尺寸 | 25200 个子块 | 4200 个子块 | 12600 个子块 | 2100 个子块 |
SPI接口可能是除最小显示器尺寸之外的所有接口的首选接口。每个我2C MAX6953可设置为16 I之一2C 地址。这意味着每个包含16个MAX6953的单色子模块必须独立运行I2C总线以避免解决冲突。例如,具有 224 × 80 像素的中等大小图形显示器将使用 6 个单色子块,需要 12 个处理器 I/O 线来处理 6 I2C 总线。如果SPI MAX2采用菊花链(级联SPI接口),则同一面板可以由6952条处理器I/O线驱动。
使用MAX6952时,具有完整动画的双色面板的限值显示尺寸为2100个子块。一个实际的设计示例可能有一个处理器,它可以将其四分之一的时间用于接口,以 10 Mb 的速度运行。-1(通过 RS-485 链路)。因此,此应用程序的显示大小限制降至 (2100 × 10/26 × 1/4) = 200 个子块。因此,可以驱动的最大双色面板是 10 个子块乘以 20 个子块,可能排列为 1120 × 400 个双色像素。可以驱动两倍于此尺寸的单色面板。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !