aitendoの超小型OLEDを使ってみる #2
前回の記事では制御ICの初期設定と画面の表示を行いました。 が、この状態では画像データRAM(GDDRAM)の初期化を行っていないため、ノイズが表示されてしまいます。
GDDRAMの構成
ノイズをクリアするためには、GDDRAMをすべて0で初期化する必要があります。
データシートを参照すると、SSD1306のGDDRAMは大きく8つのページに分かれていることが分かります。
それぞれのページは、画面上側をLSB、画面下側をMSBとする8bitのセグメントが横に128列並んでいる構造をしています。
つまり0x00
を128回送信し、それを8回繰り返すことで画面をすべてクリアすることができます。
アドレッシングモード
画面の描画方法ですが、SSD1306には3種類のモード(アドレッシングモード)が用意されています。 その中でも今回は、Horizontal addressing modeというモードを使ってみます。
Horizontal addressing mode は、描画を開始するセグメントから右方向にポインタを進めていき、終了する列(カラム)に到達したら次のページに進む。という動きを繰り返しながら描画していきます。
今回は画面全体を描画範囲とするので、座標をそれぞれ次のように設定します。
- 開始カラム:0
- 終了カラム:127
- 開始ページ:0
- 終了ページ:7
ちなみに、他のアドレッシングモードでは、ポインタの進む方向や座標指定の方法などが変わってきます。興味のある方はデータシートを確認してみて下さい。
画面をクリアしてみる
以上のことを踏まえて、実際に画面をクリアしてみます。
具体的には、前回のプログラムに次の項目を追加します。
- アドレッシングモード指定:
0x20
- Horizontal addressing mode:
0x00
- カラム指定:
0x21
- 開始カラム(0):
0x00
- 終了カラム(127):
0x7F
- ページ指定:
0x22
- 開始ページ(0):
0x00
- 終了ページ(7):
0x07
ここで一度通信を終了し、画像データを送るためにD/C#ビットを1にして再び通信を開始します。
あとは0x00
を128*8回送信すれば、画面のクリアは完了です。