JavaScript が無効です。有効にしてください。
ななよんのホームページ
トップ > 電子工作 > 各種 IC の使い方 > SG12232C の使い方と PIC マイコンで動かす

SG12232C の使い方と PIC マイコンで動かす

最終更新日さいしゅうこうしんび:2023-10-04
表示例

 SG12232 は、122 x 32 ドットのグラフィック液晶モジュールです。バックライト付きです。搭載コントローラは、EPSON S1D15201 あるいはその互換品のようです。今回はそんな SG12232 の制御方法と PIC マイコンで動かす例を解説します。

ピン配置

 ピン番号は、(1)と(19)のみ LCD 裏面に書かれていますが、正面から見たとき右下のピンが(1)、その左隣が(2)、右下から 1 個上に行った位置のピンが(3)、といったように数えていきます。

 この LCD は、インタフェースのモードが Z80 モードと 68 系モードがありますが、ここでは 68 系モードの場合のピン機能を示しています。Z80 系モードで使いたい場合は、購入時に添付されている仕様書を参照してください。68 系のほうが一般的な LCD モジュールと同様で使いやすいと思います。

ピン図
# 名前 方向 説明
1 VSS 電源 GND
2 VDD 電源 5 V
3 VO - コントラスト調整。VSS-VDD 間に半固定抵抗を接続し、中間ピンを VO に入力する。
4 A0 入力 データ、コマンドの選択。
5 /CS1 入力 左半分を選択する。
6 /CS2 入力 右半分を選択する。
7 CL 入力 2 kHz のクロックを入力します。
8 E(RD) 入力 イネーブル信号。立下りでデータが取り込まれる。
9 R/W 入力 H で読み出し、L で書き込み
10 DB0 入出力 データバス
11 DB1 入出力
12 DB2 入出力
13 DB3 入出力
14 DB4 入出力
15 DB5 入出力
16 DB6 入出力
17 DB7 入出力
18 /RES 入力 リセット信号。L -> H で 68 系インタフェース
19 A LED バックライト LED のアノード。
20 K LED バックライト LED のカソード。

 マイコンと通信する場合、R/W を固定する場合 A0、E、8 本のデータバス、2 本の CS、リセット信号で計 13 本の信号線が必要です(リセットは外部回路で信号を作れば減らせると思います)。また、2 kHz のクロックを常時入力する必要があります。マイコンのタイマで生成するほか、555 等で作ってもいいでしょう。マイコンのタイマを使用する場合、信号線 13 本とさらにクロック 1 本の計 14 本の GPIO を使用することになります。

制御方法

コマンド

 コマンドを示します。E 信号の立ち下りでデータが取り込まれます。

A0 R/W D7 to D0 Description
0 0 1010111X(0xae + ON/OFF) ディスプレイオンオフ
X=1: ON、X=0: OFF
0 0 110XXXXX(0xc0 + display start line) 表示開始ライン(0~31)
0 0 101110XX(0xb8 + page) ページを指定する(縦)。
XX にはページが入る(0~3)。
0 0 0XXXXXXX(0x00 + address) アドレスを指定する(横)。
XXXXXX にはアドレスが入る(0~79)。
0 1 BAXR0000 ステータスを読み出す。
B=1: busy, 0: ready
A=1: ADC CW Output, 0: ADC CCW Output
X=1: ディスプレイ OFF, 0: ディスプレイ ON
R=1: リセット, 0: ノーマル
1 0 data データを書き込む。
1 1 data データを読み出す。
0 0 1010000X(0xa0 + ADC) ADC
X=0: 右回り, 1: 左回り
0 0 1010010X(0xa4 + drive) スタティックドライブ
X=1: ON, 0: OFF
0 0 1010100X(0xa8 + duty) デューティ選択
X=1: 1/32, 0: 1/16
(SG12232 の場合 1/32)
0 0 11100000(0xe0) リードモディファイライト ON
0 0 11101110(0xee) リードモディファイライト OFF
0 0 11100010(0xe2) リセット(表示はリセットされない)
注意
電圧印加時の初期化はリセット端子で行います。リセットコマンドでの代用はできません。
解説
ADC について
ADC セレクトコマンドは、表示 RAM のカラムアドレスとセグメントドライバ出力との対応関係を反転できます。正直よくわかりません。とりあえず右回りに設定すればいいでしょう。
解説
スタティックドライブ
ON にすると強制的に全点灯にできるようです。
お知らせ
ディスプレイ OFF の状態でスタティックドライブを ON にするとパワーセーブ状態に入ります。コントラスト調整の半固定抵抗器の電流消費分を考慮する必要があります(FET で切り離すなど)。
解説
リードモディファイライトについて
リードモディファイライトは、ON コマンドと OFF コマンドのペアで使用します。ON にすると、アドレスカウンタを書き込み時のみインクリメントし、読み出し時にはインクリメントしません。なお、カラムアドレスセット コマンドは使えません。


