2009年1月9日 星期五

控制繪圖型 LCD

本文在 2009/01/09 19:20 發表於 Yahoo!奇摩部落格
因Yahoo!奇摩部落格將於2013年12月26日終止服務故遷移至此


先前我寫了一篇控制文字型 LCD 的文章 "用 8051 控制文字 LCD"


這是最簡單的 LCD 模組
畫面被分割成數個方塊區域
專門用來顯示文字
然而, 有些時候我們會需要 "圖文並茂"
此時這種就不適用了
於是, 我們會需要可以繪圖的 LCD

像這種XD


這類 LCD 全部由點組成
是一個龐大的二維點陣列
控制方法可大有學問
要簡單可以很簡單, 可以像文字型 LCD 那樣填資料就完成
要難也可以很難, 需要精確考慮時間問題, 需要很多額外的電路
全看買到的 LCD 是什麼
這類 LCD 種類很多, 用途也都不同
不像文字型的那麼樣的一致:你不太容易買到不是用填資料方式控制的文字型 LCD
文字型的 LCD 用文字數來區隔尺寸
常見的就 16x1 (可顯示一行文字,每行 16 字元), 16x2, 16x4, 20x1, 20x2, 20x4
大片的就 40x1, 40x2, 40x4 等
大概就這些, 規格都很一致
然而繪圖型的就不是這樣了
在操控繪圖型 LCD 之前一定要有 LCD 基本知識
以及了解買到的 LCD 模組給了你多少東西

LCD 基本知識這裡有:

Intro to Liquid Crystal Displays
Driving Your Display

重點節錄:


如上圖, LCD 裡面是兩片玻璃中間夾液晶
上面有透明的導電線路(特殊材質), 下面也有
上面的叫做 Segment
下面的叫做 Common
會這樣稱呼我想有可能是因為簡易的 LCD 下面的區域是一整片
顯示圖形由上面的 Segment 區域決定
因此才會有這兩不同名稱區別
對於複雜圖形的 LCD 來說往往不會只有一個 Common, 也是好幾段
一點也不 "Common" XD
不過這種名詞上的問題就不重要了
沒有必要對於這種用字問題鑽牛角尖 (不要像某人...)
只要知道一件事情:

LCD 上的圖形是否被點亮 (或是被遮蔽不透光)
由上下兩層 Segment 和 Common 之間的電壓差決定

該網頁上還有提到關於 LCD 使用的注意事項
基本的像是不要摔, 不要高溫等就不紀錄了
其中有兩項比較重要:

1. 玻璃表面不要有水, 雖然玻璃不怕水, 但表面的塗料會變質
2. 禁止對液晶供應直流電 (Segment/Common之間的電, 不是輸入電源)

第二項是控制 LCD 時必須知道的常識
實驗時一旦發現控制指令不正確
確認後最好即刻關閉 LCD 電源
不要一邊看畫面一邊想怎麼解決
等到發現畫面開始變淡就來不及了
這我有親自實驗過XD (代價:300元;消耗掉的時間:Priceless)

接著介紹一下繪圖型 LCD 的組成構造
如下圖:


圖取自 EK7011TCA-1402 datasheet

上圖右上區域那堆方格代表 LCD 的像素
LCD 左側有 Common Driver, 下方有 Segment Driver
繪圖的方法是先選取一列像素, 也就是由 Common Driver 選取
接著由左而右依序填入資料, 由 Segment Driver 填入 8-bit 資料
填完一整列後接著就是下一列, Common Driver 會往下走一步
此時上一列的像素就熄滅了, 同一時間只有一列會被啟動
像電視機那樣, 快速的掃描

Common 和 Segment Driver 要如何知道何時該走下一步呢?
就是由上圖下方那四個信號
D1~D8 為 Segment 資料, 也就是前面說的 8-bit 資料
依 LCD 實作設定會有不同, 目前看過的有 8-bit, 4-bit, 1-bit
1-bit 又可以稱做 "序列傳輸"
雖然說資料傳輸寬度有多種
但 Segment Driver 在接收資料時還是多為 8-bit
於是 XCK 就是用來通知 Segment Driver 來接收資料的信號
而 LP (懶OXD) 則是通知 Segment Driver 鎖住當前資料並放到 LCD 上
假設 8-bit 傳輸, 那就是先放資料 D1~D8
然後拉一下 XCK 和 LP 就可以寫上 LCD, 然後繼續下一筆
若是 4-bit 傳輸, 那就是先放 D1~D4
然後拉一下 XCK, 接著再放 D5~D8, 再拉一下 XCK
然後在拉起 LP, 把這兩個 4-bit 寫上 LCD
也就是分兩次把資料傳出去
那麼 1-bit 呢? 就是 8 次資料, 8 次 XCK, 1 次 LP

