1.硬體設計
本來以為這次的專案沒三兩下就可以收工,結果一波N折,搞了快一個月才全部收工。最早想用Arduino Nano當作主控板,它自帶USB可直接下載程式又可當UART通訊埠,於是買了兩片回來試。當控制電路板都焊好了,才發現LCD模組和PSRAM都是3.3V介面,天真的我以為將LCD及PSRAM接上3.3V,Arduino Nano接5V,I/O介面就會通,寫了一些測試程後,才證實「待誌不是憨人所想的這麼簡單」(台語發音),完全不會工作,突然覺得有點崩潰。
後來又想買個3.3V和5.0V位準轉換板來解決,但發現接腳太多實在不好處理,所以也放棄這個念頭。不死心的我又在網路查了一下發現Arduino的主晶片Atmel Mega 328P是可以支援3.3V的,找到一些文章教人如何把Arduino Nano 或Pro Mini改成3.3V,但發覺改板太麻煩,只好乖乖重買板子。可是天不從人願,Arduino Nano沒有3.3V版,要Pro Mini才有,而且時脈速度要降一半,只剩8MHz,更慘的是還要另外買USB轉UART的板子才能下載程式和資料,真是大悲劇。老天對我的考驗還沒結束,上網買了3.3V的Arduino Pro Mini和USB轉UART(CH340G)的轉接板,收到貨後又發現USB轉UART轉接板竟是5V的板子,害我又得上網查資料自己改板子,才能順利下載程式。
好不容易終於把硬體採購都搞定後,寫了一個簡單PC程式和一小段Arduino SPI PSRAM和LCD顯示測試程式後,又發現原先Arduino 拿A4(PC4)和A5(PC5)當數位I/O用竟然無法正常工作,搞了好久一直沒解,最後只好放棄當數位I/O使用,保留下來後續I2C使用,並讓SPI PSRAM和LCD共用晶片選擇線。悲劇還沒結束,突然又發現下載完程式和顯示資料後,板子一離開USB就沒電了,PSRAM內的資料就全沒了,這樣等於就白作工了,所以只好再次上網找鋰電池和充電板來解決持續供電這個問題,結束硬體的問題。
希望透過本文可以讓後續想實作這個專案的人不會經過這麼多波折,按圖施工,一次就能完美達陣。
1.1 零件清單
本專案所需材料如下:
A. Arduino Pro Mini 3.3V / 8MHz 一片 (注意一般是5V / 16MHz,不要買錯)
B. USB轉UART板 (3.3V) 一片 (買不到的請參考 節CH340G如何將5V板子改成3.3V板子)
C. 2.2吋LCD模組 一片 (必須是解析度176*220,ILI9225驅動,8 Bit Bus)
D. 來揚科技SPI PSRAM LY68L6400模組 一片(8MByte, 採購請洽來揚科技)
E. 鋰電池充放電板 一片 (建議輸出電壓不要升壓成5V那種)
F. 鋰電池 一顆 (3.7V, 800mA, 電池容量可依需求增減)
G. 洞洞板 一片 (手工焊接用,未來可改成印刷電路板)
H. LED,220Ω 各一顆 (作為指示燈)
I. 按鍵,10kΩ 各一顆 (作為操作用)
以上除D項是來揚科技提供外,價格大約NT$10(來揚告知的參考價,但不知要多少量才有這個價格),其餘在淘寶或露天上都可輕鬆買到,價錢會依不同的採購管道而有不同,整體來說材料費大約NT$300 ~ 500之間。
1.2 電路圖
本次專案希望成品可真的別在胸口,所以可能不方便用麵包板插線完成,加上此次電路連結頗為複雜,建議實作時焊接要特別注意,以免不慎短路造成零件損壞。當然如果後續有機會(友情斗內)製作成印刷電路板時,就會更方便製作。完整電路圖請參閱圖三。另外本次板子在焊接時跳線太多,所以就不提供焊接參考圖,焊接好的成品圖及各個零件參考位置圖請參考圖四。
圖三、硬體電路圖 |
圖四、成品配置、焊接及組裝參考圖 |
1.3 主要零件使用補充說明
為了後續看程式能更了解重要零件用法,這裡補充說明一下。
A. Arduino Pro Mini
Arduino Pro Mini是其家族中板子最小的,但因為它是開放性設計,所以各家廠商會依自己需要增減一些I/O(如A4, A5, A6, A7),而側面保留UART的腳位及順序可能也會有些不同,所以在採購板子及USB轉UART轉接板時要注意,不然就得像本專案一樣自己加一塊轉板或焊一條專用排線,方便下載程式及影像內容。
另外本次選用的板子是3.3V版本,這是指主晶片的工作電壓,而不是外加電壓。真正的外接電源是從RAW的腳位接入,板子上有電壓調節器,自動會降成3.3V給主晶片用,同時可透過VCC(3V3)接腳引到其它需要3.3V的小零件。因此RAW輸入電壓可從3.35到12V,所以不管是USB(5V)或鋰電池(3.7~4.2V)甚至拿9V電池供電都沒問題。
B. LCD模組
上次OpenQCam(http://omnixri.blogspot.tw/2017/12/openqcam.html)用的是SPI(四線式)通訊方式的LCD模組,為了加快顯示資料更新速度,所以此次選用的是8bit資料匯流排形式的模組。本來這塊模組是為了另一個開源案子準備的,所以特別挑選2.2吋176*220像素解析度的,這個解析度可能有點奇怪,後續若大家有興趣的話亦可改成常用的QVGA (320*240像素)規格。一般上網買此類模組時可能會附上Arduino UTFT的函式庫方便開發,但它支援太多類型,所以驅動方式很難一下看懂,在這個專案我把它簡化到只支援ILI9225驅動晶片且橫式顯示,使大家更容易理解LCD工作原理。
目前這款LCD支援65,536(俗稱64K)色顯示,每點像素以RGB565表示,就是紅色5個位元加上綠色6個位元加上藍色5個位元,合計16位元來表示,等於2個位元組,所以一個畫面共需176 * 220 * 2 = 77,440個位元組,而LCD模組已自帶這些繪圖記憶體(GRAM),只要寫入後模組會自動刷新屏幕,直到有新值寫入或斷電後消失。
再來要說明LCD原始座標系統和顯示時的座標系統之差異,這部份一定要搞懂不然就無法正確顯示。首先說明原始LCD模組預設是直式顯示,暫存器0x03的設定值為0x1030,其座標系統原點(0,0)在左上角,掃描方向由左而右,由上而下,如圖五左圖所示。為了當胸牌(橫式顯示)使用,所以我們要將掃描方向設定改成由上而下,由右至左,這裡指的方向是對應原始定義(黃線標示),而暫存器0x03的值就必須改成0x1028。從圖五左圖中可看出綠色座標軸和洋青色座標值是我們習慣在PC上顯示的座標系統,而黃色線座標軸和洋紅色座標值則為LCD模組真正的座標值,因此使用上我們必須進行轉換。
另外為了加速畫面更新速度,LCD模組允許只對特定視窗(Window)局部進行更新,如圖五右圖中綠色方框,使用前要設定視窗起始座標(x1,y1)、結束座標(x2,y2)及預計開始填值的起點(sx,sy)。特別注意這裡用的座標都是原始定義座標,使用時填入的資料數量(影像長寬)一定要和視窗大小相同,不然圖像顯示時可能會產生捲繞或斜切問題。
LCD相關控制時序,請參考文獻[3]。或者直接對照程式碼及註解作進一步理解。
圖五、LCD預設(左)及顯示(右)座標系統及掃描方向 |
C. Lyontek PSRAM
終於到了本專案最重要的核心元件介紹了,首先感謝來揚科技(Lyontek)贊助一片SPI PSRAM(Pseudo Static Random Access Memory)模組,就是圖四左下圖中那塊綠色板子,上面放了一顆LY68L6400,還有一顆超亮綠色的電源指示燈(為了避免影響拍照,只好用黑膠帶把它貼住)。
什麼是PSRAM呢?我們一般只聽過靜態記憶(Static Random Access Memory, SRAM)和動態記憶體(Dynamic Random Access Memory, RAM)。SRAM速度快,價格高,耗電少,一般MCU中都會帶一些,以Arduino Pro Mini上的那顆Atmel Mega328P來說只有2K位元組的SRAM。而DRAM價格超便宜,但控制電路很複雜,且較SRAM耗電(因為要一直刷新),一般桌機或手機動不動就有1G位元組(或更高),但其控制電路非常複雜,而且要定時刷新(reflash)不然資料就不見了,所以通常要較高等級的CPU才有辦法使用,Arduino這種8bit MCU根本不可能使用。於是史提芬周(星爺)說:「爭什麼爭,把瀨尿蝦和牛丸摻在一起做瀨尿牛丸不就好了。」,所以就有廠商把DRAM包裝成SRAM,把自動刷新機制都作進IC中,這樣用的人就沒感覺,好像在用SRAM,直接讀寫就好,連小型MCU也都可以用,這樣的產品就被稱為Pseudo(假) SRAM。
後來又有廠商為了方便小型MCU沒這麼多接腳可用,將其改成用SPI串列通訊方式讀寫,只需四條線就可使用,大大滿足小型MCU使用者,此次來揚科技提供的這項產品就屬於此類。LY68L6400是一顆64Mbit (8MByte) PSRAM,比Arduino Pro Mini的記憶體(SRAM)大了4,000倍,而且一個十元硬幣(來揚提供,但我不知道要多大量才有這個價錢)就搞定。它的SPI低速時脈可達33MHz,比起Arduino Pro Mini (3.3V版本) SPI的4MHz(因為最小除頻為2)快了八倍多。它還提供了高速模式可達100MHz(新版144MHz),若用QPI模式可再加快三倍(相當四組SPI同時工作),可惜我們用不到,享受不到這種快感。就算MCU來的及,LCD也不給力,所以就只能拿法拉利來當裕隆開了。
話說回來這麼大的儲存空間是要作什麼用,要用到何年何日才用的完,這時候本專案就充分發揮了這項產品的用處了。從前面LCD介紹中我們可得知光一張畫面就要77.4K位元組,而Ardiuno的2K位元組小得連一張影像都裝不下,此時PSRAM就幫了大忙,隨便存個近百張影像也沒問題。使用時我們從PC端用UART將顯示的排程及影像傳送到Arduino中,每收到一個位元組就立即寫入PSRAM,當從PSRAM讀取到一個位元組時也是馬上寫入LCD GRAM中,這樣Arduino就幾乎沒用到什麼記憶體(只有少數變),使得本專案得已實現大量彩色影像播放功能。
這麼好用的產品,難道都沒有缺點嗎?個人覺得斷電資料就消失是最大問題,所以必須搭配電池持續供電,而這樣可能會增加一些電池及充電模組的成本。那或許會有人問,那我用SD卡儲存不就不會有這個問題嗎?我想看在這顆PSRAM才十元,比起SD卡便宜太多,如果使用的場合經常需要重新更新顯示內容的情況下,我想這項產品仍是不錯的選擇,至於要如何使用就留給各位發揮創意了。
D. 充電電池及模組
為了讓本案能真的當成LCD動畫胸牌使用,且避免PSRAM斷電後資料消失,所以額外增加了鋰電池及充電模組。一般鋰電池有的有帶保護板防止過充,有的靠充電模組自行偵測,因此選用時要注意搭配問題。一般充電模組輸入可選用Micro USB插座類型,方便取得5V電源來源。而輸出部份一般有兩種,一種是把鋰電池輸出電壓直接升壓到5V,像是行動電源作法。另一種是鋰電池電壓多少就輸出多少。原則上這兩種都可使用,本專案是選用後者。
另外大家可能會關心的是電池容量到底要多少才夠用,以實測未優化情況,800mAh的電池充滿電後,在自動連續播放模式(MCU持續讀取PSRAM再寫入LCD中,相當於耗電最大情況)下,大約可撐七個小時。這裡可能還有很多電力使用優化作法,比方說調整LCD背光、加強播放間隔時間等等,有待各位協助。
E. USB轉UART轉換板
由於Arduino Pro Mini不像Nano有自帶USB轉UART,所以必須使用額外的USB轉UART轉板。網路上有很多種板子,其中CH340G算是比較常見的(Nano上就是用這顆IC),驅動程式可和Nano共用,不用另外安裝。但各家提供的腳位排列順序都不同,有些還沒有RST腳位,通常都是5V介面的,但有些有設計切換開關或可跳接成3.3V的UART。本來上網買的時候已有指定3.3V版,但收到時發現不是可切換的那種(賣家圖文不符),還好CH340G可支援3.3V,所以只好手工改板。完整手冊可參考文獻[2]。
首先拆掉正面連接USB5V和CH340G VCC(pin 16)的電容,再來將VCC和V3(pin 4)連在一起,讓外部(Arduino Pro Mini VCC)進來的3.3V可送至CH340G的VCC,如圖六下圖所示。接著切斷背面5V 的線,另外將USB送進來的5V直接連線送到外面(排針),如圖六上圖所示,令5V不要經過板子,也不要供電給CH340G,如此即完成USB轉3.3V UART的轉接板。
為方便直接連到Arduino Pro Mini,所以這裡另外手焊了一塊轉板,如圖六右半邊圖所示。這裡多設計了一個跳接線(Jumper),主要是為了切換Arduino Pro Mini的RAW是由誰供電,當短路時由USB供電(5V)到Arduino Pro Mini,再由Arduino Pro Mini送回3.3V給CH340G,若拔掉跳接線(開路)時,則改由鋰電池供電(3.7 ~ 4.2V)。請特別注意,不可跳接線短路時又由鋰電池供電,這樣會造成短路。這裡的USB 5V並不是用來對電池充電的。
圖六、(左上及左下)USB轉UART轉接板改成3.3V版本參考圖,(右)手工轉接板 |
OpenQSignage開源迷你電子看板(Arduino LCD動畫胸牌)
OpenQSignage開源迷你電子看板(Arduino LCD動畫胸牌)#1_硬體設計說明
OpenQSignage開源迷你電子看板(Arduino LCD動畫胸牌)#2_Arduino程式說明
OpenQSignage開源迷你電子看板(Arduino LCD動畫胸牌)#3_PC程式說明
我用此轉接板可以燒進去Pro Mini(燒modbusrtu)
回覆刪除可是用來modbusrtu通訊沒有反應,沒回傳
是轉的介面不是TTL嗎
本系統從電路圖及文件說明都有清楚表明是3.3V系統,一般外面買到的PRO-Mini大部是5V版本,包括下載器(USB轉UART)都是5V。若單從程式及下載來看應可下載,但因目前本系統的LCD及PSRAM都是3.3V,所以可能無法工作。建議可將LCD改成其它家5V版本(驅動可能要重寫),PSRAM改成5V SPI Flash,不過這樣可能對大家太麻煩,建議在LCD及PSRAM介面加上Level Shift(3.3V, 5.5V互轉IC),這樣應可工作。未來若有推出5V版本設計會隨時更新。
刪除