Adafruit_ST7735ライブラリでaitendo M-Z18SPI-2Pを制御すると、画面右端と下端にゴミが残り、画面左端が欠けてしまいます。
初期化時、initRのパラメータにINITR_GREENTABを指定するとこの現象は無くなりますが、その代わり色の配列がRGBではなくBGRになってしまいます。
ST7735ではMADCTLというコマンドが色表現のRGB/BGR指定を担っており、これをINITR_BLACKTABのときだけ違う値に設定しているのが関数initRの中の最後の部分です。
void Adafruit_ST7735::initR(uint8_t options) { commonInit(Rcmd1); if(options == INITR_GREENTAB) { commandList(Rcmd2green); colstart = 2; rowstart = 1; } else if(options == INITR_144GREENTAB) { _height = ST7735_TFTHEIGHT_144; commandList(Rcmd2green144); colstart = 2; rowstart = 3; } else { // colstart, rowstart left at default '0' values commandList(Rcmd2red); } commandList(Rcmd3); // if black, change MADCTL color filter if (options == INITR_BLACKTAB) { writecommand(ST7735_MADCTL); writedata(0xC0); } tabcolor = options; }
これをINITR_GREENTABでも実行するように変更すれば、色がRGBの並びになります。
ただし、本家のINITR_GREENTABが違う動作になるのも困るので、新しくINITR_BLUETABを定義しました。
まずAdafruit_ST7735.hに以下の定義を追加します。(赤字部分)
// some flags for initR() :( #define INITR_GREENTAB 0x0 #define INITR_REDTAB 0x1 #define INITR_BLACKTAB 0x2 #define INITR_BLUETAB 0x3 #define INITR_18GREENTAB INITR_GREENTAB #define INITR_18REDTAB INITR_REDTAB #define INITR_18BLACKTAB INITR_BLACKTAB #define INITR_144GREENTAB 0x1
そして、Adafruit_ST7735.cppのinitR関数を修正し、BLUETABではGREENTABの初期化+BLACKTAB用追加コードを実行するようにします。
void Adafruit_ST7735::initR(uint8_t options) { commonInit(Rcmd1); if((options == INITR_GREENTAB) || (options == \ INITR_BLUETAB)) { commandList(Rcmd2green); colstart = 2; rowstart = 1; } else if(options == INITR_144GREENTAB) { _height = ST7735_TFTHEIGHT_144; commandList(Rcmd2green144); colstart = 2; rowstart = 3; } else { // colstart, rowstart left at default '0' values commandList(Rcmd2red); } commandList(Rcmd3); // if black, change MADCTL color filter if ((options == INITR_BLACKTAB)|| (options == \ INITR_BLUETAB)) { writecommand(ST7735_MADCTL); writedata(0xC0); } tabcolor = options; }
これで、ノイズなし、かつ正しい色での表示ができるようになります。
(もちろん、setup()の中でinitRの引数をINITR_BLUETABにする必要があります。)
なお、以下のページにST7735の仕様の解説があり、参考になります。
・修正後のライブラリ+aitendo M-Z18SPI-2Pでgraphicstest

ゴミが消え、画面の左端が見えるようになりました。
コメント