作者: Bird
顯示裝置是各種電子產品或 maker 專案中很常需要,也很常使用的零件。拜現代半導體技術進步之賜,我們現在有許多各式各樣的顯示裝置可以使用:小的、大的、黑白的、彩色的、只能顯示文字的、可以繪圖的等,這一次我們要來聊聊一種非常容易使用的小型 OLED 顯示裝置。
簡易性顯示裝置的老祖宗 #
年紀稍長的讀者可能對這樣的顯示裝置很熟悉:

(圖片來源:Bird 提供 )
這是一種只能顯示文字的點矩陣式 LCD 裝置,它有各種規格、尺寸、以及字數。它每一個字元通常由 5×8 個點構成,有些比較少見的產品會做到 5×10 點;字數部分,常見的有 16×2、8×2、16×4、32×2 等,16×2 的意思就是它可以顯示兩行字元,每行 16 個;顏色部分,由於液晶顯示器可以根據偏光膜的極化方向調整光線穿透的極性,因此除了常見的白底黑字外,也可以看到深色底亮字的產品。

(圖片來源:Bird 提供)
這就是一個典型的 8×2 亮字型的點矩陣型 LCD 亮起來的樣子。5×7 或 5×8 個點大概是能顯示英文子母最小的點數,因此可以看得出來這種裝置能顯示的字元其實相當粗糙,也沒什麼字型可言,它就只是用來顯示讓我們看得懂的資訊。
但它也陪伴了我們近 40 年之久。
40 年?沒錯,這種簡易型的點矩陣文字型 LCD 裝置,在 1980 年代就有了,而且它從那個時候起就長這個樣子,幾乎沒有變。
這種 LCD 裝置用的控制器,是一顆叫 HD44780 的 IC,這是日本的 Hitachi 半導體公司在 80 年代推出的一顆 LCD 控制晶片。這顆晶片設計得很彈性,它可以單顆使用,也可以搭配驅動 IC 使用。單顆 HD44780 可以直接驅動 16 個字元的 LCD,而如果搭配額外的驅動 IC,則可以直接控制 80 個字元。
由於原廠 Hitachi 是日本公司,HD44780 裡面儲存的字型除了英文字母大小寫、標準 ASCII 的符號外,還有日文的片假名字母,早期很多日本家電都依賴它顯示日文假名字母呢!

使用Arduino Uno驅動HD44780 LCD(Source)
HD44780 與 CPU 之間的界面是 80 年代很典型的 Motorola-like 界面:除了 8-bit 的 data bus 之外,還有三個訊號: R/W(控制讀寫)、EN(enable)、RS(用來選擇讀寫的對象是 register 或 memory)。
這個界面原來是設計可以直接連接上如 Motorola 6809 的 CPU bus,但也有許多設計會使用 GPIO 來控制它,這麼一來就會需要 8+3 共 11 支 GPIO 才能控制。HD44780 很貼心的設計了另一種 4-bit 存取的模式,data bus 只需要 4 支就可以工作,如此一來當我們用 GPIO 控制它時就只需要 3+4 = 7 支 GPIO。
隨著 Hitachi 的半導體部門併入瑞薩電子(Renesas Electronics),Hitachi 原廠的 HD44780 也走入歷史,但由於 HD44780 在市場上的高佔有率,有大量的裝置在使用它,時至今日仍有許多廠商在生產與它相容的晶片與 LCD 產品。
我相信很多讀者,第一次在 8051 或 PIC 上面用 LCD 顯示出數字、字母,用的都是 HD44780 的 LCD,可以說 HD44780 與它所控制的 LCD 在簡易型的顯示裝置市場上扮演了重要的角色,完整地代表了一個時代。
直到 SSD1306 的出現。
長江後浪推前浪 #
蛤?講了半天,原來前面只是在說歷史?呃… 對,SSD1306 以及它所驅動的 OLED 顯示裝置才是我們這次的主角。讀者們先別急著翻桌,正所謂鑑古知今,你得知道過去三四十年我們用的東西長什麼樣子,才能了解到現今我們處在一個什麼樣的時代。
我們這次要介紹的顯示裝置是 OLED。
OLED 和 LCD 雖然都有個 D,但這兩個 D 的意思完全不一樣。OLED 是 Organic Light-emitting Diode,意思是「有機發光二極體」,它指的是 OLED 顯示裝置中,每個 pixel 所使用的技術;LCD 則是 liquid-crystal display,也就是「液晶顯示器」的意思,它的「D」是 display 顯示器的意思,因此當你說 「LCD」時就已經包含了顯示器的意思,如果你說「LCD 顯示器」那就顯得外行了。
LCD 是利用液晶分子在電場下會偏轉而改變光線極化方向的原理,搭配背光光源以及偏光片,來控制顯示裝置中每一個 pixel 的明暗。早期如 HD44780 這種小尺寸、低解析度的 LCD 設計都是讓 IC 直接產生電場驅動液晶板中的 pixel 的液晶分子,但隨著液晶面板的尺寸越來越大、速度要求越來越高,用外部電路直接驅動液晶分子受到諸多限制,因此有了 TFT 的技術。
TFT 是薄膜電晶體(thin-flim transistor),它是利用類似半導體製程的技術,在液晶面板的玻璃上長出電晶體,讓每一個 pixel 都能有自己的電晶體,就地在 pixel 上可以放大訊號、產生夠強的電場去驅動 pixel。液晶面板的基材是玻璃,無法像半導體晶片的基材耐受半導體製程的高溫,因此 TFT 受到製程溫度的限制,它構成電晶體的矽是非晶矽(amorphous silicon),先天上特性就不如半導體製程所做出來的單晶矽電晶體,但對於液晶面板的控制和驅動來說仍然是一大進步。