表示領域と制御 IC について

 コントローラ IC が、2 つ搭載されています。それぞれが左右半分の表示を担当しています。制御 IC ないには 80 x 32 の領域が存在しますが、液晶の半分は 61 x 32 なので、後半 19 x 32 の領域は表示されません。制御 IC は CS1、CS2 で選択します。CS1 で左半分、CS2 で右半分を選択します。CS 信号は負論理(アクティブロー)です、H レベルにした方が選択されます。

 制御の考え方は SG12864 と似ています。縦方向に、「8 ビット(ドット)を 1 ページとしたもの」が 4 ページあり、カラムアドレスをインクリメントさせると右隣に移ります。つまり、ページアドレス(縦)を指定して、カラムアドレス(横)を指定して、データを書き込むと表示されます。SG12864 のページに図がありますので参考にしてください。

表示してみる。

555 によるクロックジェネレータ回路

 今回はタイマ IC 555 で約 2 kHz を作ることにしました。クロックは、1 kHz ~ 3 kHz を入力してあげればいいので、正確に 2 kHz である必要はありません。555 の回路図を以下に示します。なお、クロックは制御信号とは非同期なので、楽です。ただし、クロックを入れないと液晶に直流電圧がかかり壊れてしまいます。

555 によるクロックジェネレータの回路図

表示データの作成

 表示データを作るのに、SG12864 の制御でも利用した LCD Assistant を使用します。LCD Assistant の使い方はリンク先を参照してください。

PIC マイコンで制御する。

 PIC16F1827 を使用し、SG12232 を制御してみます。MCC でピンを定義します。

#include "mcc_generated_files/mcc.h"

const unsigned char data [] = {
	// LCDAssistant で作成した表示データを入れる。
};

void out(unsigned char data, bool chip, bool a0) {
    if(chip) {
        CS1_SetLow();
        CS2_SetHigh();
    } else {
        CS1_SetHigh();
        CS2_SetLow();
    }
    
    if(a0) {
        A0_SetHigh();
    } else {
        A0_SetLow();
    }
    
    LATB = data;
    E_SetLow();
    __delay_us(1);
    E_SetHigh();
    __delay_us(1);
    
    A0_SetLow();
}

void main(void)
{
    SYSTEM_Initialize();

    LATA = 0;
    LATB = 0;
    
    __delay_ms(10);
    RES_SetHigh();
    E_SetHigh();
    
    out(0xaf, 0, 0);    // Display ON
    out(0xaf, 1, 0);    // Display ON
    out(0xa9, 0, 0);    // 1/32 duty
    out(0xa9, 1, 0);    // 1/32 duty
    out(0xc0, 0, 0);    // Display Start Line
    out(0xc0, 1, 0);    // Display Start Line
    out(0xe2, 0, 0);    // Reset
    out(0xe2, 1, 0);    // Reset
    
    for(int i=0; i<4; i++) {
        // page address set
        out(0b10111000+i, 1, 0);
        for(int j=0; j<61; j++) {
            out(0b00000000+j, 1, 0);        
            out(data[122*i+j], 1, 1);
        }
    }
    for(int i=0; i<4; i++) {
        // page address set
        out(0b10111000+i, 0, 0);
        for(int j=0; j<61; j++) {
            out(0b00000000+j, 0, 0);        
            out(data[122*i+j+61], 0, 1);
        }
    }
    
    while (1)
    {
    }
}

 配線が正しければ、作成した表示データが表示されるはずです。SG12864 とほぼ同じコードですね。

表示サンプル

 SG12232C は横 122 ドットと中途半端なので、一般的な 16 ドット文字を使用した場合、10 ドット余ります。その余る領域をうまく活かすのもいいかもしれません。26 ドットを使い、駅番号や種別を表示しています。

26 ドット分で駅番号を表示している 種別表示で 26 ドットの領域を使っている。

 クロックジェネレータが必要なのが面倒ですが、そこそこ使えそうです。

参考文献

  • SG12232C データシート
  • S1D15200 データシート
  • SG12232 に同梱されている資料

戻る

右メニュー

【表示がおかしい・崩れる場合】PC では Shift と F5 を同時押し。スマホではキャッシュを削除してみてください。



とうサイトでは Cookieくっきー使用しようします。くわしくは上記じょうきの「プライバシーポリシー・免責事項等めんせきじこうとう」もご確認かくにんください。



上へ戻る