最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

轉(zhuǎn)LarryBank-在資源受限的 MCU 上使用電子紙/技術(shù)向博文/嵌入式/物聯(lián)網(wǎng)

2023-04-17 12:04 作者:高刷墨水屏電子紙金桑  | 我要投稿

https://bitbanksoftware.blogspot.com/2022/10/using-e-paper-displays-on-resource.html

基于互惠互利的平等互信合作原則以及我本人是war chest真金白銀資助Larry Bank的前提下,我很榮幸地幫他進(jìn)行轉(zhuǎn)內(nèi)銷。


背景

除了代碼和電源效率方面的挑戰(zhàn),我偶爾會發(fā)現(xiàn)其他吸引我的挑戰(zhàn)。 不久前,我開始與 Aaron Christophel 合作進(jìn)行他的各種電子貨架標(biāo)簽和電子紙項目。 我的想法之一是讓控制價格標(biāo)簽的 MCU 板有更多的自主權(quán),這樣它們就可以做更多的事情,而不僅僅是從服務(wù)器無線接收圖像。 最初的項目使用帶有 ARM MCU 和大量 RAM 的價格標(biāo)簽。 我能夠在其上運(yùn)行我的 TIFF G4 解碼器,并在將其發(fā)送到電子紙顯示器之前將整個結(jié)果圖像保存在 RAM 中:

Aaron 最近(和更大)的設(shè)備系列中的 MCU 包含一個 8051 型 CPU,具有有限的 FLASH 空間和更有限的 RAM。 我認(rèn)為看看我可以在那些 8 位 CPU 上運(yùn)行多少獨(dú)立功能(文本/GFX)將是一個很好的挑戰(zhàn)。

問題

讓我們從一個示例電子紙顯示器開始——一個 2.9 英寸的黑白顯示器,128x296 像素。

如果每個像素都是 1 位,那么我們需要 (128x296)/8 = 4736 字節(jié)來保存 RAM 中的整個像素陣列。 使用這些顯示器的傳統(tǒng)方法是在 RAM 中準(zhǔn)備圖像,然后將圖像發(fā)送到顯示器并告訴顯示控制器進(jìn)行刷新。 電子紙面板的控制器芯片內(nèi)部通常有兩個獨(dú)立的 1 位內(nèi)存平面來保存所有像素。 它們的三種典型使用方式:


- 當(dāng)前和以前的緩沖區(qū),用于快速更新已更改的像素

- 每像素 2 位緩沖區(qū)以顯示 4 級灰度

- 每像素 2 位緩沖區(qū),用于保存紅色/黑色/白色像素


與 LCD 和 OLED 控制器類似,電子紙控制器允許您定義內(nèi)存窗口,以便可以將數(shù)據(jù)寫入顯示器的子區(qū)域而不會干擾其他像素。 如果您沒有足夠的 RAM 來將整個幀保存在內(nèi)存中,則 GxEPD 等庫使用它來允許更新較小部分的顯示。 盡管如此,這還是假定您首先在 CPU RAM 中準(zhǔn)備圖形,然后將像素發(fā)送到電子紙的內(nèi)存中。


低內(nèi)存方法

我認(rèn)為嘗試不同的方法是值得的。 我的 OneBitDisplay 已經(jīng)可以選擇支持使用 OLED 和 LCD 顯示器,方法是將數(shù)據(jù)直接寫入顯示器的內(nèi)部存儲器,而不是先在 CPU RAM 中準(zhǔn)備數(shù)據(jù)。 這允許您顯示有用的文本和 GFX(有一些限制)而不需要任何顯著的本地 RAM。 在下圖中,ATtiny85(512 字節(jié) RAM)能夠在 SSD1306(128x64 = 1K RAM 內(nèi)部緩沖區(qū))上繪制文本。

由于電子紙控制器非常相似,因此它們應(yīng)該允許采用類似的方法。 首先,讓我們來看看非常流行的 SSD1306 128x64 OLED 顯示器的內(nèi)存布局。

在上圖中,“頁面”指的是一行 128 字節(jié),其中每列 8 個像素由一個字節(jié)中的 8 位控制,第一行中的最低有效位 (LSB)。 寫入第一個字節(jié)位置的字節(jié)值 7(00000111 二進(jìn)制)將繪制像素 (0,0)、(0,1) 和 (0,2),而 PAGE 中的其他 5 個像素不亮。 通過寫入與此內(nèi)部顯示 RAM 相同方向的字符圖像,可以非常輕松地將 8 像素高的倍數(shù)的文本行寫入顯示器,而無需先將其緩沖到本地 RAM 中。 這正是我在沒有本地緩沖區(qū)的情況下在 OneBitDisplay 中所做的。


