中文 | English

【物聯網開發系列】直譯式顯示技術應用:以貪吃蛇為例(上篇)

  • 文/曹永忠、吳欣蓉、陳建宇

本篇是「物聯網開發」系列中「顯示技術技巧大探索」的第一篇。

想來場視覺饗宴?把 LED 排成矩陣吧!

一般 LED 顯示的原理,就是利用發光二極體;和普通的二極體一樣,發光二極體由半導體晶片組成。發光二極體中電流可以輕易地從 p 極(陽極)流向 n 極(陰極),而相反方向則不能。

兩種不同的載流子:電洞和電子,在不同的電極電壓作用下從電極流向 p、n 架構。當電洞和電子相遇而產生複合,電子會跌落到較低的能階,同時以光子的模式釋放出能量(光子即是我們常稱呼的光)。它所發射出的光,波長(顏色)是由組成 p、n 架構的半導體物料的禁帶能量決定。

發光二極體所用的材料都是直接帶隙型的,因此能量會以光子形式釋放,這些禁帶能量對應著近紅外線、可見光、或近紫外線波段的光能量。

但是單顆的 LED 發光二極體只能顯示單點的變化,對於視覺上圖形的顯示,顯然是不夠的,如下圖所示,我們將許多 LED 發光二極體用矩陣式方式排列,排成一個很大的區域:

圖 1:矩陣式 LED 顯示板。

若以 1024*768 個 LED 發光二極體排成一個矩陣方塊,由每一個 LED 發光二極體負責顯示單一個點的顯示,單色顯示用單色的 LED 發光二極體,彩色顯示用 RGB LED 發光二極體來顯示,這樣的應用原理就可以產生上圖顯示的效果,但是每一個 LED 發光二極體至少需要一個 I/O 點來控制,1024*768 個 LED 發光二極體需要 786432 個 I/O 點來控制,這麼多的控制訊號,恐怕只有超級電腦才有辦法來應付。

如何控制矩陣式 LED?

所以,如何控制這麼多點的 I/O 點?

舉例來說,如下圖所示,我們使用 8*18 顆 LED 發光二極體來顯示畫面,共有 8*18 顆 LED 排在一起,背後須要焊接 8*18*2 顆針腳,也就是會有 288 個焊接點。若透過 Arduino 開發板來控制閃爍,需要 144 個 I/O 接點,而 144 顆 LED 發光二極體耗電量非常驚人,並不是Arduino開發板可以支援的設計。

圖 2:8*18 發光二極體組合的 LED 陣列。

許多廠商設計出如下圖所示的矩陣式 LED,透過掃描式的方式來更新每一個 LED 發光點,透過人眼的視覺暫留 [1] 的特性與原理,所有的點在 1/10 秒內可以全部輪流亮過,對人眼的視覺來說,自動會組合成一個完整的畫面,所以利用這樣的原理來設計與控制矩陣式 LED,就可以拼湊出一個完整的畫面(曹永忠, 許智誠, & 蔡英德, 2014a, 2016)。

  • 註 [1]:視覺暫留原理或稱視覺暫留作用、或視覺暫留性。視覺暫留是指人類的眼睛,對看到的物體或移動物體,約有 1/10 秒時間延遲與殘留。如:開燈 1/10 秒之後,我們才能看見物體;若關燈,1/10 秒之後,我們原看到的物體才會消失。此種視覺延遲與殘留的現象,稱之視覺暫留。

圖 3:矩陣式 LED(LED Matrix)

但是矩陣式 LED 是製造廠商先行將 LED 置入如上圖所示的矩陣式 LED 顯示模組之中,並如下圖所示,將矩陣式 LED 所有的接腳整理成「列接腳」與「行接腳」。

如下圖(a)所示,只要先選定 R1~R7 之中任一腳,使其在低電位端,在透過程式將 C1~C5 的接腳,逐一設定要亮的點為高電位;第一階段的迴圈就是循序設定 R1~R7 的每一腳位為低電位,第二階段的迴圈就是設定 C1~C5 的每一腳位,逐一設定要亮的點為高電位,在兩層迴圈的程式架構下就可以完整的完成一個畫面的輸出。

圖 4:矩陣式 LED 接腳圖

負荷過大?驅動晶片來幫忙