當一整列都寫完了後, 會有一個信號給 Common Driver 請它選取下一列
這個信號依各家實作會有所不同, 我不清楚這信號會叫什麼名稱
手邊有的 LCD 模組是不需要理它的, 內部自己會接好
應該會是由最右邊的 Segment Driver 拉出

如果只有上面這些信號, 我們會沒法確定現在到底畫到哪一列
於是要有一個起始信號, 那就是 YD
YD 拉起後, Common Driver 會選取第一列, 類似 reset 動作

一個 Common 或 Segment Driver 配置有固定數量的像素控制單元
因此若有效像素數量超過該 Driver 所持有的單元數量
那就會需要並聯使用
如上圖, 3 個 Common Driver 和 4 個 Segment Driver 驅動一片 LCD

由於整個 LCD 像素很多, 而它們又是掃描顯示
因此像素越多, 每個點停留的時間就越短
沒錯, 就是以前文章 "用 8051 控制 LED 矩陣字幕機" 的問題
除此之外, 如同 LED 點亮需要時間
液晶翻轉也是需要時間的
像素是沒法無上限的增加
有篇文件 (忘記在哪="=) 提到尤其面板越大
對於離 Common 或 Segment Driver 越遠的像素需要的時間就越長
等你翻轉成功可能就花掉很多時間了
然後又馬上掃下一列, 這一點的能量可能會太少以致於無法顯示
減慢掃描時間畫面又會閃爍, 會有許多這類時間上的問題
所以這類 LCD 是沒法做大片的
640x480 已經是相當驚人的尺寸了
為了解決這問題, 有一些策略被提出
像是分割顯示區域, 各自獨立掃描
或是 TFT 顯示器那樣, 每個像素有自己的狀態暫存
這些策略多是用來拉長這像素顯示有效的時間

為了改變液晶狀態, 多階電壓是需要的
上圖左上標示 V0~V4 的就是電壓電路
就黑白 LCD 來說常見是 5 階
V0 是最高或最低電壓, 依 LCD 設計而異
有些是正的, 例: +15, +17, +24
也有負的, 例: -13, -15
標示為 V0 或 VEE
然後由這 V0 下去分割 4 個準位使得
V0 > V1 > V2 > V3 > V4 > GND
或是負的則相反
V0 < V1 < V2 < V3 < V4 < GND
分割電路由電阻分壓後 OP 放大器放大
4 OP 的 OP 放大器為最佳選擇
這電壓交互操作, 使得液晶不會總是固定在某個狀態
有時正轉有時反轉, 避免液晶極化而無法控制
彩色 LCD 更有多達 255 階的電壓
透過精密翻轉液晶來產生色階, 而不是只開或關

以上就是 LCD 的操作程序
然而, 這些信號時序複雜
可是又有規律在
於是有一些廠商做 IC 來專門處理這問題
專用的 IC 下一篇繪詳述

所以整個 LCD 控制系統中會有這些元件

1. 液晶玻璃 (廢話XD)
2. Seg/Com Driver
3. 轉動液晶的升/降壓電路
4. 分壓電路
5. LCD Controller (專用 IC 或是帶控制硬體的 MCU)
6. 背光裝置 (可能是 LED, CCFL 燈管, 或是 EL) (Optional)
7. 背光驅動電路 (Optional)

買到 LCD 時必須確認到底上面有哪些東西
一般來說你不會買到一片玻璃XD
那種完全沒有 IC 的, 就算自己接也會死人
128x128 的繪圖型 LCD 佈線就佈到死了
像這樣:

這是 240x128 繪圖型 LCD 連接液晶玻璃那一面的線路
細部圖:

上圖下方金色密密麻麻的金手指就是連接 LCD 玻璃的線路
非常可怕XD
因此最窮酸的情況下常常會買到的是只安裝有 Seg/Com Driver 的 LCD
電源, 控制器, 分壓請自理
這幾乎是最專業的 LCD 了 (雖然還是比只有 LCD 玻璃弱一些XD)
有些則是分壓做好了, 沒電源和控制器
也有只是缺控制器的, 當然, 也有通通都有的
零件越多, 價錢當然就越貴, 但也越容易使用
咱們做 Embedded 就是要專業!要熱血!要有愛!(誤)
我弄了片只安裝有 Seg/Com Driver 和 分壓電路的 LCD 來玩

下一篇:透過 RAiO 的 RA8806 控制繪圖型 LCD

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。