高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

文章為原作者折騰搗鼓之後創作,有一定參考價值,歡迎交流學習。全文共2193字,配圖共25張,預計閱讀需要5-10分鐘!

在北京大柳樹鬼市買的七寸DVD導航車機,20元。買回來接電源開機,發現卡在logo不動,奧迪Q5的。估計是第三方機器

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

找遍網絡沒找到這款機器的資料,當時買的時候以為是安卓系統,有視頻等輸入,結果發現竟然是wince系統,視頻輸入是lvds數字式的。

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

心想,翻車了唄!拆開看了一下, 還是比較複雜,主控紅色核心板,其他ic一大堆。

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

內部情況

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

大致梳理了一下機器的ic和結構。驚喜的發現,TFT屏幕驅動芯片tw8816支持模擬信號輸入。模擬信號支持複合視頻,色差,RGB,可惜沒有引出。

查了一下芯片的pdf,應該做適當的設置,就可以改成av輸入信號了

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

大致分析了一下電路結構。該機分兩塊電路板,下面一塊是soc核心板和tft驅動(B板),上面一塊是各種電源,音頻,單片機,接口(A板)等等。

lvds串行數字信號從A板輸入,然後接到B板通過max9218,將lvds轉成並行dtv數據,然後接入到tw8816的dtv數字電視並行接口中。tw8816再處理成tft lcd的驅動信號。

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

A板

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

B板

其中核心板的wince系統直接可以驅動lcd,tw8816的lcd驅動和核心板的lcd驅動通過兩片fst16233進行切換。也就是用戶選擇是顯示lvds的視頻還是wince的視頻。

為了讓屏幕顯示tw8816的內容,直接短接fst16233信號切換引腳到地,強制選擇從tw8816的信號作為lcd驅動

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

接下來結合芯片資料,摸索著焊接了i2c接口線和av複合視頻輸入線,並在視頻輸入上串上了75歐姆阻抗電阻和耦合電容,接上了蓮花頭,找了臺紅白機作為視頻信號源

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

引出的單片機和蓮花頭:

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

由於tw8816中有大量關於tft lcd屏幕參數的設定,然而我並不想詳細瞭解。既然機器能開啟並顯示奧迪logo,就說明tw8816中的各種設置是OK的。要做的就是讀出來就行了

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

TW8816大概有幾百個寄存器,分成256兩頁:

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

通過跑線路,tw8816的i2c總線來自於A板上的一顆STM8單片機,它對tw8816進行了寄存器的設置工作

用接口神器“Bus Pirate”接在tw8816的i2c接口上,然後進入i2c的嗅探模式。上電的一瞬間,所有i2c上的寫入寄存器的操作全部拿下

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

bus pirate界面:

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

嗅探到的i2c通訊內容:

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

用“Bus Pirate”嘗試了一下操作I2C向tw8816的寄存器寫入內容,讀取內容都沒問題。於是開始參照手冊設置一些寄存器的內容,以便能支持模擬信號輸入

通過不懈的努力,最終需要對輸入選擇,輸入信號格式,各種縮放,邊距等寄存器的設置。最終讓接入的av信號,正常的顯示在了屏幕正中

這個時候,A板的唯一的用途就是上面的stm8單片機向B板的tw8816做寄存器設置,以及一些12v轉5v。如果去掉A板,用一片單片機取代,然後直接在B板輸入5V應該就可以做到的

為了驗證這個想法,需要自己先用脫離A板的單片機,手動設置幾百個寄存器的值。看看是否可行

手動設置的工作量太大,這個時候也不可能直接就上單片機編程。於是就用神器“Bus Pirate”的python庫來實現

下圖是python環境jupyter-nb的界面:

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

大概就是用電腦操作“Bus Pirate”,寫入所有寄存器的值。python很方便易用,是俺的主要編程工具之一。幾下就完成了驗證工作。驗證的結果就是,脫離了A板單片機,直接通過“Bus Pirate”的i2c向tw8816設置寄存器後,畫面可以正確顯示。

但過程中有一些插曲,去掉A板後發現背光不亮,結果發現是還有屏幕12V的背光供電控制,直接接地即可亮屏。另外就是設置完所有寄存器後還是白屏,折騰一天發現是VGH VGL電壓沒出來進屏幕。這個也是受控於A板的,直接找到這部分電壓驅動,飛線強行啟動。

脫離A板和B板的排線:

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

脫離A板後,拆下B板上的核心板和藍牙模塊用不上了:

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

下一步就是單片機編程了。程序功能簡單,就是寫一堆數據到i2c就行了

隨便找了一片8腳的pic單片機pic12f675,網上找了一個gpio模擬i2c的程序

把從“Bus Pirate”嗅探到的數據,改成C語言的格式,編程二維數組。tw8816的寄存器幾百個, 分成兩個page。寫到變量page00和page01中。其中二維數組第一個元素表示寄存器號,第二個是值。比如const char page00[][2]={ {0x00,0x22},{0x01,0x83},

表示0號寄存器內容0x22,1號寄存器內容0x83

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

為了讓程序美觀(主要是顯擺俺的C語言功底),用指向二維數組的指針的數組const char (*page_buff[])[2]={page01,page00};來進行兩頁數據循環寫入。這樣寫可以方便的進行page和額外數據組的添加。

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

程序主要部分(因為二維數組指針數組的數據定義很好,所以程序簡潔美觀):

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

一陣調試,燒寫,測試,改程序的漫長過程之後。這片pic單片機開機上電就對tw8816進行設置。一陣操作猛如虎,畫面完美呈現!

高能炫技愛折騰!奧迪Q5車機加裝AV視頻輸入可玩遊戲“坦克大戰”

所有電路和軟件方面的驗證工作都OK了,下一步就是裝回和改外殼等常規操作了,估計一兩天後再進行!本文完!


謝謝觀看!

瀏覽更多精彩內容請登錄數碼之家網站

技術交流請聯繫原作者


分享到:


相關文章: