グラフィックLCDをペリヘラルのSPIで動かしたい。で、まず
graphicstest.inoで、SPIの設定をこうやってみる。
SPIClass mySPI (&sercom1, TFT_MISO, TFT_CLK, TFT_MOSI, SPI_PAD_0_SCK_1, SERCOM_RX_PAD_3);
Adafruit_ILI9341 tft = Adafruit_ILI9341(&mySPI,TFT_DC,TFT_CS,TFT_RST);
が、動かないTT
まず、この記述があっているのかどうかを確認する。
参考はこちら。
で、こういうスケッチ。
- #include "SPI.h"
- #define SPI_CS 10
- #define SPI_MOSI 11
- #define SPI_CLK 13
- #define SPI_MISO 12
- SPIClass mySPI(&sercom1,SPI_MISO,SPI_CLK,SPI_MOSI,SPI_PAD_0_SCK_1,SERCOM_RX_PAD_3);
- void setup() {
- // pinMode(SPI_MOSI,OUTPUT);
- // pinMode(SPI_CLK,OUTPUT);
- pinMode(SPI_CS,OUTPUT);
- mySPI.begin();
- }
- uint8_t i=0;
- void loop() {
- digitalWrite(SPI_CS,LOW);
- mySPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE0));
- mySPI.transfer(i++);
- mySPI.endTransaction();
- digitalWrite(SPI_CS,HIGH);
- }
う~ん。たぶんちゃんと動いている。ビットレートもだいたい8M。
そして、いろいろ、下回りのソースコードを見まくって気が付いた、、、
beginの中に
mySPI.begin();
が必要だった。で、こすればよかったのであります。
- #include "SPI.h"
- #include "Adafruit_GFX.h"
- #include "Adafruit_ILI9341.h"
- #define TFT_DC 9
- #define TFT_CS 10
- #define TFT_MOSI 11
- #define TFT_CLK 13
- #define TFT_RST 2
- #define TFT_MISO 12
- SPIClass mySPI (&sercom1, TFT_MISO, TFT_CLK, TFT_MOSI, SPI_PAD_0_SCK_1, SERCOM_RX_PAD_3);
- Adafruit_ILI9341 tft = Adafruit_ILI9341(&mySPI,TFT_DC,TFT_CS,TFT_RST);
- void setup() {
- Serial.begin(9600);
- Serial.println("ILI9341 Test!");
- mySPI.begin();// It is necessary to use SPI peripheral
- tft.begin();
ソフト制御で1Mbpsくらいだったのが、12Mbpsになりました。ヽ(´□`。)ノ・゚
コメントをお書きください