エビデイエビナイ電子工作

やったことの記録

aitendoの超小型OLEDを使ってみる #2

f:id:Rappy:20190215165246j:plain

前回の記事では制御ICの初期設定と画面の表示を行いました。 が、この状態では画像データRAM(GDDRAM)の初期化を行っていないため、ノイズが表示されてしまいます。


GDDRAMの構成

ノイズをクリアするためには、GDDRAMをすべて0で初期化する必要があります。


f:id:Rappy:20190302130905p:plain
GDDRAMの構成

データシートを参照すると、SSD1306のGDDRAMは大きく8つのページに分かれていることが分かります。


f:id:Rappy:20190302131513p:plain
ページの構成

それぞれのページは、画面上側をLSB、画面下側をMSBとする8bitのセグメントが横に128列並んでいる構造をしています。

つまり0x00を128回送信し、それを8回繰り返すことで画面をすべてクリアすることができます。


アドレッシングモード

画面の描画方法ですが、SSD1306には3種類のモード(アドレッシングモード)が用意されています。 その中でも今回は、Horizontal addressing modeというモードを使ってみます。


f:id:Rappy:20190302134847p:plain
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回送信すれば、画面のクリアは完了です。


f:id:Rappy:20190302164540j:plain
ノイズが表示されなくなった


参考


twitter.com