2017年6月19日 星期一

Linkit 7697 Badge

總之這是一個很奇妙的Project
最剛開始是主管看到那個Wifi Display,碰巧因為主管的主管想要發給工程師一人一片Linkit97的板子, 所以主管要我做一個類似的東西,但是因為成本的關係所以要改用別的螢幕

同時我聽到有人是想要做Badge,上面插Linkit 7688的那種。所以我同時Layout了兩個試試,一個是TFT LCD + Linkit 7697,另外一張是LED矩陣的Badge概念版。那時候Linkit 7697剛開始量產,還沒來的及打通一些奇奇怪怪的零件,所以想當然耳的TFT LCD其實還跑不了,就先把Badge版焊接一版出來看看。俗話說的好,數大便是美。288顆LED燈雖然用手焊接焊的要死要活,但是滿壯觀的,所以之後就變成了Badge版。

設計上就是兩個LED控制器,加起來可以控制288顆Led燈,規劃成18x16
另外還有一個三軸加速度計與亮度計,Input是一組方向鍵與四顆按鈕(ABXY)與兩個側邊按鈕

供電可以透過鋰電池或是電腦,同時接上的話會幫鋰電池充電
模組就和Linkit7697一樣用的是MT7697的模組,只是這是群登做的

這顆LED控制IC真的不錯
貪吃蛇

 俄羅斯方塊

這張板子大概是我第一次硬體完全都是我設計然後量產打件的,其實滿多點我想留在這邊當個紀錄

首先是板子零件選用,台灣的EMS廠商大都需要一個公司等級的供應商,通常小批量的就是Mouser,Digikey...等等的。但是這樣一來就會造成成本大增,因為這些地方小批量的價錢真的都不便宜,動輒好幾倍的價差。由於我之前都是上掏寶採買零件,這造成我非常大的成本估計落差,所以要嘛就是找到一家可以用掏寶的EMS,不然就是在選擇零件的時候,參考Mouser or Digikey等等的。另外就是請務必確認EMS廠商能夠使用掏寶來的零件以及符合時間要求,比方說EMS廠商要進口的時候,過海關會造成拖延。如果對掏寶的零件不熟悉的EMS廠來說,處理進口就會有非常大的延誤,可以的話建議是直接自己買,然後交給EMS廠商當客供料件,省去可能的問題。(P.S 以上的敘述中,我的量大約在1K以下)

然後就是BOM表了,如上所述,基本上BOM表需要有一個明確的廠商產品序號供EMS採買
但是有些零件例如電阻,電容等等的通用零件,其實可以詢問EMS廠商的庫存,以及合作的廠商,把所需要的電阻值與精度或者是電容值與電容特性給EMS廠商就可以了。

再來還有打件的零件圖,由於打件後,需要檢查打件有無問題,需要一個參照的圖表標示各個位置的電阻值

最後就是生產的時候會需要有測試程式確認每個零件的焊接都正常,這程式我建議是硬體設計完就可以開始寫了,然後硬體焊接測試的時候就可以直接上,省時間。
工廠的測試試算時間的,所以測試時間也是越短越好,也因此測試的手續越簡單越好。

最後的最後就是,因為這個東西電路板就是最後的外觀,整個電路的設計都需要考慮到視覺的效果,比方說零件的對稱性還有排列的整齊度。
如果用的是亮面的PCB Soldermask的話,那連電路的走線都需要考慮一下。

硬體講完了來講軟體
總之就是雜,功能有以下三種

1.貪吃蛇
2.俄羅斯方塊
3.時鐘

貪吃蛇和時鐘是我自己刻的,俄羅斯方塊是移植

底層的Library修改自Adafruit的Library,就是變成兩顆IC這樣,省去我還要再另外包一層。
然後上層接上Adafruit GFX。

整個Code因為功能不少,所以拆成幾個部分:

1.控制,包含LED矩陣與按鈕
2.貪吃蛇
3.時鐘
4.俄羅斯方塊的一堆Code

Code的部分倒是還好,我比較想講的是Dual buffer。

當我要更新一個Frame的時候,如果我直接動到正在顯示的那個記憶體空間,
在Clear frame的時候就會造成LED矩陣會有一瞬間被清空,導致動畫會有閃爍的情形,
還好這顆LED控制器裡面有8個Frame buffer,所以我可以指定寫入下一個Buffer再通知IC說顯示下一個Buffer,而實際上我只用了兩個做Dual buffer。

其他的倒也還好,MT7697裡面硬體功能不少,而Arduino IDE裡面也可以直接叫出Hal來用。
比方說遊戲所需要的隨機號碼產生器,可以看到我是Call MT7697內建的TRNG,而不是Random() + RandomSeeed。

最後的最後就是亮度計會自動校正螢幕的亮度,因為我非常不喜歡太亮的LED,所以在每次Update螢幕的時候都會去抓亮度計的讀數,唯一可惜的是我忘記加上Filter了....


我的資料都放在Github了,可以看看
https://github.com/will127534/Linkit7697_Badge