メインマイコンボード搭載ボードにあるキャラクタLCD(SC1602BS-B)を制御するプログラムを作成します.このLCDには2行16文字の英数記号文字を表示する能力を有しており,加えて安価であるため,組込みシステムではよく利用されます.ただこのモジュールはVccが5[V]であるため,端子電圧が3.3[V]のマイコンで制御しようとするとレベルシフタが必要です.TKM-HでもTI社製レベルシフタICを使って双方向レベル変換をしています .

 

キャラクラLCD SC1602BS-B

  1. 端子

    SC1602BS-Bに備わる端子の役割を説明します.
    1. D0~7

      マイコンとLCDとの間でデータをやり取りするための端子です.8本ありますが,端子の少ないマイコンでも制御できるように,D4~D7だけでも制御できるようになっています.この場合,データを送受信するとき上位4ビットと下位4ビットに分けて送信します.ただし,TKM-Hでは,8本すべて繋げてありますのでこの手間はかかりません.
    2. RS

      このキャラクラLCDはいくつかのインストラクションコード,言い換えれば命令コマンドが存在し,それらをマイコンから受信し,フォントサイズを変えたり,文字を表示する位置を変えたりします.文字をLCDに表示するにはキャラクタコードをマイコンから送信し,表示している文字をマイコンで得るにはキャラクタコードをLCDから送信します.インストラクションとキャラクタコードを切り替える端子がRSです.ちなみに,RSはRegister Selectの略で,LCDの内部ではマイコンから送られてきたデータをインストラクションレジスタとデータレジスタのどちらに入れるか切り替えています.
    3. W/R

      多くのインストラクションコードはマイコンからLCDへ送りますが,一部は反対の場合があります.例えば,LCDに内蔵したパターンをマイコンへ送る場合です.このように,データバスの方向を変えるときW/R端子を切り替えます.
    4. E

      この端子はEnable Signalの略でマイコンから見たとき,出力端子となります.インストラクションコードをマイコンから送信する場合,この端子からの信号を立ち下げたときのデータバスからの信号をLCDは取り込みます.つまり,データバスの信号をLCDに取り込ませるタイミングといえます.
    5. VO

      LCDの文字のコントラストを調整するとき用います.具体的には,VOに印加される電圧とVDDとの比率で決まります.
    6. VDD

      プラス電源として5[V]を印加します.
    7. VSS

      グランドです.
  2. ブロック図

    SC1602BS-Bのブロック図のうち,ごく簡単たところだけ抜粋したものを下に示します.左側にあるのがRX62Nマイコン,右側にあるのがキャラクタLCD(SC1602BS-B)です.LCDには先ほど説明したインタフェースRS,R/W,E,D0~D7があり,マイコンの端子と接続されています.
    さて,下図を使って文字を出すまでの流れを簡単に説明します.インストラクションレジスタ(IR)とデータレジスタ(DR)がインタフェースと接続されており,ともに8ビット幅となっています.これらのレジスタに対して読み書きするかはRSにより決定します.具体的には,RS=0のときにはインストラクションレジスタと,RS=1のときにはデータレジスタと読み書きを行います.インストラクションレジスタに格納されるのは,次節で説明するインストラクション(平たく言えばLCDに対する命令)であり,これをインストラクションデコーダで意味を理解し命令を実行するのです.データレジスタに格納されるのはキャラクタコードや表示するパターンです.キャラクタコードとは文字に割り振られたID(=コード)であり,ASCIIコードを想像してもらえばわかりやすいと思います.SC1602BS-Bにはあらかじめ文字パターンを記憶しており,それぞれにキャラクタコードが割り振られています.こちらにキャラクタコードとそれに対応したパターンを置いておきます.さて,文字パターンがLCDに記憶されているといいましたが,これを記憶しているのがキャラクタジェネレータROM(CGROM)です.そして,ディスプレイデータRAM(DDRAM)にはキャラクタコードを格納し,LCDに表示するときにはCGROMから表示するパターンを参照するようになっています.
    先ほど示しましたキャラクタコード表の0x00~0x0FにはCGRAM(1)~(8)と書かれていると思います.これは,自作のパターンをキャラクタジェネレータRAM(CGRAM)に格納しておき,そのパターンを表示できることを示しています.CGRAMに自作パターンを格納するときもDRを利用します.DRにあるデータをCGRAMもしくはDDRAMのどちらに書き込むか決めるインストラクションがあります.これは次章で説明します.
    IRとDR以外に,アドレスカウンタ(AC)とビジーフラグをマイコンは取得することが可能です.これらを取得するためのインストラクションがあります.
    BlockDiagram
  3. インストラクションコードとキャラクタコード

    このLCDには下に示す表のインストラクションコードとキャラクタコードがあります.インストラクションコードを送るにはRSを0,キャラクタコードを送受するにはRSを1にします.

    コマンドの種類

    RS W/R D7 D6 D5 D4 D3 D2 D1 D0 詳細
    表示クリア 0 0 0 0 0 0 0 0 0 1 全表示クリア後,カーソルをホーム位置(左上)へ戻す.

    カーソルホーム

    0 0 0 0 0 0 0 0 1 X カーソルをホーム位置に戻す.シフトしていた表示も元に戻る.DDRAMの内容は変化しない.

    エントリモードセット

    0 0 0 0 0 0 0 1 I/D S データの書き込み及び読み出し時に,カーソルの進む方向,表示をシフトさせるかどうかの設定.
    表示オン,オフコントロール 0 0 0 0 0 0 1 D C B 全表示のオンオフ(D),カーソルのオンオフ(C),カーソル位置にある桁のブリンク(B)をセット.

    カーソル表示シフト

    0 0 0 0  1 S/C  R/L  X  X DDRAMの内容を変えずにカーソルの移動と表示シフトを行う.
    ファンクションセット 0 0  0 0 1 D/L N F  X  X インターフェースデータ長(D/L)行数(N),および文字フォント(F)を設定する.
    CGRAMアドレスセット 0 0  0  1 ACG CGRAMのアドレスをセット.以降送受するデータはCGRAMのデータ.
    DDRAMアドレスセット 0 0  1 ADD DDRAMのアドレスをセット.以降送受するデータはDDRAMのデータ.
    ビジーフラグ,アドレス読み出し 0 1 B/F AC モジュールが内部動作であることを示すB/FおよびACの内容を読み出す.
    CGRAM,DDRAMデータ書き込み 1 0 書き込みデータ(キャラクタコード) CGRAMまたはDDRAMにデータを書き込む.
    CGRAM,DDRAMデータ読み出し 1 読み込みデータ(キャラクタコード) CGRAMまたはDDRAMからデータを読み出す.
    ※XはDon't Careを表します.

    省略名 0 1
     I/D 左側へ移動  右側へ移動 
    S 表示のシフトをしない 表示のシフトをする
    S/C  カーソルの移動 表示のシフト
    R/L 左シフト 右シフト
    D/L 4ビット 8ビット
    N 1桁 2桁
    F 5×7ドット 5×10ドット
    D ディスプレイをオフ ディスプレイをオン
    C カーソルをオフ カーソルをオン
    B カーソルにある文字を点滅させない カーソルに文字を点滅させる
    B/F インストラクション受付中 内部動作中
    ACG CGRAMのアドレス
    ADD DDRAMのアドレス
    AC アドレスカウンタ

    コマンドの種類には,インストラクションコード(RS=0)とキャラクタコード(RS=1)があります.さらに,インストラクションコードには,マイコンから送信するもの(W/R=0)と,LCDから送信するもの(W/R=1)の2種類があります.その多くは前者であり,表示する文字やその位置,カーソルの有無などを設定するときに用います.後者はLCDの内部状態をマイコンが取得するときに使用します.
    キャラクタコードもW/Rが0のときと1のときでデータの送信方向が変わります.例えば,「A(キャラクターコード0x41)」という文字をLCDの左上に表示したい場合,W/Rを0にしてマイコンからLCDへ送信する状態にした上で,DDRAMアドレスセットによりADD=0x00を送信した後,CGRAM,DDRAMデータ書き込みでキャラクタコード0x41を送信します.
    DDRAMのアドレスとパターンの表示位置との関係について説明します.まずは下の図をご覧ください.緑色の枠で囲った箇所がパターンの表示位置であり,各セルに書かれている数字がDDRAMのアドレスです.例えば,2行目左から3列にパターンを表示したい場合にはDDRAMアドレスを0x02にすればよいです.注意しなければならないことは,2行目の左端アドレスが0x40となっていることです.実はSC1602BS-Bには1行に40パターンを記憶するだけのDDRAMが用意されているため,2行目左端のアドレスが0x10ではなく0x40となっているのです.なお,0x10以上0x27以下および0x50以上0x67以下に記憶されたパターンは,カーソル表示シフト命令にあるS/Cを0(表示シフト)にすることで表示させることができます.
    DDRAMAddress