Arduino用のTFT液晶をRaspberry Pi PICOにつなぎ、240 x 320ピクセルのBitmapを表示してみました。このLCDは5Vで動作しますが、横のCON1のピンを使うことで、3.3Vでも使うことができるようです。詳しくは、ELEGOOの製品ページに情報があります。 今回は、下のようにPICOと接続しました。
LCD | Raspberry Pi PICO | LCD_D0 | GPIO0 (1pin) | LCD_D1 | GPIO1 (2pin) | LCD_D2 | GPIO2 (4pin) | LCD_D3 | GPIO3 (5pin) | LCD_D4 | GPIO4 (6pin) | LCD_D5 | GPIO5 (7pin) | LCD_D6 | GPIO6 (9pin) | LCD_D7 | GPIO7 (10pin) | LCD_RD | GPIO8 (11pin) | LCD_WR | GPIO9 (12pin) | LCD_RS | GPIO10 (14pin) | LCD_CS | GPIO11 (15pin) | LCD_RST | GPIO12 (16pin) | GND | GND (38pin) | CON1の3.3V | 3.3V (36pin) |
|
![](./?action=common_download_main&upload_id=309) |
TFTに付属のArduinoのサンプル_9341uno.inoとShowBMP.inoを参考に、MicroPythonでBitmap画像を表示しました。LCDの初期化は_9341uno.inoの処理をそのまま使いました。ShowBMP.inoによると、ビットマップデータは赤5bit・緑6bit・青5bitの16bitで、上位8bitを先に、下位8bitを後に送信するようです。
今回は、mem32でSIOのGPIO_OUT(0xd0000010)に書き込むことで、パラレル出力を制御しました。しかし、これでは1画面を更新するのに18.2秒かかりました。また、関数デコレーターに@micropytnon.nativeを指定しても、16.9秒かかり、実用的ではありません。(ArduinoUNOではSDカードの画像を11秒くらいで表示する。これも遅いけど。)だからと言ってC++を使うのは面倒くさいので、今後、PIOやDMAを使った高速化に挑戦したいと思います。
下のコードは,MicroPython1.17をインストールしたRaspberry Pi PICOで作成・動作確認をしています。(同じフォルダに240 x 340ピクセル、24bitカラーの画像を「sample.bmp」という名前で配置してください。)