查看: 2221|回复: 3

在LPC55S69和OKdo E1板上使用电子墨水显示屏

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3302

    主题

    6549

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32045
    最后登录
    2024-4-29
    发表于 2020-8-4 11:18:47 | 显示全部楼层 |阅读模式
    在LPC55S69和OKdo E1板上使用电子墨水显示屏



    翻译自mark embeddedpro


    在锁定的这几周中,我继续探索我的两个爱好(嵌入式系统和“谈论天气”)。我终于明白,我的气象站项目可以放在办公室的窗台上,并在随附的eInk显示屏上显示温度,湿度和大气压。
    1.png

    气象站项目:室外温暖,多云和低压

    在此博客中,我将重点介绍如何驱动该显示器。

    我选择了MikroElekronika电子墨水点击板(MIKROE-2659)作为该项目的显示器。最初,我被显示器的“显示保留”功能所吸引:我打算关闭显示器电源,并将NXP LPC55S69设置为在博世BME280环境传感器采样1分钟之间的低功耗模式。我尚未在气象站中实现低功耗功能,但显示仍然是呈现数据的一种有吸引力的方式。我的项目从NXP LPC55S69-EVK开始,该板具有Mikroe连接器,因此我能够将eInk Click板直接插入EVK。在对软件进行原型制作后,我过渡到OKdo E1板时,我过渡到了您在照片中看到的“面包板”设置。


    OKdo E1板和eInk Click板之间的接口非常简单:它是SPI连接(eInk板没有MISO信号返回),BUSY信号和Data / Command D /〜C信号。我使用了MCUXpresso SDK SPI驱动程序(使用FLEXCOMM8,高速SPI)和两个GPIO信号作为控制信号。此eInk显示屏需要大约一秒钟的时间才能将图像从其显示RAM传输到面板,并且在此传输过程中将忙信号设置为高电平。在此期间,显示IC将不接受任何新命令或数据。而且,与我使用的所有基于SPI的显示器一样,​​主机微控制器设置或清除了“ Data / Command D /〜C”控制线,并告知当前SPI字是命令字还是数据。
    2.png

    eInk Click板接口信号:SPI + BUSY + D /〜C

    使用MCUXpresso SDK SPI驱动程序函数SPI_MasterTransferBlocking()写入eInk显示。显示屏包括72 x 172像素,每个像素都能够显示4种灰度颜色之一:白色(0b11),灰色2(0b10),灰色1(0b01)或黑色(0b00)。因此,共有12384个像素,如果我们将4个像素的颜色存储在一个字节中,则意味着每次屏幕刷新我们将传输3096字节的数据(加上5字节的控制字在块之前(将RAM X地址计数设置回零,RAM Y地址计数回到171),并在数据传输后4字节)。所有技术细节均在MikroElektronika发布的数据表epa20-ae.pdf中。我在“横向”模式下使用屏幕。左上角的像素是像素[0,171]。当我们过渡到屏幕右侧时,列数递减为0,而当我们向下过渡屏幕时,列数递增为71,这意味着右下角的像素为[71,0]。这解决了使用面板时的最大谜团。

    以气象站“历史记录”屏幕顶部中心的“云”符号为例。这只是位图,在将组装好的屏幕传输到显示器之前,它会写入LPC55S69内部的屏幕缓冲区中。
    3.png

    气象站“历史”屏幕
    历史屏幕由各个部分组成:

    从MCUXpresso SDK中的LittleVGL图形库获取的字体(严格来说是字形)(请参见littlevgl_demo示例项目);
    符号(“电池充电”符号来自LittleVGL,而“温度”和“云”符号是我创建的位图;
    最后,只需将显示最近7天最高/最低温度和大气压力趋势的方框和线条直接直接绘制到屏幕上即可。
    为了以正确的方向显示位图,必须进行一些操作。这是我的步骤。

    1)设计位图
    在开始嵌入式工作之前,我总是模拟Microsoft Powerpoint中的任何屏幕。这使我可以看到屏幕的显示方式,并轻松地移动项目。 Powerpoint的另一个优点是它具有图标库,因此我能够为屏幕选择“温度”和“天气”图标。这是Powerpoint中的屏幕…
    4.png

    Microsoft Powerpoint中“历史记录”屏幕的模型。
    2)导出温度和天气符号,并调整大小
    Powerpoint支持以多种格式导出幻灯片–我使用位图格式,然后裁剪输出,以便仅显示Weather符号。有许多工具可用于调整位图的大小并将其缩小为4色灰度(我使用了GIMP)。前面我提到我们将在一个字节中存储4个垂直像素,因此我将符号的大小调整为20像素宽和16像素高。
    12.png
    小!
    5.png
    天气符号(拉伸)


    显示20×16像素的图像(很小)对我没有帮助,因此我在上图中进行了拉伸。在我的笔记本电脑上,它的大小约为1 KB,20×16像素和2位灰度色(白色,两个灰度和黑色)。

    3)转型
    位图存储为行数组,每行宽20像素,共有16行。但是,当我们写入屏幕时,必须将数据写入列中。优雅的解决方案是围绕位图的对角轴翻转位图:左上角的像素保持在同一位置,右上角的像素变为左下角的像素,依此类推上。考虑将图像顺时针旋转90度,然后围绕垂直轴镜像是最简单的方法,例如:
    6.png

    天气符号的转变
    如果您仔细查看“之前”和“之后”图片,您会发现,当我们将第一张_row_从旋转的位图写入eInk屏幕上的一列时,我们将显示16像素的白色列。下一行将生成另一列16个白色像素,位图的第三行将云的边缘写入eInk屏幕上的一列。当我们从位图的行中读取并在屏幕上写入列时,最终将按预期显示天气符号。

    4)转换为字符数组
    在线有许多位图到阵列转换器。这是一个最终,我们得到一个看起来像这样的结构:
    7.png

    天气符号数组

    不必太怪异,我们可以读取数组的前两行(第26和27行),并观察到它们是4个字节的0xFF。将白色编码为0b11,我们可以看到有两行16像素的白色。云边缘的第一个像素被编码为0b10(来自0xF8中的“ ​​8”,第28行)为浅灰色(GREY2)。

    5)在屏幕上显示
    我编写了一个小测试程序以在eInk屏幕上显示天气符号。就像从数组weather_symbol_cloudy_grey2 []中读取每一行并将其写入LPC55S69内部的屏幕缓冲区一样简单。屏幕缓冲区只是一个3096字节的字节数组,从左上方的像素开始,一直向下到屏幕的左下方像素,然后返回第二列,依此类推。当我们将天气符号复制到屏幕缓冲区时,每次都需要添加行偏移量(18个字节)。由于每一列中有72个像素,因此等于18个字节。复制例程就是这样:
    8.png

    位图复制例程

    9.png

    eInk屏幕上显示的天气符号

    与往常一样,我的EmbeddedPro YouTube频道上托管了一个简短的视频,显示气象站正在运行。它嵌入在这里:

    将eInk CLick板连接到OKdo E1板非常简单。它具有简单的物理接口,我能够使用MCUXpresso SDK SPI驱动程序和Pins Config工具来设置SPI和GPIO引脚。 MikroElektronika在其文档中提供了足够的信息以使用显示器,并注意查找表(LUT)和写入显示控制器内部RAM的必要命令。此后,反复尝试才能获得正确的位图写入顺序。我能够利用来自lpcxpresso55s69 SDK的LitteVGL字体支持来编写各种字体和符号(字体和符号表只是索引位图),我非常喜欢开发此气象站项目。

    我相信我已经为您提供了一些有关如何开始自己的NXP LPC5S69 / OKdo E1项目的建议和想法。让我知道您对这个(或更早的)博客的评论如何进行。

    翻译有问题的地方请大家指出


    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-12-2 08:40
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    97

    主题

    839

    帖子

    7

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    3986
    最后登录
    2024-4-29
    发表于 2020-8-4 11:35:03 | 显示全部楼层
    赞赞赞赞赞赞赞
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    5 小时前
  • 签到天数: 148 天

    [LV.7]常住居民III

    10

    主题

    387

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    1270
    最后登录
    2024-4-29
    发表于 2021-8-4 10:01:34 | 显示全部楼层
    赞赞赞。。。。。
    加油加油
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2022-1-4 14:25
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    172

    帖子

    0

    高级会员

    Rank: 4

    积分
    573
    最后登录
    2024-4-28
    发表于 2022-5-9 15:23:56 | 显示全部楼层
    学习了
    每天登陆学习一下
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-29 14:06 , Processed in 0.268701 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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