グラフィックLCD

  1. グラフィックLCD


    1. グラフィックLCD

       SG12232は、画素単位で表示が可能なLCDです。画素数は横122縦32です。ただし、制御は62*32のチップを二つ搭載していますから、左右別々に制御する必要があります。

    2. 制御信号

       文字表示液晶とどうような制御です。E とCS1,2を0にし、データを設定し、WR を0にして書き込みます。このとき、A0を0にすると、コマンドの書き込み、1にするとデータの書き込みです。CS1、CS2で書き込むチップを選択します。同時の書き込みも可能です。

      VDD 2 5V
      GND 1 GND
      VO 3 コントラスト
      CLK 7 クロック
      A0 4 制御/データ
      CS1 5 チップ1
      CS2 6 チップ2
      E 8 Enable
      WR 9 書き込み
      Reset 18 リセット
      DB0 10 データ0
      ~
      DB3 13
      DB4 14
      ~
      DB7 17 データ7

      制御は最初のRESET端子の動きで、Z80系と68系が選択できます。68系の書き込みタイミングは下記のようになります。



    3. 画素選択

       列アドレスを0~61で横方向の画素を、縦方向に0~3 に設定し8ビット単位で書き込みます。たとえば列アドレスを10、行アドレスを1として、書き込むと、(10,8)から(10,15)までの画素に書き込むことができます。このとき、CS1を0にすると左半分の62、CS2を0にすると右半分の62列が選択できます。

    4. 文字表示

       文字表示のためのパターンデータはありません。8*8のパターンデータを作成し、文字コードでパターンを選択して表示します。

    5. コマンド

      コマンドの一部を紹介します。

      コマンド 意味
      11100010 リセット
      0ccccccc コラムアドレス設定
      01110rrr 行アドレス指定
      1010111e 表示オン・オフ(e=1でオン)

  2. I2C


    1. アドレスとコマンド

      アドレスは0x76とします。
      コマンドは以下の三種です。フルグラフィックのデータは、122*4 バイトのメモリが必要なため、内蔵メモリだけでは記録できません。Flashメモリを追加すれば可能です。
      <0><x><y><c1>,..,<cn><0><0FF>;文字表示
      <1><x><y><d1>,..,<dn><0><0FF>;折れ線グラフ表示
      <02><00>


  3. 回路設計


    1. クロック

       SG12232 は1.2Khzのクロックが必要です。PICのPWMで生成します。

    2. バックライト

       バックライトのための接続は、18,19ピンでも可能ですが、ボードの端子の逆側に抵抗をつけ、ジャンパピンを接続すれば、追加の接続は不要です。

    3. 回路

       液晶とブレッドボードの接続は4群のヘッダピンで行います。上位と下位の4ビットは、PICの端子とそのまま直結できます。
      /*                     PIC16F873                     */
      /*                 +-------u-------+                 */
      /*          ICSP-->|/MCLR       RB7|-->ICSP          */
      /*           DB0-->|RA0         RB6|-->ICSP          */
      /*           DB1<--|RA1         RB5|-->checkLED      */
      /*           DB2<--|RA2         RB4|-->CS2           */
      /*           DB3<--|RA3         RB3|-->DB7           */
      /*              <--|RA4         RB2|-->DB6           */
      /*              <--|RA5         RB1|-->DB5           */
      /*           +5V===|VSS         RB0|-->DB4           */
      /*              -->|OSC1        VDD|===+5V           */
      /*              -->|OSC2        VSS|===GND           */
      /*           A0 <--|RC0         RC7|<--RESET         */
      /*           CS1<--|RC1         RC6|-->R/W           */
      /*       CL(PWM)<--|RC2         RC5|-->E             */
      /*           I2C<--|SCK         SDI|-->I2C           */
      /*                 +---------------+                 */

  4. プログラム


    1. 文字データ

       以下は、0x20から0x2Fめでの文字コードに対応する文字パターンです。0x20は空白で、1行左のパタン、、0x21は ! で、1行右のパタンです。5F は ! の縦方向のパタンです。
      int8 const Font20[128]=
         {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x00,
          0x00,0x00,0x02,0x01,0x02,0x01,0x00,0x00, 0x3E,0x41,0x41,0x41,0x22,0x00,0x00,0x00,
          0x10,0x74,0x1C,0x17,0x74,0x1C,0x17,0x04, 0x42,0x25,0x12,0x08,0x24,0x52,0x21,0x00,
          0x60,0x56,0x49,0x4E,0x30,0x30,0x40,0x00, 0x00,0x00,0x00,0x04,0x03,0x01,0x00,0x00,
          0x00,0x00,0x3E,0x41,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x41,0x3E,0x00,0x00,0x00,
          0x00,0x22,0x14,0x7F,0x14,0x22,0x00,0x00, 0x08,0x08,0x08,0x7F,0x08,0x08,0x08,0x00,
          0x00,0x00,0x80,0x60,0x20,0x00,0x00,0x00, 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,
          0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x00, 0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00 };

    2. グラフデータ

       0~31 のデータで、グラフ表示する高さ方向の画素を指定します。16F873でも86個のデータまでは、記録・表示できます。

    3. ソース

      ■gLCD_INIT:初期化
      最初にこの関数を実行します。RESET端子を立ち上げて、68モードで実行します。gCS12()は、両側のチップを有効にします。
      void gLCD_INIT()     
      {
        output_low(RES);
        output_high(RES);//set 68 mode
        delay_ms(2);  
      
        gCS12();
        //リセットコマンド
        gLCD_Cmnd(0b11100010);
        delay_ms(2);
      
        // ReadModifyWモードエンド
        gLCD_Cmnd(0b11101110); 
      
      }

      ■ソース
      全体のプログラムはこちらです。