David Lin

David Lin

一個軟體工程師的隨意筆記

23 May 2021

Futaba VFD - Basic Explanation (Part 2)

系列索引

  1. Part 1
  2. Part 2
  3. Part 3

運作流程

Flowchart

整個流程可以分成好幾個步驟:

  1. Power on (Reset): 開機並重設驅動 IC 的狀態
  2. Set the display timing: 告訴驅動 IC 說這個 VFD 的組態
  3. Set the URAM: (此型號 VFD 不支援)
  4. Set the dimming data: 設定 VFD 的亮度
  5. Transfer the display data: 把資料寫入到 DCRAM, CGRAM or ADRAM 中指定位置
  6. Turn on VFD
  7. 進入迴圈:如有新資料,就把資料寫入到 DCRAM, CGRAM or ADRAM 中指定位置,VFD 會反映顯示內容

訊號協定

Arduino 與 VFD 之 Driver IC 的溝通基本上是走 SPI,把資料當作成一系列的 0 與 1 訊號, 用三個訊號線進行控制與傳輸。

serial data transfer

  • CS: LOW 狀態時開始傳輸,HIGH 狀態時結束傳輸
  • CP (CLK): 用來同步,定義位元訊號的區間
  • DA (SDI): 用來傳出位元訊號

基本上資料傳輸的程序會長這樣:

  1. CS = LOW 開始傳輸
  2. CP = LOW
  3. DA 設定為要傳輸的位元
  4. CP = HIGH 的瞬間代表 DA 訊號可以給 IC 接收 (trigger on rising edge)
  5. 反覆步驟 2, 3, 4 直到資料傳輸完畢
  6. CS = HIGH 結束傳輸

Power On

初始化程序基本上是由 RSTVDD (EN) 主導,把驅動 IC 的狀態重設到初始狀態:

Reset Process

從這張圖可以看到,初始化程序基本上會是這樣:

  1. VDD = H, RST = L
  2. 等待一段時間(資料表建議 10 us 以上)
  3. 然後 RST = H ,而維持 VDD = H
  4. 等待一段時間(資料表建議 2 ms 以上)
  5. 這時 driver IC 會是有定義的狀態了 (defined state)

這也對應了上次所跑的範例程式的初始化部分, 但是稍微不同的是沒有把步驟 2 所提出的延遲時間考慮進去, 但我猜可以 work 的原因是因為 Arduino 程式碼的運作速度沒這麼快, 所以剛好可以滿足 10 us 時間差之要求。

Set the Display Timing

這個步驟是用來讓驅動 IC 了解 VFD 的組態(有多少個 glyph 顯示單元)。

  1. 開始傳輸 (CS = LOW)
  2. 傳送 0xE0
  3. 傳送 0x07 (根據資料表的定義,既然此 VFD 有 8 個單元,就填寫 0x07)
  4. 結束傳輸 (CS = HIGH)

Set the Diming Data

這個就是調整 VFD 亮度了,以 0 ~ 255 表示。

  1. 開始傳輸 (CS = LOW)
  2. 傳送 0xE4
  3. 傳送亮度數值,可以是 0 ~ 255 (實際上有效範圍只有 0 ~ 240)
  4. 結束傳輸 (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)
  1. 開始傳輸 (CS = LOW)
  2. 傳送 0x20 | ADDR 其中 ADDR 就是 DCRAM 的指定起始位址(0x00 ~ 0x1F
  3. 傳送要顯示的 8-bit 字元(0x00 ~ 0x07 為 CGRAM 的位址,0x08 ~ 0xFF 為 CGROM 的位址)
  4. 重複步驟 3 直到要畫出的字元都送出去了(每次都會做 ADDR += 1
  5. 結束傳輸 (CS = HIGH)

Turn on VFD

這個就是把 VFD 點亮,把設定好的字元顯示出來。 在資料表中,這個狀態定義為 normal operation。

  1. 開始傳輸 (CS = LOW)
  2. 傳送 0xE8
  3. 結束傳輸 (CS = HIGH)

總結

總而言之,範例程式的運作就基本上是:

  1. 設定 VFD 的組態
  2. 寫入 Driver IC 的 DCRAM,改變顯示內容

但還有幾個項目還沒有研究:

  1. 用 CGRAM 畫出自定字元 glyph,然後用 DCRAM 索引讀取並畫出來
  2. 用 ADRAM 立刻畫出自訂字元 glyph
  3. URAM
comments powered by Disqus