ST7032 は、AQM1602 等で使われている I2C キャラクタ LCD(液晶)コントローラです。ここでは以下の LCD の使い方を解説します:
- AQM1602XA-RN-GBW
- AQM1602Y-RN-GBW
- AQM0802A
- ATD1602CP(ST7032 互換の SPLC792A)
- ストロベリーリナックス「I2C低電圧キャラクタ液晶モジュール」(型番不明、1602D1?)
概要
ST7032 は、I2C 接続で制御が可能な LCD コントローラ IC です。コントラストもコマンドで設定するため、半固定抵抗が不要になり低消費電力です。5x8 ドットの文字が 80 文字分の RAM を持っており、80 個のアイコン表示にも対応しています。COG(Chip on Glass : LCD のガラス上に IC が実装されたもの)タイプの I2C LCD ではほとんどがこの ST7032i およびその互換品を使用していると思います。ST7032 のコマンドは HD44780 と互換性があり、aitendo の ATD1602 に使われている SPLC792A も ST7032 と互換性があります。
電源は 3.3 V です。AQM1602XA は 5.5 V までとなっていますが、推奨は 3.3 V のようです。3.3 V で使用するのがいいでしょう。
回路と実装
外付け部品として、1 μF のコンデンサが 2 個と 0.1 μF か 1 μF が 1 個(パスコン)、I2C バスのプルアップ抵抗(10 kΩ x 2)が必要です。変換基板にこれらが実装されている製品もあります。
リセットピンは H に固定で動作しますが、電源の立ち上がりによってうまくいかない場合は外部リセットが必要です(アクティブロー:負論理)。
ピン配置はここでは示しません。各社の資料を参照してください。
AQM1602XA
先に LCD をはんだ付けしてからピンヘッダをはんだ付けします。ピンヘッダはブレッドボードに挿入し、固定した状態ではんだ付けするとうまくいきます。LCD のピンピッチが小さい(1.27 mm)ため、はんだ付けには技術が必要です。一度はんだ付けしてから、吸い取り線でブリッジした箇所を吸い取るとうまくいくと思います。ただし温めすぎると壊れてしまう可能性があるので要注意です。LCD はガラスですので割らないように注意してください。割れた場合、内部の液体(液晶)が有毒ですので、ケガも含めご注意ください。
基板裏にある 2 個のパッドはプルアップ抵抗を接続するかを決めます。LCD 単体で使用する場合は外付け抵抗が不要になるためブリッジさせていいでしょう。他の I2C デバイスを同じバスに接続する場合は、プルアップが搭載されている場合並列の合成抵抗が形成されるため、無効にしたほうがいいと思います。
AQM1602Y
AQM1602XA の小型版です。ピンピッチが 2.54 mm なので変換基板不要で普通のユニバーサル基板やブレッドボードで使えます。LCD 単体のため、プルアップ抵抗やコンデンサを接続する必要があります。AQM1602Y を購入すると、コンデンサがついてきます。バックライト付きのバリエーションがあります。
AQM0802A
AQM1602 は 16 文字 2 行でしたが、AQM0802 は 8 文字 2 行です。AQM1602XA と同様ピンピッチが小さいため、はんだ付けが少し難しいと感じられるかもしれません。
こちらも変換基板上にプルアップがあり、有効・無効を選べるので AQM1602XA と同じように回路に応じて設定してください。バックライト付きのバリエーションがあります。バックライトなしよりもバックライト付きのほうが変換セットが安かったので(2023-01 購入時点)今回はバックライト付きで使い方を解説します。
ATD1602CP
aitendo で販売されているものです。ピンピッチは 2.54 mm で安価なので使いやすいです。LCD 単体のため、プルアップ抵抗やコンデンサを接続する必要があります。
この LCD は、SHL ピンと DIRC ピンがあり、表示の向きを決めることができます。SHL と DIRC の関係を下表に示します(Nanayon Homepage / Yokohama Japan と表示しています)。これらのピンは必ず H か L に固定してください。
SHL | DIRC | 表示 | 備考 |
---|---|---|---|
L | L | ||
L | H | ピンを上にすると読めます。 | |
H | L | ピンを下にすると読めます。 | |
H | H |
上下逆に実装しない限り、SHL = H、DIRC = L で使うのがいいかと思います。
1602D1
Strawberry Linux で販売されているものです。LCD が基板に実装済み(コネクタ接続)なので使いやすいです。ただ、同梱されているピンヘッダがブレッドボードだと抜けてしまうので、ブレッドボードで使いたい場合は秋月電子通商の細ピンヘッダを用意したほうがベタ―です。
変換基板上にプルアップ抵抗が実装されていないので、外付けする必要があります。コンデンサは実装されています。
広告
コマンドの解説
秋月電子通商の資料には I2C スレーブアドレスは、0x7C と書かれています。読み出しができないので RW は常に 0 です。これは RW ビットを含めたアドレスなので、Arduino 等では 0x3E を指定します。アドレスは固定で、変更できませんので、1 つの I2C バスに複数の LCD を接続することはできません。アドレスが異なるセンサ等を接続することは可能です。
初期化手順例
LCD に表示を出すには、電源投入後にまず初期化をする必要があります。カッコ内はコマンドを送った後の待機時間を示しています。詳しいコマンドの解説は、このあとで行います。
- 40 ms 以上待つ
- 0x38(26.3 μs)ファンクションセット
- 0x39(26.3 μs)ファンクションセット
- 0x14(26.3 μs)周波数設定
- 0x73(26.3 μs)コントラスト設定
- 0x56(26.3 μs)電源・アイコン・コントラスト設定
- 0x6C(200 ms)フォロワ設定
- 0x38(26.3 μs)ファンクションセット
- 0x01(26.3 μs)クリア
- 0x0C(26.3 μs)ディスプレイオンオフ
- 初期化完了
このあとに DDRAM に文字を書き込むことで、表示されるようになります。
コマンド一覧
AQM1602 では Read ができないため、RW = 1 のコマンドは省略しています。また、パラレルで使用する場合の RS ピンは I2C では ないため(最初のバイトで RS を指定する)、RS についても省略しています。詳しくは後述します。
DB7 to DB0 | Description |
---|---|
00000001(0x01) | 【クリア】 DDRAM に" "(空白)を書き込み DDRAM アドレスを 0 にセットする。 |
00000010(0x02) | 【リターンホーム】 DDRAM アドレスを 0 にセットし、 シフトした場合カーソルを元の位置に戻す。 |
000001(I/D)S | 【エントリモードセット】 カーソルが動く方向と ディスプレイシフト方向を設定する。 I/D = H:カーソルは右に移動し DDRAM はインクリメント S = H:シフトを行う 通常は I/D = H、S = H で使用しますが 特に設定する必要はないようです。 |
00001DCB | 【ディスプレイオンオフ】 D = 1:ディスプレイ ON C = 1:カーソル ON B = 1:カーソルポジション ON |
001(CL)N(DH)0(IS) | 【ファンクションセット】 DL = 1:8 ビットモード、0:4 ビット N = 1:2 行、0:1 行 DH = 1:縦ドット数 16 ドット IS = インストラクション選択 I2C なので DL は関係なし(1 にする) DH は N = 0 のときのみ。 IS でインストラクションを選択する(後述) 通常は 0b0011100(IS) = 0x38 + IS で使用します。 |
1XXXXXXX(0x80 + address) | DDRAM アドレスをセットする。 |
XXXXXXXX | データを書き込む(RS = 1 のとき) |
ファンクションセット コマンドで指定した IS により、以下の拡張コマンドがあります。
IS = 0 のとき
DB7 to DB0 | Description |
---|---|
0001(S/C)(R/L)00 | 正直よくわかりませんでした。 特に設定する必要はないようです。 |
01XXXXXX(0x40 + address) | CGRAM アドレスをセットします。 外字を登録する際に使用します。 |
IS = 1のとき
DB7 to DB0 | Description |
---|---|
0001(BS)XXX | 【周波数設定】 内部の発振周波数を設定します。 周波数により、コマンド送出後の 待機時間が異なります。 0x14 を送ればいいでしょう。 |
0100XXXX | アイコンのアドレスをセットします。 詳細後述。 |
0101(Ion)(Bon)XX | Ion:アイコンオンオフ Bon:昇圧回路オンオフ XX:コントラスト の上位 2 ビット 3.3 V 使用時昇圧回路は ON にします。 |
0110(Fon)XXX | 正直よくわかりません。 |
0111XXXX | 【コントラスト設定】 XXXX:コントラスト の下位 4 ビット |
RS の指定方法
データを書き込む際は RS を 1 にします。RS は最初のバイトで指定します。0x00 ならばコマンド、0x40 ならばデータになります。コマンド・データの送出は関数化するのが楽なので、例えば以下のように記述します。これは秋月電子通商の資料にも載っています。
void writeData(unsigned char data) {
// データ書込み
Wire.beginTransmission(0x3E);
Wire.write(0x40);
Wire.wite(data);
Wire.endTransmission();
delay(1);
}
void writeCommand(unsigned char command) {
// データ書込み
Wire.beginTransmission(0x3E);
Wire.write(0x00);
Wire.wite(command);
Wire.endTransmission();
delay(10);
}
DDRAM アドレス
DDRAM は、表示メモリで、表示させたい位置の番地(アドレス)に表示させたい文字を書き込むと(文字についてはあとの項で解説します)、表示されます。ST7032 は 80 文字分の DDRAM を持っており、アドレスは 0x00 から 0x4F があります。
AQM1602 等 16 x 2 行の LCD の場合の DDRAM アドレスは、以下のようになります。順番に並んでいるので、左から何文字目かの任意の位置を n にしたとき、1 行目では n、2 行目では 0x40 + n を指定してあげればいいです。
AQM0802 では下図のようになります。横文字数が異なっているだけで、アドレスは 1602 と同様だということがわかると思います。
コントラスト設定
コントラストは上位 2 ビットと下位 4 ビットが別のコマンドで実装されています。以下は引数にコントラストを渡すことでコントラストが設定できる関数の実装例です。コントラストは 6 ビットなので 0-63 で指定します。見やすい値にセットします。アイコン付きの LCD を使用する場合は data2 のコメントアウトを外し、もう一方をコメントアウトします。
void setContrast(unsigned char contrast) {
unsigned char data1 = 0b01110000;
unsigned char data2 = 0b01010100; // 3.3V使用
//unsigned char data2 = 0b01011100; // 3.3V使用・アイコン付
if(contrast & 0b00000001)data1 += 0b00000001;
if(contrast & 0b00000010)data1 += 0b00000010;
if(contrast & 0b00000100)data1 += 0b00000100;
if(contrast & 0b00001000)data1 += 0b00001000;
if(contrast & 0b00010000)data2 += 0b00000001;
if(contrast & 0b00100000)data2 += 0b00000010;
writeCommand(0x39); // IS=1
writeCommand(data1);
writeCommand(data2);
writeCommand(0x38); // IS=0
}
広告
文字(CGROM/CGRAM)
文字(CGROM/RAM)は、ST7032 の OPR1、OPR2 ピンで決定されますが、今回紹介した LCD ではこれらのピンが外部に出ていないので、ユーザが選択することはできません。OPR の選択によって、RAM(外字を定義できる領域)の数が異なっています。OPR の選択表を以下に示します。
OPR1 | OPR2 | RAM 領域の数 |
---|---|---|
0 | 0 | 8 |
0 | 1 | 6 |
1 | 0 | 8 |
1 | 1 | 0 |
OPR1 と OPR2 がどちらも 0 のときは、0b0000xxxx の列は全て RAM になります。ただし、前半と後半の領域は連動している(例えば 0b00000000 に書き込むと 0b00001000 にも同じ内容が反映される)ので、CGRAM 領域が 16 個あるように見えても、実際に定義できる外字数は 8 になります。OPR1 と OPR2 がどちらも 1 では RAM 領域はなく、すべて ROM(あらかじめ用意されたフォント)になります。AQM1602XA では RAM 領域は 8 個あり、後半は ROM になっているので OPR1 が 1 で OPR2 が 0 だと思います。以下の図は、全領域を ROM にした場合の文字表です。左上部赤枠で囲われているのは AQM1602XA の CGRAM 領域です。よくわからない記号もあるので、正確な表示フォントはデータシート等の資料を参照してください。
外字登録方法
外字は CGRAM にデータを書き込むことで登録できます。AQM1602 の場合 CGRAM は 8 個で、縦 8 ドットのため 8 x 8 で 64 バイトの領域があります。横 5 ドットですので、上位 3 ビットは使用しません。
CGRAM アドレス 0 が 1 文字目(0x00)の一番上、アドレス 7 が 1 文字目(0x00)の一番下の行です。続いてアドレス 8 が 2 文字目(0x01)の最上行、15 が 2 文字目(0x01)の最下行というように、順番になっています。
1 文字目の外字を使用したい場合は、DDRAM に 0x00 を書き込んでください。0x00 から 0x07 までの 8 文字が使えます。
アイコンについて
アイコンを表示するには、Ion ビットを 1 にし(これでアイコン ON)、アイコンアドレスを指定し任意のビットを設定します。アドレスとビットについてはストロベリーリナックス社のアプリケーションノート AN001 に記載がありますが、例えばアンテナマークを表示させたいならば、アイコンアドレス 0x00 の D4 ビットをセットします。ビットをクリアすれば表示は消えます。
戻る
広告