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

秋月で買えるグラフィックカラー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 に 編集 をしました。 (メッセージ: 脱字を修正)
ログインしてコメントを投稿する