ILI9341の3.2インチ 16ビットパラレル TFTモジュールを使う


こちらでILI9325/9341/9342の8ビット・パラレルTFT モジュールを紹介しましたが、
ILI9341の16ビット・パラレルTFTモジュールが動きましたので紹介します。





Raspberry用のソースはこ ちらで公開して います。
コンパイル手順は以下の通りです
git clone https://github.com/nopnop2002/ili9325_rpi
cd ili9325_rpi
cc -o demo demo.c ili93xx.c fontx.c -lwiringPi -lm -lpthread -DILI9341 -DP16BIT
sudo ./demo

このモジュールの制御方法は少し変わっています。
ILITEKのコントローラ(ILIxxx)は、コマンドとそれに続くn個のパラメータで制御します。
一般的な8ビットパラレルインタフェースではコマンド(< >で囲った部分)も、パラメータ({ }で囲った部分)も8ビット単位に送ります。
【例】
X=0 Y=0 に赤を書き込む
<0x2A> {0x00 0x00 0x00 0x00} <0x2B> {0x00 0x00 0x00 0x00} <0x2C> {0xF8 0x00}

このモジュールは、0x2C(Memory Write)以外のコマンドはコマンドもパラメータも8ビット単位に送りますが
0x2C(Memory Write)のコマンドだけはコマンドは8ビット単位、パラメータは16ビット単位で送ります。
1ドットのRGBデータ(16Bit)を1回で出力するので、8ビットパラレルよりも(ほんの)少しだけ早く動きます。
【例】
X=0 Y=0 に赤を書き込む
<0x2A> {0x00 0x00 0x00 0x00} <0x2B> {0x00 0x00 0x00 0x00} <0x2C> {0xF800}

以下の手順では動きません。
<0x2A> {0x0000 0x0000} <0x2B> {0x0000 0x0000} <0x2C> {0xF800}

モジュールとPiとの接続は以下の様になります。
16ビットのパラレルI/Fなのでピンを滅茶苦茶たくさん使います。
TFT RPi/OPi(Pin#)
LCD_RST Pin#7
LCD_CS Pin#3
LCD_RS Pin#5
LCD_WR Pin#26
LCD_RD Pin#28
LCD_D0 Pin#29
LCD_D1 Pin#31
LCD_D2 Pin#33
LCD_D3 Pin#35
LCD_D4 Pin#37
LCD_D5 Pin#32
LCD_D6 Pin#36
LCD_D7 Pin#38
LCD_D8 Pin#13
LCD_D9 Pin#15
LCD_D10 Pin#16
LCD_D11 Pin#18
LCD_D12 Pin#8
LCD_D13 Pin#10
LCD_D14 Pin#40
LCD_D15 Pin#27
3.3V 3.3V(*)
GND GND

(*)レギュレータが実装されていないので3.3V駆動です。

全てのピンは好きなピンに変更可能です。
ピンのアサインはpin.confに定義します。

WiringPiライブラリしか使っていないので、OrangePiでも動きます。



ライブラリの機能は8ビット・パラレルTFTモジュールと同じですが、モジュールにSPI接続のタッチセンサーがついているので、
タッチされた位置を読み出してみました。


タッチパネルを使う場合のモジュールとPiとの接続は以下の様になります。
40ピン仕様のRPiには全部で28本のGPIOがありますが、TFTとタッチパネルを同時に使うと
TFT制御用:21本
タッチパネル制御用:5本
の合計26本のGPIOを使うので、ほとんど空きがなくなります。
TFT RPi/OPi(Pin#)
LCD_RSTからLCD_D15まで 上と同じ
PEN Pin#22(**)
T_CS Pin#24(**)
MOSI Pin#19(***)
MISO Pin#21(***)
CLK Pin#23(***)
3.3V 3.3V(*)
GND GND

(*)レギュレータが実装されていないので3.3V駆動です。

(**)ソース内部で定義しています
#define SPI_CHANNEL 0 // /dev/spidev0.0
//#define SPI_CHANNEL 1 // /dev/spidev0.1
#define GPIO_PEN 6

(***)変更できません
TFTの制御ラインはこのピンと重ならない様に定義する必要があります。

コンパイル手順は以下の通りです。
git clone https://github.com/nopnop2002/ili9325_rpi
cd ili9325_rpi
cc -o xpt xpt.c xpt2046.c -lwiringPi -lm -lpthread
sudo ./xpt




グラフライブラリと組み合わせると、タッチオペレーションが可能になります。
タッチした場所に応じた数字を表示してみます。


コンパイル手順は以下の通りです。
git clone https://github.com/nopnop2002/ili9325_rpi
cd ili9325_rpi
cc -o touch touch.c fontx.c ili93xx.c xpt2046.c -lwiringPi -lm -lpthread -DILI9341 -DP16BIT
sudo ./touch


続く....