雖然矩陣式 LED 已經大大降低單一 LED 發光二極體的大量 I/O 控制,但是對於 I/O 控制點有限的單晶片,仍是很大的負荷,所以許多廠商發展了專用控制矩陣式 LED 的驅動晶片,「MAX7219」就是其中一種。

它是 MAXIM 公司生產的整合的 IC,如圖 5 所示,MAX7219 是一個 24 接腳的 DIP 封裝或 DIP 包裝 [2],透過串列輸入/輸出共陰極顯示之驅動晶片(Driver IC)。它可以連接微處理器與 8 位數字的 7 段數字 LED 顯示,也可以連接條線圖顯示器,或者 64 個獨立的 LED。

MAX7219 包括一個 B 型 BCD 編碼器、多路掃描迴路,還有一個 8*8 的靜態 RAM 用來存儲每筆數據;它只需要一個外部暫存器用來設置各個 LED 的電流。

該晶片具有 10MHz 傳輸率的 Serial Peripheral interface(SPI)三線串列 [3] 介面,並可以和任何微處理器(包括單晶片)相連,只需一個外接電阻即可設置所有 LED 的電流。它的操作很簡單,單晶片只需透過 SPI 三線介面就可以將相關的指令寫入 MAX7219 的內部指令和資料暫存器,同時它還允許使用者選擇多種解碼方式和譯碼位元。

它同時還支援多片 7219 串聯方式,這樣單晶片就可以通過 3 根線(即串列資料線:Din、串列時鐘線:Clock和晶片:CS 擇線)控制更多的 7 段顯示器或 8*8 矩陣式 LED 顯示器。

  • 註 [2]:雙列直插封裝(dual in-line package) 也稱為 DIP 封裝或 DIP 包裝,簡稱為 DIP 或 DIL,是一種積體電路的封裝方式,積體電路的外形為長方形,在其兩側則有兩排平行的金屬接腳,稱為排針。DIP 包裝的元件可以焊接在印刷電路板電鍍的貫穿孔中,或是插入在 DIP 插座(socket)上。
  • 註 [3]: Motorola 首先在其 MC68HCXX 系列處理器上定義 Serial Peripheral interface(SPI)介面主要應用在 EEPROM、FLASH、實時時鐘、AD轉換器、還有數字信號處理器和數字信號解碼器之間。SPI,是一種高速的,全雙工,同步的通信,並且在晶片的接腳上只佔用四根線,節約了晶片的接腳,同時為 PCB 的佈局上節省空間,提供方便,正是出於這種簡單易用的特性,現在越來越多的晶片集成了這種通信協議。

圖 5:Max7219 接腳一覽圖。

這些驅動 IC 都是針對 8*8 矩陣式 LED 所設計出的驅動晶片,並可以串聯式的控制。透過這些機制,可以運用 8 * 8 矩陣式 LED 堆疊出更大的解析度,另一方面,這些晶片也提供許多韌體與 API 可以連接許多不同的單晶片開發板,讓整個設計更為簡潔方便。

後續

本篇是「物聯網開發」系列中「顯示技術技巧大探索」的第一篇「直譯式顯示技術應用:以貪吃蛇為例(上篇)」。對於點矩陣式的顯示幕,可用 GPIO 自行驅動或 MAX7219 等驅動晶片等方式驅動,然而,不同的單晶片開發版可能會有微處理機不同或周邊設計差異的現象。

基本上,面對系統變更或硬體升級等問題,都會產生這部分硬體設計與驅動程式的修改成本,對於今日快速的硬體變化,將產生更多潛在性的成本(曹永忠, 2016a, 2016b, 2016c, 2016d; 曹永忠, 吳佳駿, 許智誠, & 蔡英德, 2016; 曹永忠 et al., 2014a; 曹永忠, 許智誠, & 蔡英德, 2014b)。

基於這樣的問題,美商律美股份有限公司台灣分公司(Lumex Inc. Taiwan Branch)發展了 EZDISPLAY 的產品系列,這個系列產品包含有 OLED module、Dot matrix LED Display、Bi-Stable Display and Monochrome LCM 等等,並且在 Dot matrix LED Display 產品系列,更可以透過階層式控制模組,來達到大型顯示幕的需求。

