質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

1回答

1496閲覧

ST7789を使用したい Arduino UNO SPI

NFHK

総合スコア2

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2022/11/22 10:38

編集2022/11/23 22:27

前提

Arduino IDE 2.0.1
USBケーブルでPCと接続

ST7789とArduinoはこのように接続している
VCC:3.3vのときと5vのとき両方試している
GND:GND
SCL:D13
SDA:D11
RES:D9
DC:D8
BLK:繋いでいない

使用した製品はこの商品である
https://amzn.to/3TYcgA9

発生している問題・エラーメッセージ

エラーメッセージは発生していない。
いろいろな図形などが描かれると予想しているが、全くディスプレイに反応がない。

該当のソースコード

Arduino-ST7735 and ST7789 Libraryのgraphictest_st7789.ino
に対して、オプション1、2両方とも試してみた

// For the breakout board, you can use any 2 or 3 pins. // These pins will also work for the 1.8" TFT shield. #define TFT_CS 10 #define TFT_RST 9 // Or set to -1 and connect to Arduino RESET pin #define TFT_DC 8 #endif // OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique // to each board and not reassignable. For Arduino Uno: MOSI = pin 11 and // SCLK = pin 13. This is the fastest mode of operation and is required if // using the breakout board's microSD card. //Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST); // OPTION 2 lets you interface the display using ANY TWO or THREE PINS, // tradeoff being that performance is not as fast as hardware SPI above. #define TFT_MOSI 11 // Data out #define TFT_SCLK 13 // Clock out Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);

試したこと

前提条件にあるように配線を行い、graphictest_st7789.inoを書き込んだ。

質問へのコメントをもとに、コメントアウトを外す場所を確認した。しかし
下記サイトを参考にした結果、tft.inoがあり、そこでは引数が3つの関数を利用していた。
https://101010.fun/iot/arduino-tft-st7789.html

https://github.com/jumejume1/tft240x240-spi/blob/master/tft.ino
を書き込んで実行したところ、描画されるときが一度あった。

tft.inoからわかることとして

Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

を利用しており、初期化には

// if the display has CS pin try with SPI_MODE0 tft.init(240, 240, SPI_MODE2); // Init ST7789 display 240x240 pixel

を使用していた。 CSピンがあればSPI_MODE0を使えと指示があるが、CSピンがないのでSPI2で良いと認識している

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2022/11/22 21:24

> 変更をせず 多分ですけどサンプルコードに この場合はこれ この場合はこれのコメントアウトを外す みたいに書かれてません?
NFHK

2022/11/23 05:01

参考サイトより5vにつなぐことにしています。
NFHK

2022/11/23 06:10

私が購入したTFT LCDディスプレイですと、SPI_MODE2 で通信しないと動作しませんでした。 との記載があるためデフォルトの方では動かないのでは?と踏んでます。 たしかにコメントアウトされている関数があり 2つのうちどちらを使うか選択できそうです。 外出先から帰ってから検証します。 tft.inoが動いているあたり、配線には間違いはなさそうとも認識してます。 しかしながら、少し動いても画面の描画がなくなってしまったり、確実に動くわけでないのが気になります。原因はわかりません。
guest

回答1

0

自己解決

#define TFT_CS 10 #define TFT_RST 9 // Or set to -1 and connect to Arduino RESET pin #define TFT_DC 8
#define TFT_CS 10 // define chip select pin #define TFT_DC 9 // define data/command pin #define TFT_RST 8 // define reset pin, or set to -1 and connect to Arduino RESET pin

RSTとDCが異なるサンプルコードが混在しており、配線をまちがえていた。

tft.init関数の第三引数にSPI_MODE2を指定しないと動かなかった。

// if the display has CS pin try with SPI_MODE0 tft.init(240, 240, SPI_MODE2); // Init ST7789 display 240x240 pixel

と思っていたのだが、動作しなくなった。

投稿2022/11/23 13:21

編集2022/11/23 13:27
NFHK

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問