昔買ってた2.83インチ液晶「TFT PROTO」(320×240,IL3941ドライバ)というのが出て来たので動かそうとしている。
MikroElektronikaというメーカーの「TFT PROTO」という製品らしい。
ILI9341ドライバの信号のほとんどがそのまま2.54mmピッチのコネクタ部分に出ているので、ILI9341自体の学習用キットとしてよさそうな感じだ。
ILI3941のデータシートを読んで、使い方の参考にした。
→ datasheet
沢山ピンが出ている。これは8bit CPU時代のメモリやIOのバスのようなパラレルのバスで使用するためにピンが必要なためだ。
サポートしているパラレルの方式は主に2種類で、
・8bitのデータバスと、WR信号、RD信号、CS信号と1本のGPIOを使ってデータを読み書きする方式
と、
・16bitのデータバスと、WR信号、RD信号、CS信号と1本のGPIOを使ってデータを読み書きする方式
がある。
その派生で、1bitずつ余分に接続する方式で、
・9bitのデータバス方式
・18bitのデータバス方式
がある。
液晶に描画するデータは8bit単位なのだが、バスに流すデータが描画データなのか、描画用のコマンドなのかを判別するのに1bit余分に必要だからだ。
あと、SPIバス準拠の4wire方式や、それに似た3wire方式をサポートしている。
普通はマイコンのSPI機能とかSPI用ライブラリとかを使うので、SPI準拠の4wire方式で使うのが一番楽だろう。
IM0~IM3という信号ピンで、液晶の入力の方式を設定するようになっている。
基板の裏側のシルク印刷に、SPIにするにはIM0~IM3(IM[3:0])を010Xに設定するようにと印刷してある。
しかし、これは間違いで、このように配線をしてもSPI通信ができなかった。見事に騙されてしまった。
データシートを見ると、SDIとSDOをMISO,MOSIに繋いで4wireのSPIで8bitモードで使うにはIM[3:0]は1110に設定するのが正しいようだ。
実際にmbedとこの液晶ボードをSPIで繋いでみた例もネット上にあるようだ。
→ SPI_TFT_ILI9341 – Lib for the new LCD Display with ILI9341 contro… Mbed
データシートにもあるのだが、パラレル接続方式の場合と、3wireや4wireのシリアル方式の場合とでは、データ用クロックで使用するピンが異なるので注意が必要だ。WR/CLKというシルク印刷のしてあるピンはパラレル方式の場合にWR信号ピンとして使って、シリアル方式の場合にはCLKとして使うという意味に見えるのだが、これは印刷が間違っていると思われる。
実際にはRSというシルク印刷のされているピンが、SPIモードでのクロック信号となる。そして、WRピンがD/C(データとコマンドの識別信号)となる。
SPIモードで使う時には、使わない信号をGNDに繋いで落としておく必要がある。RDとDB[0:17]をGNDに繋いだ。
FMASKというシルク印刷されたピンは、ILI9341のTEという信号ピンで、これはフレーム切り替えのVSYNCみたいな信号が出ているらしい。VSYNCやHSYNCという信号ピンはILI9341にはあるのだけれど、このLCD基板からは出ていない。このピンは、出力ピンなので、特にどこにも繋がずにNC(未接続)にしておけばよい。
実際にArduino Shieldの形で配線をしてみた。
ソフトは、2.4インチの同様なILI9341のSPIの液晶を動かすのに使ったものをそのまま使った。
しかし、ちゃんと描画をしてくれない。
配線をチェックしているのだけど、間違ってはいないはずだ。
動かない原因は調査中。
続く。
私も動かずにこのページを参考にさせていただきました。
マイコン Display
+ 3,3V 3,3V
GND GND
mosi SDI
miso SDO
sck RS
cs CS
reset RST
dc WR/SCL
GND IM0
+3,3V IM1 IM2 IM3
GND DB0 – DB17
GND RD
って設定で動くようです。