Futaba VFD - Basic Explanation (Part 2)
系列索引
運作流程
整個流程可以分成好幾個步驟:
- Power on (Reset): 開機並重設驅動 IC 的狀態
- Set the display timing: 告訴驅動 IC 說這個 VFD 的組態
- Set the URAM: (此型號 VFD 不支援)
- Set the dimming data: 設定 VFD 的亮度
- Transfer the display data: 把資料寫入到 DCRAM, CGRAM or ADRAM 中指定位置
- Turn on VFD
- 進入迴圈:如有新資料,就把資料寫入到 DCRAM, CGRAM or ADRAM 中指定位置,VFD 會反映顯示內容
訊號協定
Arduino 與 VFD 之 Driver IC 的溝通基本上是走 SPI,把資料當作成一系列的 0 與 1 訊號, 用三個訊號線進行控制與傳輸。
- CS: LOW 狀態時開始傳輸,HIGH 狀態時結束傳輸
- CP (CLK): 用來同步,定義位元訊號的區間
- DA (SDI): 用來傳出位元訊號
基本上資料傳輸的程序會長這樣:
CS = LOW
開始傳輸CP = LOW
DA
設定為要傳輸的位元CP = HIGH
的瞬間代表 DA 訊號可以給 IC 接收 (trigger on rising edge)- 反覆步驟 2, 3, 4 直到資料傳輸完畢
CS = HIGH
結束傳輸
Power On
初始化程序基本上是由 RST
與 VDD
(EN
) 主導,把驅動 IC 的狀態重設到初始狀態:
從這張圖可以看到,初始化程序基本上會是這樣:
VDD = H
,RST = L
- 等待一段時間(資料表建議 10 us 以上)
- 然後
RST = H
,而維持VDD = H
- 等待一段時間(資料表建議 2 ms 以上)
- 這時 driver IC 會是有定義的狀態了 (defined state)
這也對應了上次所跑的範例程式的初始化部分, 但是稍微不同的是沒有把步驟 2 所提出的延遲時間考慮進去, 但我猜可以 work 的原因是因為 Arduino 程式碼的運作速度沒這麼快, 所以剛好可以滿足 10 us 時間差之要求。
Set the Display Timing
這個步驟是用來讓驅動 IC 了解 VFD 的組態(有多少個 glyph 顯示單元)。
- 開始傳輸 (
CS = LOW
) - 傳送
0xE0
- 傳送
0x07
(根據資料表的定義,既然此 VFD 有 8 個單元,就填寫0x07
) - 結束傳輸 (
CS = HIGH
)
Set the Diming Data
這個就是調整 VFD 亮度了,以 0 ~ 255 表示。
- 開始傳輸 (
CS = LOW
) - 傳送
0xE4
- 傳送亮度數值,可以是 0 ~ 255 (實際上有效範圍只有 0 ~ 240)
- 結束傳輸 (
CS = HIGH
)
Transfer the Display Data - DCRAM
在範例程式中,透過改變 DCRAM 的內容,讓 VFD 可以從 CGRAM/CGROM 讀取 glyph 並顯示出來。 也就是說,DCRAM 就是一個索引表格,會紀錄要顯示的字元, 而字元對應的 glyph 就紀錄在 CGRAM/CGROM 中。
用程式語言描述:
# 設定 DCRAM
i = 為 VFD 上第幾個 glyph 顯示單元
DCRAM[i] = 要畫出來的 character code (可以是 ASCII code)
# VFD 內部顯示
glyph = CGROM[DCRAM[i]]
draw(i, glyph)
- 開始傳輸 (
CS = LOW
) - 傳送
0x20 | ADDR
其中 ADDR 就是 DCRAM 的指定起始位址(0x00
~0x1F
) - 傳送要顯示的 8-bit 字元(
0x00
~0x07
為 CGRAM 的位址,0x08
~0xFF
為 CGROM 的位址) - 重複步驟 3 直到要畫出的字元都送出去了(每次都會做
ADDR += 1
) - 結束傳輸 (
CS = HIGH
)
Turn on VFD
這個就是把 VFD 點亮,把設定好的字元顯示出來。 在資料表中,這個狀態定義為 normal operation。
- 開始傳輸 (
CS = LOW
) - 傳送
0xE8
- 結束傳輸 (
CS = HIGH
)
總結
總而言之,範例程式的運作就基本上是:
- 設定 VFD 的組態
- 寫入 Driver IC 的 DCRAM,改變顯示內容
但還有幾個項目還沒有研究:
- 用 CGRAM 畫出自定字元 glyph,然後用 DCRAM 索引讀取並畫出來
- 用 ADRAM 立刻畫出自訂字元 glyph
- URAM