TFT LCD堆疊技術架構(Source)
現今小尺寸液晶面板還有用雷射光逐一對電晶體加熱退火的雷射退火(laser anneling)技術,讓薄膜電晶體的矽在加熱並冷卻之後結晶形成多晶矽(polysilicon),來進一步改善它的特性。
由於液晶分子只能決定光線要不要穿過、穿過多少,它自己不會發光,因此會亮的 LCD 都一定另外有個背光源。早期的液晶電視和液晶電腦螢幕多半使用冷陰極螢光管(CCFL)作爲背光源,但隨著 LED 的技術進步、價格下降,現在的 LCD 幾乎都使用 LED 做爲背光源。市面上所謂的「LED 電視」,其實應該是「使用 LED 背光源的 LCD 電視」。
但 OLED 就不一樣了。OLED 顯示器的每一個 pixel 裡都有一個小小的發光二極體,當你讓它流過足夠大的電流時,它就會發光,發光的顏色和二極體的材料有關,而發光的亮度則與流過它的電流大小有關。
經過了許多年的發展,OLED 克服了諸多技術困難,終於也慢慢走進電子產品的世界中。Apple 從 iPhone X 開始使用 OLED 顯示器,而自家就有 OLED 顯示器生產能力的三星則在更早就將 OLED 顯示器導入手機中。我們今天要介紹的主角,也是這個時代科技進步下的產物。
SSD1306 驅動的小型 OLED 顯示器 #
SSD1306 是香港晶門科技(Solomon Systech)所設計的小型 OLED 顯示器驅動控制器,它可以控制最大 128×64 個 pixel 的單色 OLED 面板,內建產生 OLED 所需驅動電壓的 charge pump 電路,以及內建記憶顯示狀態的 frame buffer 記憶體。它有傳統的 6800-like CPU memory bus 界面,也有 I2C(以下寫作 I2C) 和 SPI 界面。由於 SSD1306 的整合度高、功能完整,有非常多的小型 OLED 顯示器廠商使用它製造 OLED 顯示器產品,因此它可以說是這個時代的 HD44780。
現在我們可以輕易在市場上買到像這樣的 OLED 顯示器模組:

左邊是 0.96 吋的 128×64 單色 OLED 顯示器模組,右邊則是比較小的 0.91 吋 128×32 顯示器模組,兩者都使用 SSD1306 驅動(圖片來源:Bird 提供)
SSD1306 同時支援 I2C 和 SPI 界面,左邊的模組支援 SPI,因此引出的接腳數比較多;右邊的模組只支援 I2C,因此連電源總共只拉了 4 支腳出來。
這個兩個模組的背面長這樣:

(圖片來源:Bird 提供)
SSD1306 的 I2C 和 SPI 界面有些接腳是共用的,而用什麼模式則是由電阻選擇。左邊的模組出廠時是預設 SPI 四線式模式,但也可以透過修改電阻的配置改爲 SPI 三線式或 I2C 模式,至於右邊的模組,它只拉了 I2C 模式需要的訊號出來,就沒辦法用 SPI 了。
咦,這板子背面看起來沒有任何 IC 呀?除了電阻電容之外,只看到一顆三隻腳像電晶體的零件,那我們講了這麼久的 SSD1306 在哪裡呢?
像 SSD1306 這種顯示器驅動控制 IC,接腳數量都非常多,光是控制 128×64 的 OLED 矩陣就需要 128 + 64 = 192 支驅動接腳,這還不包括界面、電源和其它雜七雜八的接腳。事實上 SSD1306 總共有 281 支接腳,如果用一般的 IC 封裝方式再將它用 SMT 焊在電路板上,這個模組的體積大概會變 10 倍大,因此顯示器驅動控制 IC 多半都是以裸晶粒加上黃金凸塊(gold bump)的形式出貨給顯示器面板的廠商。
面板廠商在製作面板模組時,使用 COG(chip-on-glass)的技術,將 SSD1306 直接安裝在 OLED 的玻璃基板上,與 OLED 的電路連接,如果要引出來的電源、界面等訊號,就要再用軟性電路板(flex)從玻璃基板上接出來。
事實上這種帶有 PCB 和連接器的模組是廠商爲了方便使用者連接 Arduino 等快速開發平台而設計的,真正的顯示器模組商品長這個樣子:

紅線框起來的地方,就是 SSD1306 COG 晶片在玻璃基板上的位置。(圖片來源:Bird 提供)
不過爲了方便與 Arduino 或 NodeMCU 等快速開發平台連接、做實驗,我們會先用前面講的,帶有電路板的模組進行實驗,最後再告訴讀者如何直接使用不帶電路板的模組。
小結 #
這次我們從曾經縱橫江湖近 40 年、使用 HD44780 的點矩陣式 LCD 聊起,並介紹了使用當今 OLED 製程製作、用 SSD1306 OLED 控制 IC 驅動的小型 OLED 面板。下一回我們就要告訴讀者,如何將它連上 Arduino、Node MCU 等快速開發平台,並用軟體驅動它來顯示你想要的內容。
(責任編輯:賴佩萱)