macsbug

Just another WordPress.com site

TFT_eSPI Library supports M5STACK

leave a comment »

TFT_eSPI Library は M5STACK の Display をサポートしました。   2018.04.17


TFT Display と Library:
_ TFT Display の Library は 幾つかありますが その中で
_ TFT_eSPI Library は 速度、機能、多種対応 で ナンバーワンとも言えます。
_ M5STACK(Custom ILI9341), Raspberry Pi用TFT(ILI9486) を含めて8種の
_ SPI TFT や Parallel interface TFT, ePaper の多種対応、高速化、スプライト、
_ アンチエイリアスフォント機能が実施されています。
_ 詳細は eSPI Library に記載されており 読み応えがあります。


主題の前に M5STACKの解説を致します。( 少し長いです )

M5STACK の TFT Display:
TFT  Driver は 320×240 ILI9341 です。ただし「Custom ILI9341」です。
m5stack/M5Stack_TFT_ILI9341 には 「Custom ILI9341」 と書かれています。
低価格で販売されている 2.4 inch TFT SPI 320×240 ILI9341 とは 異なる点が
あります。MISOの配線は無し。 2 inch で 人によっては小さいです。

 2 inch M5STACK Display 2.4 inch  320×240 TFT Display Module

1. 色の配置:BGR
_ ハード的に異なります。RGB ( ILI9341 Data Sheet ) が BGR に
_ なっています。つまり R(赤) と B(青) が 逆になっています。
_ これは RGB Color Codes Chart が使用できない事を示しています。
_ bin タイプの画像やデーターは互換性が無くなります。


2. 表示の向き:鏡面反転表示
_ 鏡面反転表示 (左右反転)します。これもハードの構成による物と思われます。


M5STACK の現象:
1. M5STACK の Display Library で 外部に接続した市販の TFT を表示すると
_ 色ずれと鏡面反転し正常に表示しません。
2. 従来の TFT Library で M5STACK の TFT を表示すると同様に色ずれと
_ 鏡面反転し正常に表示しません。
理由は 解りませんが 私はプロテクションと判断しています。
_ 昔 aitendo の TFT で この方法を使用した TFT Display があり 不便でした。


M5STACK の 現状と対策:
_ TFT Driver IC に対し カスタムの配線は 従来の TFT Library を使用した
_ スケッチの活用が出来なくなります。
_ スケッチの移植が困難になり 先人の資産を有効活用できません。
_ 従来の TFT とは異なる設計は 大変不便です。
_ その中で、 Tetris, spaceShooter, Pacman 等の移植を実施しました。
_ 例として Tetris は これまでの画像を使用できず 新たにM5STACK用の
_ 画像を作りました。調査と作成に大変時間を要しました。

_ SOKOBAN を移植された robo8080氏も 左右反転に気がつき スケッチの
_ サブプログラムで処理をされ 動作しています。
_ robo8080氏の対応策は素晴らしく、感謝致します。

robo8080氏のプログラム:左右反転。

void fillImage(void *image, int x, int y, int w, int h) {
 uint16_t* p = (uint16_t*)image;
 M5.Lcd.startWrite(); // Requires start/end transaction now
 M5.Lcd.setAddrWindow(x, y, x+w-1, y+h-1);
 for ( int i = 0; i < h; i++) {
   for (int j = 0; j < w; j++) {
     M5.Lcd.writePixel(p[i*w+j]);
   }
 }
 M5.Lcd.endWrite(); // End last TFT transaction 
}
robo8080氏のプログラムを 基に

FACES version of M5Stack_sokoban

を作らせて頂きました。


色の対策: RGB -> GBR
_ Kongduino / M5-Colors-Demo:デモは RGBを BGR に変換しています。
_ Kongduino氏は Colours.h  で RGB の定義をし void demoColour で
_ GBR に変換した 5-Colors-Demo を作成しています。

_ M5CheatSheet にも Color の 定義が記載されています。