現(xiàn)在讓我們來看看電子紙顯示器的內(nèi)存布局。

術(shù)語略有不同 - source(列)和 gate(行),但如果您將頭向右傾斜 90 度,則與 OLED 內(nèi)存布局有相似之處??。 字節(jié)水平排列,MSB(最高有效位)在左邊。 一些顯示器可以在另一個方向翻轉(zhuǎn)位順序,但這是大多數(shù)顯示器的默認(rèn)設(shè)置。 在我們的 2.9" 電子紙示例中,顯示內(nèi)存為縱向,128 像素(16 字節(jié))寬,296 行高。


一個實(shí)際例子

顯示控制器的內(nèi)存窗口功能允許通過定義 1 字節(jié)寬和 N 字節(jié)高的區(qū)域來模仿 OLED 的“PAGE”排列。 我用它來允許在垂直列中寫入字符圖形,并且能夠通過將電子紙本機(jī)方向逆時針旋轉(zhuǎn) 90 度來重新使用相同的“LSB on top”方向。 繪制下面字符的代碼與在 OLED 顯示器上繪制的代碼沒有變化。

兩個高度壓縮的 TIFF G4 圖像存儲在 Arduino Uno 的閃存中。 它們各自以 10:1 的比例壓縮。 我最新發(fā)布的 TIFF_G4 和 OneBitDisplay 庫支持直接解壓到電子紙幀緩沖區(qū)。 在上面的視頻中,電子紙內(nèi)存的像素(0,0)是顯示屏的右上角。 圖像以垂直線從右邊緣向左解碼。 下面是 TIFFDraw 回調(diào)函數(shù),展示了它是如何完成的。 當(dāng)圖像被解碼時,為每一行像素調(diào)用此函數(shù)。

當(dāng)接收到第一行圖像時,調(diào)用 setPosition() 方法將內(nèi)存窗口設(shè)置為與解碼圖像相同的大小。 它沒有在演示代碼中以顯示為中心,但可以。 水平定位只能在字節(jié)邊界上,以避免必須移動和重新組合每行的所有字節(jié)。 TIFF 解碼器生成的像素恰好與電子紙存儲器(左側(cè)的 MSB)的方向相同; 這是 1-bpp 設(shè)備和文件最常見的字節(jié)方向。 由于電子紙顏色為黑色=0,白色=1,TIFF G4 顏色為黑色=1,白色=0,因此可以在反轉(zhuǎn)后將它們寫入顯示器。 一旦圖像完成解碼,就會向電子紙發(fā)送一個完整的更新命令。 對于 Arduino Uno 和其他 AVR 目標(biāo),我將 TIFF 解碼器緩沖區(qū)大小減少到總共 1K RAM。 在這種顯示情況下,最終輸出行緩沖區(qū)只需 16 字節(jié)(128 像素)。


包起來

我希望所有這些努力和代碼能夠?yàn)榫哂蟹浅P?RAM 的微控制器提供新的用例,使其能夠獨(dú)立地與電子紙顯示器一起工作,而不僅僅是接收其他計算機(jī)上生成的圖形。 我的 CCITT G4 圖像解碼的 Arduino Uno 示例旨在打破關(guān)于 8 位 CPU 上的一點(diǎn)點(diǎn) RAM 可能實(shí)現(xiàn)的假設(shè)。 我很想聽聽這些方面的新想法和用例。

https://github.com/bitbank2/TIFF_G4



轉(zhuǎn)LarryBank-在資源受限的 MCU 上使用電子紙/技術(shù)向博文/嵌入式/物聯(lián)網(wǎng)的評論 (共 條)

分享到微博請遵守國家法律
中宁县| 通榆县| 泸州市| 吉木乃县| 赞皇县| 赣州市| 密山市| 汶川县| 凌源市| 芜湖市| 连山| 札达县| 宜阳县| 福安市| 浦北县| 西乌珠穆沁旗| 曲水县| 岚皋县| 革吉县| 万山特区| 恩施市| 廊坊市| 教育| 彰化市| 安仁县| 普格县| 福泉市| 四会市| 南充市| 北安市| 淮滨县| 资源县| 平凉市| 三都| 肇州县| 辽宁省| 桦南县| 康马县| 武义县| 武定县| 布尔津县|