ホームホーム

有機 EL ディスプレイ(OLED) SO1602A を使う

はじめに

SO1602A シリーズは Sunlike Display Tech. 社の有機 EL ディスプレイ(OLED)モジュールです。キャラクタタイプで 2 行 16 桁の表示ができます。

文字色の違いで 3 タイプあり,型式は以下のようになっています。

SO1602AWWB-UC-WB-U白色
SO1602AWGB-UC-WB-U緑色
SO1602AWYB-UC-WB-U黄色

電源電圧は 3.3 V。ホストとのインタフェースは I2C です。

この記事では STM32 マイコン(STM32F334R8)と接続して文字列を表示してみます。

SO1602A
川内 康雄 (著)

接続

SO1602A の電源は VDD - VSS 端子間に,3.3 V を供給します。

マイコンとの接続は I2C なので,SDA と SCL の 2 本の信号線を接続します。 SO1602A の SDA 端子は SDA_in と SDA_out に分かれているので,両方をまとめてマイコンの SCL に接続しました。 SDA と SCL にはプルアップ抵抗が必要です。添付の説明書には 4.7 kΩ を付けるようにとありましたが,手元になかったので 10 kΩ をつけました。

I2C のスレーブアドレスは SA0 端子のレベルで変わります。 今回は SA0 端子は VSS に接続(つまり Low レベルに)しました。 この場合,スレーブアドレスは 2 進数で 0111100 となります。 実際に I2C でデータを送るときは最下位に Read/#Write を示すビットが入るので,1 ビット左にシフトして 01111000 とします。 16 進数で表すと,0x78 です。

/CS 端子は VSS に接続しなければなりません。

SO1602A 回路図

初期化

初期設定は内部で行われるので,通常は Display ON インストラクションを送るだけで良いようです。 ただ,添付の説明書によると Clear Displey と Return Home も送ったほうが良いとのことです。 インストラクションを送るときは 0x00 に続けて,1 バイトのインストラクションコードを送ります。 試しに以下のプログラムを書きました。

// インストラクションの送信
int OLED_WriteInstraction(uint8_t data)
{
    uint8_t buf[] = { 0x00, data };
    int status = HAL_I2C_Master_Transmit(&hi2c1, 0x78, buf, 2, 1000);
    HAL_Delay(1);
    return status == HAL_OK;
}

// OLED の初期化
void OLED_Init()
{
    OLED_WriteInstraction(0x01);     // Clear Display
    OLED_WriteInstraction(0x02);     // Return Home
    OLED_WriteInstraction(0x0c);     // Display ON
    OLED_WriteInstraction(0x01);     // Clear Display
}

文字の表示

内蔵の DDRAM に文字コードを書き込むと対応する文字が表示されます。 このときは 0x40 に続けて,文字コードを送ります。

ここでは,お約束の Hello, world! を表示してみます。

// DDRAM への書き込み
int OLED_WriteData(uint8_t data)
{
    uint8_t buf[] = { 0x40, data };
    int status = HAL_I2C_Master_Transmit(&hi2c1, 0x78, buf, 2, 1000);
    HAL_Delay(1);
    return status == HAL_OK;
}

// 文字列の出力
void Puts(const char *p)
{
    for ( ; *p ; p++)
    {
        OLED_WriteData(*p);
    }
}

// Hello, world! の表示
void HelloWorld()
{
    OLED_Init();
    Puts("Hello, world!");
}
川内 康雄 (著)