Savrin, LCD 小螢幕, 用 Arduino 測試


https://wp.me/ph3BR-2C6

 

不知道車上的線路是如何連結的, 自己用MCU控制器驅動, 測試成功.

LC74584, SANYO CCB BUS, 驅動很簡單.

CCB BUS 的重點,

1) CE 為 LOW, DI 讀取 8 bit 地址 (三洋定義 LC7458x = 0x42), CL 上升沿 DI 資料有效

2) CE 為 HIGH, DI 連續讀取 7 BYTE 資料, CL 上升沿 DI 資料有效

3) CE 為 LOW, 結束一個 PACKET

4) 重複以上 3次, 共4個PACKET, BIT D1 到 D164, 每個 BIT 代表一個 SEGMENT, 0 滅, 1顯示

記得以前實驗過 7-SEG LCD 筆畫顯現, 每個筆畫就是一個電容, https://goo.gl/5KhEgZ

CCB 控制的LCD, 比那個更容易, 抄人家的 Library, 改一下就可以

源碼有詳細資料及解釋, 可以下載, https://github.com/xiaolaba/Savrin_LC75854E

首次驅動, 顯示所有筆畫, 應該是16-SEGMENT 的設計.

 

測試片段, 閃五次, 然後筆劃逐一關掉, 從 D1 數到 D123, 重複.

 

如果要顯示數字或英文字母, 再建一個對照表就可以, 沒有繼續實驗, 除了 X-I-L-O-A-b 這幾個英文字以外, 試了一下看看硬碼的效果, 果然可以顯示幾個簡單的英文字母, 有些醜怪, 但還可以. 整個螢幕有8組框住的米字符號, D9-D24 (16bit, 2 BYTE) 負責左邊第一個米字符的各個筆劃, 如此類推向右邊發展, 適當顯示部分的筆劃, 這樣就可以顯示 XIAOLAbA, 那個小寫的最特別.

xiaolaba

 