本系列文章就是介紹這樣的顯示設計機制,運用這樣的機制,可以讓開發系統與顯示系統各自獨立開發,更顯示出開發的彈性。

後續筆者還會繼續發表「物聯網開發」系列的文章,在未來我們可以創造出更優質,更具未來性的物聯網(Internet of Thing:IOT)產品開發相關技術。

敬請期待更多的文章。

作者介紹

曹永忠(Yung-Chung Tsao):目前為自由作家,專注於軟體工程、軟體開發與設計、物件導向程式設計、物聯網系統開發、Arduino開發、嵌入式系統開發,商品攝影及人像攝影。長期投入資訊系統設計與開發、企業應用系統開發、軟體工程、物聯網系統開發、軟硬體技術整合等領域,並持續發表作品及相關專業著作。

Email:prgbruce@gmail.com/Line ID:dr.brucetsao/作者網頁臉書社群(Arduino.Taiwan)Github 網站Youtube

吳欣蓉(Jessie Wu):目前就讀於國立暨南國際大學電機工程學系,休閒時喜歡慢跑、打球、組裝模型、看美劇及日劇,騎車探索周遭的未知區域。曾對魔術方塊非常著迷,喜歡數學,亦對機器人、嵌入式系統、物聯網系統領域感興趣

Email:s104323018@mail1.ncnu.edu.tw

陳建宇(Chien-Yu Chen):目前就讀於國立暨南國際大學電機工程學系,休閒時喜歡打球、看美劇及日劇,騎車探索周遭的未知區域。曾對魔術方塊非常著迷,喜歡數學,亦對機器人、人工智慧、嵌入式系統、物聯網系統的領域感興趣。

Email:chenchienyu1104@gmail.com/Line ID:1996110406

參考文獻

  • 曹永忠. (2016a). 可擴充大小的顯示字幕的技術. 顯示技術. Retrieved from https://vmaker.tw/archives/3620
  • 曹永忠. (2016b). 智慧家庭:顯示字幕的技術. 智慧家庭. Retrieved from https://vmaker.tw/archives/3604
  • 曹永忠. (2016c). 顯示技術:視覺暫留的應用- 手搖字幕機開發軟體篇. 顯示技術. Retrieved from http://www.techbang.com/posts/42336-display-technologies-persistence-of-vision-hand-application-of-subtitle-software-article
  • 曹永忠. (2016d). 顯示技術:視覺暫留的應用- 手搖字幕機開發硬體篇. 顯示技術. Retrieved from http://www.techbang.com/posts/41880
  • 曹永忠, 吳佳駿, 許智誠, & 蔡英德. (2016). Ameba程式設計(顯示介面篇):Ameba RTL8195AM IOT Programming (Display Modules) (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.
  • 曹永忠, 許智誠, & 蔡英德. (2014a). Arduino 互動字幕機設計: The Interaction Design of a Led Display by Arduino Technology (初版 ed.). 台灣、彰化: 渥瑪數位有限公司.
  • 曹永忠, 許智誠, & 蔡英德. (2014b). Arduino 手搖字幕機開發:The Development of a Magic-led-display based on Persistence of Vision (初版 ed.). 台灣、彰化: 渥瑪數位有限公司.
  • 曹永忠, 許智誠, & 蔡英德. (2016). Arduino程式教學(顯示模組篇):Arduino Programming (Display Modules) (初版 ed.). 台湾、彰化: 渥瑪數位有限公司.

分享到社群

曹永忠

曹永忠 (Yung-Chung Tsao) ,目前為自由作家暨專業Maker,專研於軟體工程、軟體開發與設計、物件導向程式設計,商品攝影及人像攝影。長期投入創客運動、資訊系統設計與開發、企業應用系統開發、軟體工程、新產品開發管理、商品及人像攝影等領域,並持續發表作品及相關專業著作。 Email:prgbruce@gmail.com Line ID:dr.brucetsao 作者網站:https://www.cs.pu.edu.tw/~yctsao/ 臉書社群(Arduino.Taiwan):https://www.facebook.com/groups/Arduino.Taiwan/ Github網站:https://github.com/brucetsao/ Youtube:https://www.youtube.com/channel/UCcYG2yY_u0m1aotcA4hrRgQ