shigobuのアイコン画像
shigobu 2023年03月05日作成 (2023年03月14日更新) © MIT
セットアップや使用方法 セットアップや使用方法 閲覧数 2399
shigobu 2023年03月05日作成 (2023年03月14日更新) © MIT セットアップや使用方法 セットアップや使用方法 閲覧数 2399

秋月で買えるグラフィックカラーLCD「ATM0130B3」の使い方

秋月で買えるグラフィックカラーLCD「ATM0130B3」の使い方

ATM0130B3

秋月電子で購入できる小型液晶モニタ。SPI制御だからGPIOが余っている限り複数接続して個別に制御ができる。制御チップは「ST7789」なので、「Adafruit-ST7735-Library」が使える。今回、複数接続で使用する際につまったことがあったので共有したい。

開発環境

使用マイコンは「Raspberry Pi pico」、IDEは「Arduino IDE」で、ボードパッケージはEarle F. Philhower, III氏作成のものを使用した。

回路図

回路図にあるように、MOSI・SCK・D/C・/RES 信号を共通にしていて、CS信号を個別に接続している。
回路図

液晶端子のピン番号が逆になっているが、フラットケーブルのコネクタの「FH12-12S-0.5SH」に合わせたピン番号になっている。

ソースコード

#include <Adafruit_GFX.h> 
#include <Adafruit_ST7789.h>
#include <SPI.h>

#define TFT_CS_1       4
#define TFT_CS_2       5
#define TFT_CS_3       6
#define TFT_CS_4       7
#define TFT_RST        1 
#define TFT_DC         0

//リセットピンに-1を設定し、リセットは自前で実装
Adafruit_ST7789 tft1 = Adafruit_ST7789(TFT_CS_1, TFT_DC, -1);
Adafruit_ST7789 tft2 = Adafruit_ST7789(TFT_CS_2, TFT_DC, -1);
Adafruit_ST7789 tft3 = Adafruit_ST7789(TFT_CS_3, TFT_DC, -1);
Adafruit_ST7789 tft4 = Adafruit_ST7789(TFT_CS_4, TFT_DC, -1);

const int BACKLIGHT_PWM = 10;
float p = 3.1415926;
void setup() {
  Serial.begin(115200);
  pinMode(TFT_RST, OUTPUT);
  //液晶のリセットピンをトグル
  digitalWrite(TFT_RST, HIGH);
  delay(100);
  digitalWrite(TFT_RST, LOW);
  delay(100);
  digitalWrite(TFT_RST, HIGH);
  delay(200);

  pinMode(BACKLIGHT_PWM, OUTPUT);
  analogWrite(BACKLIGHT_PWM, 255);

  //CSピンの初期化
  pinMode(TFT_CS_1, OUTPUT);
  pinMode(TFT_CS_2, OUTPUT);
  pinMode(TFT_CS_3, OUTPUT);
  pinMode(TFT_CS_4, OUTPUT);
  digitalWrite(TFT_CS_1, HIGH);
  digitalWrite(TFT_CS_2, HIGH);
  digitalWrite(TFT_CS_3, HIGH);
  digitalWrite(TFT_CS_4, HIGH);

  SPI.setRX(16);
  SPI.setTX(3);
  SPI.setSCK(2);

  tft1.init(240, 240);
  tft2.init(240, 240);
  tft3.init(240, 240);
  tft4.init(240, 240);

  tft1.fillScreen(ST77XX_RED);
  tft2.fillScreen(ST77XX_RED);
  tft3.fillScreen(ST77XX_RED);
  tft4.fillScreen(ST77XX_RED);

  tftPrintTest(&tft1);
  tftPrintTest(&tft2);
  tftPrintTest(&tft3);
  tftPrintTest(&tft4);
}

void loop() {
  //省略
}

void tftPrintTest(Adafruit_ST7789 *tft) {
  //省略
}

リセットを自前で実装する

重要な部分は、Adafruit_ST7789オブジェクトを作成する際に、リセットピン番号を「-1」に設定しリセットを無効にしている点である。今回の回路では、リセット信号を共通にしているため、すべての液晶で同時にリセットがかかってしまう。ライブラリのリセットはinit関数で行われているので、一個目のinit関数のあとに二個目のinit関数を呼ぶと、すべての液晶をリセットするので、一個目の液晶もリセットされてしまう。一個目の初期化が無かったことになってしまう。
したがって、ライブラリにリセットさせないで、自前でリセットをする必要が有る。

CSピンの初期化を行う

CSピンは、ライブラリで制御する設定にしているので、本来初期化は不要のはずである。ライブラリのサンプルを見ても初期化は行っていない。しかし、今回の複数接続した回路ではCSピンを初期化しないと正常に動作しなかった。

コネクタ

接続端子は、フラットケーブルになっているので、専用のコネクタが必要である。ピッチ変換基盤付きキットには、「FH12A-12S-0.5SH」が基盤に実装されている。これは、フラットケーブルの電極が上になるように刺すコネクタである。自前で基盤を作成する場合は、業者に基板実装を依頼するのが便利である。今回、JLCPCBのPCBAを使用してみた。JLCPCBには、「FH12A-12S-0.5SH」の在庫が無く、「FH12-12S-0.5SH」なら在庫が有ったので、これを使った。このコネクタは、電極を下向きに刺すコネクタである。

FH12-12S-0.5SH

まとめ

  • Adafruit-ST7735-Library が使える
  • 複数接続する場合、ライブラリのリセットピンは-1を指定し、自前でリセット信号をトグルする。
  • 複数接続する場合、CSピンの初期化を行う。

Raspberry Pi pico なら TFT_eSPI ライブラリが便利

母艦がRaspberry Pi pico や esp32 とかなら、TFT_eSPI ライブラリが便利。
Spritesっていう描画バッファ?みたいなのが使えて、チラつきの無い高速描画ができるらしい。
フォントも、TrueTypeフォント(を変換したもの)が使用できるし、日本語フォントも含めることができるらしい。

shigobuのアイコン画像
arduinoを触ってから、マイコンを使った電子工作に目覚めました。
  • shigobu さんが 2023/03/05 に 編集 をしました。 (メッセージ: 初版)
  • shigobu さんが 2023/03/14 に 編集 をしました。 (メッセージ: TFT_eSPIライブラリについて追記)
  • shigobu さんが 2023/03/14 に 編集 をしました。 (メッセージ: 脱字を修正)
ログインしてコメントを投稿する