怎樣反向工程用這個 SAVRIN LCD 顯示 XIAOLAbA 那幾個看起來像英文字母的符號呢? 首先, 拆開 LCD 模組以後, 看到 IC 編號 LC75854, 找到datasheet並且存檔, (https://github.com/xiaolaba/Savrin_LC75854E/tree/master/datasheet) 還有CCB定義的資料表, 抄來的. 看明白了它寫啥, 簡單來說 LC75854 接收一串特定的資料, 就會把 LCD 對應的筆劃打開或或關閉, 看起來就會像一串子母.

繼續回想, 寫筆記, 按照DATASHEET 所描述, LC75854 可以控制164筆劃, 對應筆劃的編號 D1 – D164, 接收4組數據, 每組開頭0x42 (CCB address), 每組結尾分別為0x00 – 0x03,  每組包含"任意的" 7 BYTE 資料, 這樣它就會顯示164個筆劃其中的一些東西了. 詳細看以下圖像化表格, 容易理解.

xiaolaba_LC75854_CCB_message程序大概這樣


// CCB control message buffer
// read LC75854 datasheet for Serial Data Input, 7 bytes x 4 packet
uint8_t CCB_buffer[]={

0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x02,
0x00,0x00,0x00,0x00,0x00,0x00,0x03};

 

筆劃代號和字母表格顯示的關係 –

這裡只關心 8 個可以顯示 “XIAOLABA" 的米字位置, 姑且稱為 digit1 – digit8. 他們對應的筆劃編號是 D9 開始, D136結束, 一共128個筆劃, 所以每個英文字母可用 16 筆劃組成. 這是另外一個個表格,  例如, digit1 的筆劃編號是 D9 – D24, 怎樣顯示已個字母b 呢? 先看筆劃的排列順序, 用代號a-m表示, 畫個表格, 再看需要顯示的筆劃編號, 把他們寫個 1, 留白的筆劃編號則寫個0, 這樣可以得到餵給 D9 – D24 兩個 BYTE, 0x10, 0x23, 稱他們為 char2, char3, 只要把它交給LC75854, SAVRIN LCD 顯示屏就會給你看到字母 “b". 自己建立字母顯示的過程大概就這樣, 留意16個筆劃的位置並非全部用到, 只用了13個.

letter_b_mapping程序大概這樣


// predefined table for SAVRIN LCD mapping, letters "XIAOLAbA"
uint8_t data[21] = {
0xff,
0x05,0x50, //X, digit 1
0x10,0xA0, //I, digit 2
0x62,0x87, //A, digit 3
0x70,0x85, //O, digit 4
0x70,0x00, //L, digit 5
0x62,0x87, //A, digit 6
0x10,0x23, //b, digit 7
0x62,0x87, //A, digit 8
0x0 };

 

用硬碼寫死那幾個英文字母的方法, 立刻可以測試到效果, 很好, 但是在應用上就受限, 每次換字母, 或換別的字, 例如想看 “APPLE", 就必須重複編排. 差旅途中, 有坐車的時間, 就拿來看看當成玩具和腦力訓練, 看看有沒有更好的方法, 實驗這樣寫, 看起來直觀很多, 讀起來也容易明白, 是較好的方式. 編譯也順利完成. 所以完整定義 0-9, A-Z 都很容易.


#define A 0x62, 0x87
#define B 0x10, 0x23
#define C 0x70, 0x80
#define D 0x32, 0x20
#define E 0x72, 0x82
#define F 0x62, 0x82
#define G 0x70, 0x83
#define H 0x62, 0x07

// predefined table for SAVRIN LCD mapping, letters "XIAOLAbA"
uint8_t data[21] = { 0xff, A, B, C, D, E, F, G, H, 0x0};

 

這個寫碼改進的實驗確認了行得通後, 當然是藉助一下EXCEL 以完整 0-9, A-Z 的編碼, 沒有理由全手工. 用EXCEL 建立一個表格, 利用 BIN2HEX 的函數, 加上定義好的語句, 填入每個 segment BIT 的資訊, 就會全自動生出 C code 和兩個 BYTE對應要顯示的0-9, A-Z. 直接把 EXCEL 裡的 C code 複製貼上就可以完成寫碼, 有了工具幫助, 自然就可隨心所欲建立自己的字母或符號, 改錯也變得容易.

 

比對以下, 兩種不同的寫法, 直觀容易理解的就是更好的方法.


// predefined table for SAVRIN LCD mapping, letters "XIAOLAbA"

// method 1
uint8_t data[21] = { 0xff, X,I,A,O,L,A,b,A, 0x0 };

// method 2
/*
uint8_t data[21] = {
0xff,
0x05,0x50, //X, digit 1
0x10,0xA0, //I, digit 2
0x62,0x87, //A, digit 3
0x70,0x85, //O, digit 4
0x70,0x00, //L, digit 5
0x62,0x87, //A, digit 6
0x10,0x23, //b, digit 7
0x62,0x87, //A, digit 8
0x0 };
*/

這樣就完成整個字母顯示的表格, 包含 0-9, A-Z. 也包括那些特殊圖案和小8字的個個筆劃序號. 完整的源碼片段可以看 PDF. SAVRIN_LCD_CHAR_TABLE.pdf

 

完整的 LCD 筆劃對應表格, 這個是 SAVRIN 車用的 LCD, 反向工程算是完成了, 姑且稱為 [ 字母表格 ], 詳細如下, LC75854 按照這個表的資訊控制顯示每個筆劃. 純粹依照記憶筆記, 雖然沒有大問題, 但是也可能有些小的錯誤. 按照 外殼的刻字 NEW UEN TAI, 估計是 [新源泰工業股份有限公司] 出品.

 

 

 

字母表格和CCB控制表格的關係 –

有了字母表格, 還是需要翻譯成為 SAVRIN LCD control message 才可以實驗. 看圖就比較容理解, 自己組合了兩個 BYTE, 代表英文字母b, 稱為 char2, char3, 內容分別為 0x10, 0x23, 把它放到CCB表格裡面, 就可以. 需要注意, D40-D44 屬於char6, D45-D48 也屬於char6, D49-D53屬於char7, 但是必須開始分家才能對齊放進 CCB 控制表格, 這個事情出現跟在 char5 後面的每一個 char, 例如,

(D41, D42, D43, D44, 0, 0, 0, 0) = char6/0x00

(D45, D46, D47, D48, D49, D50, D51, D52, D53) = char6/7

char_ccb_mapping

 

當然這種分家的動作不可以手工餅乾, 必須利用電腦程序這種方式完成, 例如,
prepare_CCB_message

 

以前拍到的原車音響故障的樣子, https://goo.gl/gOItF5

看來要重現它顯示那個凝固的故障畫面的樣子還真有難度, 巧合才可.

可以把這個音響開動, 也可以單獨測試LCD小螢幕, 可仍然不知道如何連接他們在一起顯示音響的功能, 所以只能瞎調音響, 無法度.

原車的樣子,

 

-END

 

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.