ゆるく楽しむプログラミング

M5AtomS3を使ってみた

M5Atom MatrixにLCDを付けたような構成のマイコンボードです

PIOピンの配置は違いますし、MCUが異なりますが
内蔵デバイスはLCD以外は同じです。
IRリモコンとIMUもM5AtomMatrixのスケッチがそのまま使えます
※GPIOピンの変更は必要です



LCD GC9107

リセット手順が異なりますが、描画コマンドはM5Stack BASIC/CORE2のILI9342Cと同じです。
リセットは、LCD-RST(G34)をLOWにしてからHIGHにします。
リセット後には120mSの待ち時間が必要です。

接続は
接続ピン
機能  ピン番号 説明
CS  15 Chip Select
MOSI 21 Master In Slave Out
CLK 17 Clock
RS 33 Data / Command
LCD-RST 34 Reset
BL  16  Back Light 

SPI
MODE 0 
MSBFIRST

BLはPWM出力(anarogWrite() )で明るさを調整できます。

GC9107のコマンド

動作 COMAND PARAMETA
Memory Access Control
 メモリと画面の対応(表示方向の設定)
0x36 パラメタ - 1Byte
 横(0xE8) or 縦(0x48)
COLMOD: Pixel Format Set
 メモリと表示色の対応(色指定方法の設定)
0x3A パラメタ - 1Byte
 16bit色(0x55) or 18bit色(0x66)
Sleep Out
 スリープモードからの復帰
0x11 パラメタ - なし
【重要】コマンド送信後、電源が安定するまで(5m秒以上)待つ必要がある。
Enter Sleep Mode
 スリープモードに設定
0x10
Display ON
 表示ON
0x29 パラメタ - なし
Display OFF
 表示OFF
0x28
Display Inversion OFF
表示色反転 OFF
0x20 パラメタ - なし
Display Inversion ON
表示色反転 ON
0x21 パラメタ - なし
Normal Display Mode On
全画面表示
0x13 パラメタ - なし
Partial Mode ON
部分表示
0x12 パラメタ - なし
範囲はPartial Area command(0x30)で指定
Partial Area
部分表示範囲指定
0x30 パラメタ - 2Bayte + 2Bayte
Column Address Set
ドットデータ書き込みカラム位置
0x2A パラメタ - 2Bayte + 2Bayte
Page Address Set
ドットデータ書き込みページ位置
0x2B パラメタ - 2Bayte + 2Bayte
Memory Write
ドットデータ書き込み
0x2C パラメタ - N Bayte
Vertical Scrolling Definition
スクロール範囲設定
0x33  パラメタ - 2Byte + 2Byte + 2Byte 
Vertical Scrolling Start Address
スクロール開始アドレス
0x37 パラメタ - 2Bayte
初期化に必要なコマンド 描画に必要なコマンド

コマンドは1バイトでパラメタはデータ扱いになります
RSをLOWにしてコマンドを送信、RSをHIGHにしてパラメタを送信の手順で使用します


描画方向の設定

描画方向は、Memory Access Control(0x36)コマンドのパラメタで設定します
パラメタ設定は▼の通り
  D7 D6 D5 D4 D3 D2 D1 D0
コマンド  0 0 1 1 0 1 1 0
パラメタ  MY
(Y軸方向)
MX
(X軸方向)
MV
(XY軸入れ替え)
ML
(Y軸更新方向)
RGB
(色割り当て
 RGB or BGR)
- - -



Dotの色指定

1Dot(ピクセル)の色を指定する方法(フォーマット)の指定は COLMOD: Pixel Format Set で行います。
Memory Writeで書き込む値は 16Bitモードと18Bitモードで▼のようになります


描画手順

描画範囲を指定し、指定範囲を埋めるBitmapデータを送信する
描画範囲 COLの指定  0X2A  SC,EC
描画範囲 ROWの指定   0x2B  SP,EP
描画データ送信   0x2C  Bitmapデータ
※SC,EC,SP,EPは各16Bit



左上が0,0になる筈ですが、128x128の□を描画して確認したところ、何故か▼のように横に2ドット、縦に1ドット分ズレていました。
サンプルスケッチでは2ドットずらして表示しています。表示範囲を2~130,1~129に設定すると何故かキッチリ表示されました。



サンプルスケッチ

GC9107-TEST.zip ※参考動画で使用しているDEMOのスケッチ

解説動画