LoginSignup
2
0

More than 1 year has passed since last update.

SpresenseでSSD1351のOLEDを動かした話

Last updated at Posted at 2021-12-24

Qiita Advent calendar2021の記事です。

Spresenseの関係会社に勤務していますが、業務外の個人活動の紹介です。 当記事は会社と関係ありません。

誤った基板上のピン接続により故障する可能性があります。 自己責任でお願いします。

SSD1351ドライバを使っているOLEDモニタをsoftwareSPIとHardwareSPIで比較してみました。

OLEDとSpresenseの接続

OLED Spresense
GND 3.3v
SCL D13 spi csk
SDA D11 spi mosi
DC D8
CS D10 spi cs
RES D9

スケッチ

SSD1351のサンプルスケッチtestSSD1351を用いました。
時間を比較するため、すべてのdelayをコメントアウトしました。

testSSD1351の選択場所
// SoftwareSPIのときこっちを使う
// Option 1: use any pins but a little slower
//Adafruit_SSD1351 tft = Adafruit_SSD1351(SCREEN_WIDTH, SCREEN_HEIGHT, CS_PIN, DC_PIN, MOSI_PIN, SCLK_PIN, RST_PIN);  

// HardwareSPIのときこっちを使う
// Option 2: must use the hardware SPI pins 
// (for UNO thats sclk = 13 and sid = 11) and pin 10 must be 
// an output. This is much faster - also required if you want
// to use the microSD card (see the image drawing example)
Adafruit_SSD1351 tft = Adafruit_SSD1351(SCREEN_WIDTH, SCREEN_HEIGHT, &SPI, CS_PIN, DC_PIN, RST_PIN);

ライブラリ

そのままではHardwareSPIは動きませんでした。
試行錯誤した結果、ここを修正すると動きました。

SPI.hの修正場所
class SPISettings {
public:
...
// clockを12000000に変更 14000000までは動くようだ
    SPISettings()
        : clock_(12000000), bit_order_(MSBFIRST), data_mode_(SPI_MODE0) { }

Adafruit_SSD1351.cppの修正場所
// elseの周波数を12000000に変更 14000000までは動くようだ
// TODO: this will be moved to SPITFT, but for now:
#if defined(ARDUINO_ARCH_ARC32)
...
#else
#define SPI_DEFAULT_FREQ 12000000 // 24000000 ///< SPI default frequency
#endif

実行の様子

HardwareSPIはSoftwareSPIより約8倍くらい早いようです。

参考

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0