LSI Jiu-Jitsu

半導体とブラジリアン柔術

SSD1306 ~その2~

SSD1306の設定レジスタ(コマンドテーブル)について纏めてみました。

こちらからダウンロードしたデータシートの9章に対応しています。

https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf

1. Fundamental Command Table

0x81 : 明るさ設定(0x81送信後の0x00~0xffの256段階で指定する)

明るさ最小
$ i2cset -y 1 0x3c 0x00 0x81 0x00 i

明るさ最大
$ i2cset -y 1 0x3c 0x00 0x81 0xff i

明るさ最小

明る最大

0xA4 / 0xA5 : 全体表示設定

通常
$ i2cset -y 1 0x3c 0x00 0xa4 i

全画面描画
$ i2cset -y 1 0x3c 0x00 0xa5 i

全画面描画

0xA6 / 0xA7 : データRAMのビット極性設定

通常(データRAMのビット=1で描画)
$ i2cset -y 1 0x3c 0x00 0xa6 i

反転(データRAMのビット=0で描画)
$ i2cset -y 1 0x3c 0x00 0xa7 i

反転

0xAE / 0xAF : 表示Off/On設定

表示Off
$ i2cset -y 1 0x3c 0x00 0xae i

表示On
$ i2cset -y 1 0x3c 0x00 0xaf i

2. Scrolling Command Table

0x2E / 0x2F : スクロールOn/Off設定

スクロールOff
$ i2cset -y 1 0x3c 0x00 0x2e i

スクロールOn
$ i2cset -y 1 0x3c 0x00 0x2f i
0x26 / 0x27 : 横方向スクロール設定(0x26/0x27送信後の6バイトで指定する)

$ i2cset -y 1 0x3c 0x00 \
                   0x26 \ # 0x26:右方向 0x27:左方向
                   0x00 \ # ダミー
                   0x00 \ # 開始ページ 0~7
                   0x07 \ # スクロールフレーム間隔 0~7
                   0x07 \ # 終了ぺージ 0~7
                   0x00 \ # ダミー
                   0xff \ # ダミー
                   i

※ 上記設定は、全ページを右方向に最速でスクロール
※ フレーム間隔は0x03(256frame)が一番遅い
0x29 / 0x2A : 横方向&縦方向スクロール設定(0x29/0x2A送信後の5バイトで指定する)

$ i2cset -y 1 0x3c 0x00 \
                   0x29 \ # 0x29:右方向 0x2a:左方向
                   0x00 \ # ダミー
                   0x00 \ # 開始ページ 0~7
                   0x07 \ # スクロールフレーム間隔 0~7
                   0x07 \ # 終了ぺージ 0~7
                   0x01 \ # 縦方向オフセット 1~63
                   i

※ 上記設定は、全ページを右方向に最速でスクロール
※ 縦方向オフセットは、スクロール毎に上方向にシフトさせるライン数
0xA3 : 縦方向スクロールエリア(0xA3送信後の2バイトで指定する)

$ i2cset -y 1 0x3c 0x00 \
                   0xa3 \
                   10   \ # 開始ライン番号 0~63
                   20   \ # スクロールライン数 0~64
                   i

※ 上記設定は、10ライン目から20ライン(29ライン目まで)をスクロールさせる

3. Addressing Setting Command Table

その1を参照

4. Hardware Configuration (Panel resolution & layout related) Command Table

5. Timing & Driving Scheme Setting Command Table

4, 5についてはパネルとクロックの設定なので特に触る必要はありませんが「0xA0 / 0xA1」と「0xC0 / 0xC8」の2箇所を設定することで上下左右を反転させることができます。

0xA0 / 0xA1 : カラムアドレス0位置の指定

通常(カラムアドレス0が左端)
$ i2cset -y 1 0x3c 0x00 0xa0 i

左右逆転(カラムアドレス0が右端)
$ i2cset -y 1 0x3c 0x00 0xa1 i

左右逆転

0xC0 / 0xC8 : ページ0位置の指定

通常(ページ0は上端)
$ i2cset -y 1 0x3c 0xc0 i

上下逆転(ページ0は下端)
$ i2cset -y 1 0x3c 0xc8 i

上下逆転

「0xA1」「0xC8」を設定して上下左右逆転させるとシルク印刷と同じ向きになります。


こちらが正しい向きなのかも知れません(笑)
ちなみに「0xC0 / 0xC8」は即時に反映されますが「0xA0 / 0xA1」は次の描画から反映されます。