2015年08月11日

Arduino(9) Adafruit_ST7735ライブラリの修正(aitendoの1.8型LCD用)

arduino08-03.jpg
Adafruit_ST7735ライブラリ+aitendo M-Z18SPI-2Pでgraphicstest。
画面右端と下端にゴミが出ています。Hの字の左端が切れています。

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の仕様の解説があり、参考になります。

表示器 (ST7735B 1.8" TFT SPI)

・修正後のライブラリ+aitendo M-Z18SPI-2Pでgraphicstest
arduino08-04.jpg
ゴミが消え、画面の左端が見えるようになりました。

posted by boochow at 13:07| Comment(0) | Arduino | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
人気記事