例:Tetris:make_block( 3, 0xFF00);       // D__,DDD  BLUE
_ Colours.h:TFT_BLUE 0x001F /* 0, 0, 255 */ : Color の定義
_ void demoColour(char *colourName, uint16_t clr) {
_  uint16_t reverse = clr ^ 0xFFFF; // Color の反転


M5STACK Display Library の詳細:
TFT 左右表示:アドレスは 0x36 で 名称は ILI9341_MADCTL です。
_ M5 Display.h に定義されています。
_ Memory Access Control : MADCTL : 左右表示
_ M5 Display.h:#define ILI9341_MADCTL 0x36

設定:M5 Display.cpp で 以下の様に 0x08 です。
_   本来は 0x48 で行われています。

writecommand(ILI9341_MADCTL); // Memory Access Control
writedata(0x08);  // writedata(0x48);

.
=== [ 主題 ] SUBJECT  ===   eSPI Library supports M5STACK   =========

eSPI Library の M5STACK対応:
M5STACK 販売当初、eSPI Library は M5 に正しく表示できませんでしたが
2018.04  (Update 2nd April 2018)  にて M5STACK 対応が実施され
表示が可能になりました。 Bodmer氏に感謝致します。


対応ディスプレー:8種類のTFT と ePaper 対応。
_ ILI9341, ILI9163, ST7735, S6D02A1, ILI9481, ILI9488,ILI9486, HX8357
_ ePaper display


eSPI Library と 多種TFTの記述方法:User_Setups
TFTの設定は 通常 スケッチの宣言部と setup で行いますが eSPI Library は
User_Setups に記載された内容で 行なわれます。
TFT_eSPI/User_Setups/Setup12_M5Stack.h

TFTの宣言と設定を User_Setups に集約する事で便利になっています。
既に 対応する TFT の User_Setups も用意されています。
多種類の TFT 対応が可能である事と プログラムが簡単です。

これにより 従来の eSPI のスケッチがそのまま動作します。
SPI FREQUENCY は 40MHz で 動作します。

例:User_Setups:M5STACK の 設定:

#define ILI9341_DRIVER
#define M5STACK
#define TFT_MISO  -1
#define TFT_MOSI  23
#define TFT_SCLK  18
#define TFT_CS    14  // Chip select control pin
#define TFT_DC    27  // Data Command control pin
#define TFT_RST   33  // Reset pin (could connect to Arduino RESET pin)
#define TFT_BL    32  // LED back-light
#define SPI_FREQUENCY  40000000

鏡面反転表示 (左右反転) から 正しい表示:


サンプル:多数のサンプルがあります。
_ 具体的な画像は  TFT display for Raspberry pi with ESP32 を参照ください。


注目する機能:
1. Sprite :スプライト
_ 複雑なグラフィックにて フリッカーの無い表示が可能です。
_ スクロール機能のサンプルもあり参考になります。

2. ESP32_PARALLEL
_ User_Setups の中に #define ESP32_PARALLEL の設定があります。
_ Control pin 3つ、R/W 2つ、DATA 8つ 計 13本で パラレル操作が可能です。
_ TFT は ILI9481 and ILI9341 で PARALLEL 方式の TFT を入手できますと
_ ESP32 で PARALLEL 操作が可能になり 高速表示を期待する事が出来ます。
_ 対応するボードは 8 bit parallel interface TFT ILI9341 が販売されています。
3. M5STACK 内蔵の Display や M5STACKに外部接続した Display も表示が
_ 可能です。


M5STACK TFT Driver ILI9341:
更に詳しい TFT Driver の中味は TFT_Driver Folder の中に
_ ILI9341_Defines.h, ILI9341_init.h, ILI9341_Rotation.h があります。

ILI9341_init.h には M5STACK用の設定が宣言されています。

#ifdef M5STACK
  writedata(0xA8); // Rotation 0 (portrait mode)
#else
  writedata(0x48); // Rotation 0 (portrait mode)
#endif

#ifdef M5STACK
  // Turn on the back-light LED
  digitalWrite(TFT_BL, HIGH);
  pinMode(TFT_BL, OUTPUT);
#endif

ILI9341_Rotation.h にも M5STACK の設定が多数宣言されています。

 
#ifdef M5STACK 
  writedata(TFT_MAD_MY | TFT_MAD_MV | TFT_MAD_BGR); 
#else 
  writedata(TFT_MAD_MX | TFT_MAD_BGR); 
#endif 

この内容を見ると eSPI Library の著者である Bodmer氏は M5STACK を解析し
丁寧に作られており 驚くばかりです。


速度:
M5STACK での M5 Display Library と eSPI Library の速度を比較しました。
速度は ほぼ同じです。恐らく内部の CODE は 同じ構成だと想像します。


eSPI の bug:バグと修正方法。
3.5 ” 480×320 SPI TFT ILI9486 RPi touch Display を使用する場合、ここに
示されたVersion では表示しません。ブログにコメントされた ohno氏 が
発見し解析により解決方法が判明致しました。
詳細は TFT display for Raspberry pi with ESP32 を参照ください。
ohno氏 に感謝致します。
変更内容:以下の eSPI.cpp を eSPI.h の先頭に移動。

#ifdef RPI_ILI9486_DRIVER
  #define CMD_BITS 16-1
#else
  #define CMD_BITS 8-1
#endif

他、Parallel interface TFT に於いて TFT_CS が出力されない不具合があり、
eSPI.h の TFT_CS の変更が必要です。


参考:
mgo-tec電子工作:mgo-tec氏 が解析され RGB -> BGR の詳細が記載されています。
_ M5stack(ESP32搭載)の液晶ディスプレイ ILI9341 をちょっと解明してみた
_ M5STACK発売当時からの疑問が 同様である事が解りました。
_ 詳細な分析と解説をありがとうございました。mgo-tec 氏に感謝致します。
TFT display for Raspberry pi with ESP32:ラズベリーパイ用 3.5 inch 480×320
Mini Grafx Library : Daniel Eichhorn:高度な命令がある TFT Library
Arduino Library List:ライブラリー集
instructable:ARDUINO TFT DISPLAY AND FONT LIBRARY:Arduino by Bodmer


感想:
eSPI Library ( version 0.20.10 ) 2018.04 Version:
_ M5STACK で使用できなく困っていましたが 使用できる様になり便利に
_ なりました。M5STACK や e-Paper に対する 対応をされ Bodmer氏に
_ 感謝致します。

eSPI Library:
_ rev : 0.20.10
_ rev : 0.20.13 : 2013.04.21 : TFT_DC , TFT_CS
_ rev : 0.20.14 : 2013.04.24 : ePaper, SD, drawXBitmap, Fix111(not font)
_ Bug : TST_CS does not output in ESP32_PARALLEL : 2018.04.24

M5STACK のサンプル:
_ M5STACK発売後に M5の全サンプルを画像表示しようかと思いましたが
_ 既にある eSPI Library と同じである為 M5の紹介では表示しませんでした。
_ 時期的に eSPI Library の方が早く M5のサンプルは eSPI Library の
_ サンプルを使用した物と思われます。


.

広告

Written by macsbug

4月 17, 2018 @ 3:00 pm

カテゴリー: ESP32

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

w

%s と連携中

%d人のブロガーが「いいね」をつけました。