製作編24
OLED表示パネルの操作仕様が理解できたので、デモ表示画面を作成します。
デモ表示画面
デモ表示画面と言っても、デモンストレーション表示をするわけではありません。装置が電源オンした後、装置安定待ち期間の間に型式とFWバージョンを数秒間表示させるだけです。この表示後に、通常画面を表示させます。表示量は16x2行分なので凝った事はできません。とりあえず以下の表示前提で検討してみます。
上記のデモ画面の2行目を表示させる為には、文字を書き込むDDRAMアドレスを事前に指定する必要があります。画面表示用のDDRAMアドレスは以下のとおりです。
2行目の先頭から文字を書き込むには、Set DDRAM addressコマンドを使ってアドレスポインターを事前に0x20に設定してからデータを書き込みます。
文字データの書き込みはwrite dataコマンドを使用します。こだわりは、この表示から通常画面への切り替えです。以前製作したDACユニットでは、スーっと表示が消えて切り替えていたので、同様な処理を検討してみました。
Set Contrast Controlコマンド
このコマンドを使って表示を消してみます。コマンド仕様は以下のとおりです。
デモ画面表示後、2秒のウェイト後にコントラスト値を下げていきます。コードはこんな感じです。
for (byte i = 0xC0 ; i > 0x08 ; i = i - 0x08) {
contrast_set(i);
}
void contrast_set(byte contrast) {
writeCommand(0x2a); //RE=1
writeCommand(0x79); //SD=1
writeCommand(0x81); //SetContrastControl command
writeCommand(contrast); //set contrast value
writeCommand(0x78); //SD=0
write(ommand(0x28); //RE=0
}
コントラスト値のステップをいくつか試してみましたが、想定どおりに表示が消えません。理由はコントラストを0にしても表示が消えない為です。Set Contrast Controlコマンドの使用はあきらめます。
Set Fade Out and Blinkingコマンド
私の要求に対してうってつけのコマンドがありました。仕様は以下のとおりです。
2バイト構成のコマンドで、最初に0x23を送信し、続いてFade Outを指定し、フェードアウトの各ステップのインターバル情報を送るだけです。さっそく試してみました。結論としては使い物になりませんでした。徐々に表示が暗くなりますが、あるところでいきなり表示が消えてしまいます。ミュート時の表示の為にBlinkingも試してみましたが、Fade Outの機能を使って処理がされているので、思いどおりの表示となりませんでした。やれやれ。
スクロールアウト
結局フェードアウト表示はあきらめて、以前製作したATT-1で採用したスクロールアウト仕様に変更します。使用するコマンドはCursor or Display Shiftコマンドです。
このコマンドは、表示用メモリ(DDRAM)を変更せずにこのコマンドの設定に従って表示を変更します。S/C=1, R/L=0としてコマンドを1回発信すると、表示が全体的に左に1列ずれます。ずらす前に左側1列に" "を書き込んでからシフトすると、右側からのスクロールインを防ぐ事ができます。表示用ソースはこんな感じです。
String st = " ";
for (int i =0 ; i < 15 ; i++) {
set_adrs(0x00 + i); //2重の括弧は正しく表示できないので削除
writeData(st.charAt(0));
set_adrs(0x20 + i); //2重の括弧は正しく表示できないので削除
writeData(st.charAt(0));
wirteCommand(0x18);
}
簡単に左スクロールアウトができました。通常画面の表示前に、ポインタを戻すためにinit_olde()コマンドを発信しておきます。
void int_oled() {
delay(100);
writeCommand(ClaerDisplay);
delay(20);
writeCommand(RetrunHome);
delay(2)
wirteCommand(DisplayOn);
delay(2);
wirteCommand(ClaerDisplay);
delay(20);
}
これでデモ表示画面が完成です。次回はリモコン機能の動作確認を行います。
つづく(製作編25)