首頁 > 評測 > PSoC6評測之三:享受閱讀——EInk模塊驅(qū)動原理與評測
PSoC6評測之三:享受閱讀——EInk模塊驅(qū)動原理與評測
- [導(dǎo)讀]
- 此次PSoC6先鋒套件的評測,其實(shí)還了作者自己的一個心愿,那就是對EInk屏幕的原理與驅(qū)動代碼進(jìn)行一個深入的分析.作為9年前就開始使用電紙書進(jìn)行閱讀的本文作者,一直沒有抽出時間與精力來對它的原理進(jìn)行了解確實(shí)有點(diǎn)小小遺憾.希望本文能給有需要的朋友能帶來一點(diǎn)知識和閱讀的興趣.Happy Reading and Happy Coding!
圖 4步更新
注意因?yàn)檫@樣的更新方式,所以每次顯示都需要保持上次的內(nèi)容以作取反之用.2步更新法就是省去了取反的過程,部分更新法則是直接顯示新內(nèi)容.本文所使用的顯示器是264x176的點(diǎn)陣,無灰階,則每個Frame的顯存為:
264 * 176 = 46464 Bits / 8 = 5808 Bytes
EPD更新顯示內(nèi)容方式的介紹應(yīng)該是建立在存儲在同一內(nèi)存的兩幀數(shù)據(jù),之前顯示內(nèi)容變更為新的顯示內(nèi)容(Previous Display-> New Dispaly)之上.所以需要兩個Frame,那么顯存就是10KB以上了,另外驅(qū)動的過程中也需要19KB以上的中間緩存,為什么需要兩個Frame呢?故此在選用主控芯片時需要考慮到顯存的尺寸.
EPD驅(qū)動流程圖如下:
圖 流程圖
EPD更新周期內(nèi)的信號控制圖:
圖 信號波形
使用PSoC 6驅(qū)動EInk
如上文所述,EInk的特點(diǎn)是保持顯示內(nèi)容不需要電源,但是更新顯示內(nèi)容時,不停地需要處理器來做控制與查詢.這種任務(wù)比較適合于低功耗的內(nèi)核,比如PSoC 6中的Cortex M0+內(nèi)核,此例中Cortex M4沒有用武之處,所以干脆就沒有使能.
頂層設(shè)計圖:
圖 頂層設(shè)計
包括SPI口為通信口,定時器用來產(chǎn)生1ms的定時Tick,其余幾個IO口為通用IO.
圖 SPI模組配置
圖 更新定時器配置
這個定時器的主要作用是提供1ms的Tick計時,實(shí)際上任何可以提供1ms的tick的定時器都可以用,比如內(nèi)核中的SysTick.這里只是為了展示如何配制通用定時器.
至于要顯示的資源與內(nèi)容,因?yàn)樵擄@示器的點(diǎn)陣與內(nèi)存的對應(yīng)是逐行對應(yīng),所以取模時使用橫行取模,字節(jié)正序即可. CYPRESS提供的EINK例程中支持兩種大小字體,分別是CY_EINK_FONT_8X12BLACK和CY_EINK_FONT_16X16BLACK.當(dāng)然更高階的玩家可以使用取模工具支持更多字體開發(fā).
圖 像素與顯存對應(yīng)圖
取模軟件與LCD/OLED的取模軟件無異,本文也不贅述.
初始化代碼:
void Pv_EINK_Init(void)
{
CY_EINK_EnableIO;
CY_EINK_BorderLow;
EINK_VccOff;
/* Initialize the PSoC SPI */
Cy_EINK_InitSPI();
/* Pull the chip select, reset and discharge pins to LOW */
CY_EINK_CsLow;
CY_EINK_RstLow;
CY_EINK_DischargeLow;
/* Initialize the E-INK display Timer */
Cy_EINK_TimerInit();
}
更新代碼:
void Cy_EINK_ShowFrame(uint8_t* prevFrame, uint8_t* newFrame,
cy_eink_update_t updateType, bool powerCycle)
{
/* If power cycle operation requested, turn on E-INK power */
if (powerCycle)
{
Cy_EINK_Power(true);
}
/* Partial update stage */
if (updateType == CY_EINK_PARTIAL)
{
/* Update the display with changes from previous frame */
Pv_EINK_PartialStageHandler(prevFrame, newFrame);
}
/* Full update stages */
else if ((updateType == CY_EINK_FULL_4STAGE) ||
(updateType == CY_EINK_FULL_2STAGE))
{
/* Stage 1: update the display with the inverted version of the previous
frame */
Pv_EINK_FullStageHandler(prevFrame, PV_EINK_STAGE1);
/* Additional stages that reduce ghosting for a 4 stage full update */
if (updateType == CY_EINK_FULL_4STAGE)
{
/* Stage 2: update the display with an all white frame */
- 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!
網(wǎng)友評論
- 聯(lián)系人:巧克力娃娃
- 郵箱:board@21ic.com
- 我要投稿
-
歡迎入駐,開放投稿
-
人均百萬?英偉達(dá)中國員工收入曝光! 2024-08-29
-
《黑神話:悟空》玩家硬盤升級攻略:提升游戲體驗(yàn),暢享3A大作 2024-08-29
-
數(shù)睿數(shù)據(jù)參加《系統(tǒng)與軟件工程 低代碼開發(fā)平臺通用技術(shù)要求》國家標(biāo)準(zhǔn)編制 2024-08-29
- NRF52810藍(lán)牙數(shù)字耳機(jī)找人定制
預(yù)算:¥30005天前
- 125KW模塊式PCS軟硬件外包開發(fā)
預(yù)算:¥1100000015小時前
- 12V汽車啟動電源項目BMS設(shè)計
預(yù)算:¥50000023小時前
- 數(shù)據(jù)可視化軟件 開發(fā)
預(yù)算:¥5000023小時前
- PLC項目調(diào)試修改
預(yù)算:¥100001天前
- 起動電機(jī)控制器開發(fā)
預(yù)算:¥1100001天前