...

LCDディスプレイに表示するための プログラミング

by user

on
Category: Documents
20

views

Report

Comments

Transcript

LCDディスプレイに表示するための プログラミング
LCD Liquid Crystal Display
[第
9 章]
LCD ディスプレイに表示して情報をわかりやすく
LCD ディスプレイに表示するための
プログラミング
ここまで,ハードウェアとソフトウェアを動かしてきましたが,動作を確認するために LED の 8 ビッ
トを点滅するだけでも多くのことはわかりました.しかし,複数のデータを表示したいときなど,これで
は少し困ります.今ではどこに行っても表示装置として最も目にするのは LCD です.
本章では,入手性の良い 2 行 16 桁表示の LCD モジュールを利用して,さまざまなデータを表示してみ
ます.
この印は頁右上に略語の語源の説明があります
このアイコンは,章末に用語解説があります
9-1 LCD との接続
アルファベットやカタカナのキャラクタを表示する用途として LCD がよく使われていますが,その中
でも互換品も多く入手性の良い 16 桁 2 行の LCD
を接続してみます.秋月電子通商の通販などで入手で
きます(1000 円で購入できた).図 9-1 に示すように,SC1602B 本体,基板と接続するための 14P(2×7)の
ピン・ヘッダとソケット,バック・ライト
−−−−−−−−−−−− 供給のための抵抗 2 本がセットになっています.右側の支
えがないので,シングルの 20 ピンのピン・ヘッダと 2P のピン・ソケットで支えを作成しています.その
こちら側はささえが
ないので,シングル
のピン・ヘッダと2P
のピン・ソケット二
つでささえることと
する
2列のコネクタ
20Pシングルのピン・
ヘッダ.必要な分だけ
途中で割ることができ
る.ここでは5Pに切っ
て使う
LCDユニット(SC1602B)
,
抵抗2本,14P(2×7)ヘッ
ダ・ユニット
半固定抵抗.
コントラスト
調整用10kΩ
2Pのシングル・ピン・
ソケット.これらは別
に調達する
図 9-1 LCD ディスプレイのユニット(SC1602B)
PIC からのコマンドと表示データの文字コードをLCD モジュール内のLCD ドライバに書き込むだけで,LCD ディ
スプレイにデータが表示できる.
9-1 LCD との接続
177
ような部品がなければ,長めの 2.5 mmφのビスで支えます.コントラスト調整用の半固定抵抗 10 kΩも必
要ですので購入します.
この LCD の制御を行っているのは KS0066U というサムスンの製品で,日立の LCD ドライバ HD44780 と
コンパチブル
−
−−−−−−−−− です.日立の日本語のデータ・シートを探しましたが,探し方が悪かったせいか日立のホ
ームページにはなく,見つけるのに少し苦労しました.半導体部事業の業界再編が思いがけないところで
影響を与えています.ルネサステクノロジでサポートしてもよいと思うのですが.HD44780 コンパチブル
ということで,沖電気のホームページからの日本語のデータ・シートをダウンロードできました.KS0066U
の英文データ・シートもインターネットの検索で見つかります.
9-2 LCD モジュールの構成
図 9-2 に今回使用する LCD モジュールの概要を示します.内蔵されている LCD のドライバは,独自の
命令をもち PIC からの命令を受けて LCD パネルの表示を制御します.そのために新たにここでは,LCD
ドライバの命令および読み書きのタイミング,PIC と LCD モジュールの接続方法についての説明から始
めます.
PIC と LCD モジュールの間では 8 または 4 ビットのデータ・バスで接続し,LCD の表示の制御を行う
コマンドを書き込んだり,表示データの書き込みなどを行います.表示データは DD-RAM(Display Data
RAM)に書き込まれ,このうち初期設定で指定された 16 文字 2 行,または 16 文字 1 行分が−
CG-ROM
−−−−−−
(Character Generator ROM)で具体的な LCD 上の文字パターンのドットに展開され,表示されます.
コマンドは,表示のクリア,カーソルの移動,表示領域のシフト,データの書き込み,DD-RAM 上の
読み書きするデータ・アドレスのセットなど図 9-2 に示す 8 種類が用意されており,データの読み書きな
コマンドおよびデータのリード/ライトで
全部で11種
(1) 表示クリア
(2) カーソル・ホーム
ユーザ定義のキャラクタ・
ジェネレータ用のRAM
英数字,
カタカナ用
のキャラク
タ・ジェネ
レータ
CGRAM
(3) 移動モード・セット
CGROM
(4) 表示モード・セット
AC
(5) カーソル表示の移動
(6) イニシャル・セット(初期化処理)
(7) CG-RAMアドレス・セット
(8) DD-RAMアドレス・セット
8/4ビット
データおよ
びコマンド
コマンドここまで
2行表示時のアドレスと表示位置
との対応
1行
2行
(10) Busyチェック
DD-RAM
DD-RAM/CG-RAMの入出力
を行うとき,対象のアドレス
を示すアドレス・カウンタ.
ここで示すアドレスに,デー
タが読み込まれ表示される
1桁 2
(9) データ書き込み(DD-RAM/CG-RAM)
LCD
3
4
5
00 01 02 03 04
40 41 42 43 44
∼16 17 ∼
DD-RAM
(Display Data Ram)
表示用データ格納用RAM.
1バイトが1文字分を表示.
80バイトある
2行×16桁では,この枠
で表示される.左右にど
ちらにもシフトできる
39 40
表示位置
26 27
66 67
DD-RAM
アドレス
(16進表示)
(11) DD-RAM,CG-RAMデータの読み取り
1行目の最後と2行目の先頭のアドレスは,連続していない
図 9-2 今回使用するLCD モジュールSC1602B の概要
178
第 9 章 LCD ディスプレイに表示するためのプログラミング
ど全部で 11 種の操作により,LCD 表示の制御を行っています.
● LCD モジュールとの接続
実際に LCD 表示を制御するのは,モジュール内にある LCD ドライバが行います.LCD のモジュールと
PIC との接続方法を図 9-3 に示します.PIC と LCD モジュール間には,データ交換およびコマンドの入出
力のための 8 ビットの信号線と,データおよびコマンドの受け渡しを行うリード/ライト制御に伴う信号
線として 3 本を接続する必要があります.このデータと制御の信号線を,PIC 入出力ポートと接続します.
LCD モジュールの 3 番ピンには,コントラストの調整入力があります.半固定抵抗で電源電圧を分割
した電圧を加えコントラストの調整を行います.
バック・ライトの電源を供給するため,JP3 の接続および電流制限抵抗 R 9 の接続が必要です.添付の
説明書に従い基板裏側の JP3 をショートし,R 9 には添付された抵抗を接続します.
● データおよびコマンドの信号線は8 本か4 本を選択できる
LCD モジュールへのコマンドおよびデータは 8 ビットのデータです.そのための信号線が DB(
0 Data
Bus)
∼ DB7 の 8 本用意されています.ここで PIC からは,PORTD の 8 ビットの入出力ピンと接続します.
8 本の信号線を接続するとデータのコマンドや表示データが一度の書き込みで行えるので,プログラムの
手間が省けます.
しかし,18 ピンの PIC などピン数の少ないデバイスを利用する場合は,上位 4 ビットの 4 本の信号線で
接続して,8 ビットの 1 データを 2 回に分け 4 ビットずつ受け渡しできるモードを利用することが多いでし
ょう.そのため,コマンド,データの分割,統合が必要になりソフトウェアの負担が少し大きくなります.
● データの受け渡しの制御は3 本の信号線で
LCD ドライバとの間のデータの受け渡しは,RS,R/W,E の 3 本の信号線で制御されます.
データ・バスは8ビット用意されている.データ
の受け渡しは,8ビット・モードと上位(DB 4 ∼
4ビットのデータ・バスのみ使用する4ビット・
DB7)
モードの二つがある
PIC16F877A
5V
1
19
20
21
22
27
28
29
30
データとコマンドの
送受信は,ポートD
の8ビットを使用
RD0
RD1
RD2
RD3
RD4
RD5
RD6
RD7
制御信号はポートE
を割り当てる
8
RE0
9
RE1
10
RE2
7
8
9
10
11
12
13
14
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
4
RS
5
R/W
6
E
バックライトの電源
供給は,添付の説明
書に従い行う
VDD
LCDドライバ I C
HD44780コンパチブル
VO
4ビットのデー
タ・バスの場
合,この4ビッ
トを接続
3
10k
VSS
2
レジスタ選択信号.
でデータ・レジスタ
‘1’
‘0’
でコマンド・レジスタ
Read/Write.
‘1’
で LCD からの読み取り
‘0’
で LCD への書き込み
Read/Write のイネーブル信号.
図9-4∼図9-8に示すタイミング
を満足する必要がある
図 9-3 LCD と16F877A の接続
9-2 LCD モジュールの構成
179
Q1
Q4
Q2
Q3
OSC1
10
11
ここで,入力端子の
データを読み取る
CLKOUT
13
14
19
12
18
16
I /Oピン
(入力)
17
I /Oピン
(出力)
15
前の値
P I C からの出力は,Q4 で行われ
るが,実際に出力端子に出力デ
ータが現れるのは,次の命令サ
イクルの Q 1 の立ち上がりから
17 で示す時間後となる
新しい値
20, 21
100ns
Tosc( Fosc 10MHzで100ns)
表9-1より100ns∼200ns.
Fosc が10MHzでは,Q2まで
データが定まらない
(10 ∼ 21 の数字は,表 9-1 のパラメータ番号 )
図 9-4(2) PIC の入出力タイミング
s RS
(Register
Select)信号
RS 信号は,データの受け渡しの制御を行います.この信号線はディジタル入出力ポート PORTE の
RE(
に接続します.bsf
0 ビット 0)
PORTE,0 で“H”
(1)にすると,LCD に表示する「データ」の受け渡
しとなります.この信号を bcf PORTE,0 で“L”
(0)にすると,LCD ドライバの動作を制御する「コマ
ンド」の書き込みになります.
s R/W
(Read/Write)信号線
R/W 信号線による読み書きの制御は PORTE の RE(
の信号線で行います.bcf
1 ビット 1)
PORTE,1
で“L”
(0)の Write モードとなり,PIC 側から LCD ドライバへ,コマンドを書き込みコマンドで指示され
た,カーソルの移動,表示のクリアなど制御を行ったり,または LCD への表示データが書き込めます.
bsf PORTE,1 で“H”
(1)の Read モードとなり,コマンドでは PIC が LCD ドライバのコマンド処理を
完了したかチェックする,BF(Busy フラグ)のチェックを行うときなどに利用します.
sE
(Enable)信号
コマンド,データの読み書きを行う 230 ns 以上の幅をもったパルス信号です.このパルスの立ち上がり
が読み書きのタイミングとなります.この信号の ON/OFF は PORTE の RE(
で行います.
2 ビット 2)
各制御信号の役割は決まりました.次に,それぞれの信号のタイミングが仕様を満足するかも含めて,
PIC から LCD ドライバとの間での読み書きについて検討していきます.
● データ/コマンドの書き込み
まず,PIC のディジタル I/O ポートの入出力タイミングを確認します.図 9-4 に示すように PIC への入
力は Q2 のサイクルの先頭の立ち上がりで行います.PIC からの出力は Q4 サイクルで出力操作を行い,出
力操作に伴うデータの値が出力ピンに現れるのは,次の命令サイクルの Q1 の立ち上がりから TosH 2 ioV で
示す時間
(17 番パラメータ,表 9-1 参照)
が必要です.この時間は標準で 100 ns,最大で 255 ns となります.
この遅れにより,発振周波数が 10 MHz の動作時では Q1 の期間が 100 ns ですので,PIC からのデータの確
180
第 9 章 LCD ディスプレイに表示するためのプログラミング
表 9-1(2) PIC のクロックおよび入出力タイミング
パラメー
タ番号
記号
特 性
Min
Typ†
Max
単位
条件
10 *
TosH 2 ckL OSC1 の立ち上がりから CLKOUT の立ち下がり時間
−
75
200
ns
注1
11 *
TosH 2 ckH OSC1 の立ち上がりから CLKOUT の立ち上がり時間
−
75
200
ns
注1
12 *
TckR
CLKOUT の立ち上がり時間
−
35
100
ns
注1
13 *
TckF
CLKOUT の立ち下がり時間
−
35
100
ns
注1
14 *
TckL 2 ioV CLKOUT の立ち下がりからポート出力が有効になる時間
−
−
0.5TCY +20
ns
注1
15 *
TioV 2ckH CLKOUT の立ち上がりの前にポート入力が有効な時間
TOSC +200
−
−
ns
注1
16 *
TckH 2iol
CLKOUT の立ち上がりの後ポート入力を保持する時間
0
−
−
ns
注1
17 *
TosH 2 ioV
OSC1 の立ち上がり(Q1 サイクル)から
ポート出力が有効になる時間
−
100
255
ns
100
−
−
ns
TosH 2 iol
OSC1 の立ち上がり(Q2 サイクル)
ポート入力が有効(I/O 入力保持時間)
な時間
標準(F)
18 *
拡張(LF)
200
−
−
ns
19 *
TioV 2osH
OSC1 の立ち上がりまでポート入力が有効(I/O 入力セット
アップ時間)な時間
0
−
−
ns
20 *
TioR
ポート出力立ち上がり時間
標準(F)
−
10
40
ns
拡張(LF)
−
−
145
ns
標準(F)
−
10
40
ns
拡張(LF)
−
−
145
ns
21 *
TioF
ポート出力立ち下がり時間
22 ††*
Tinp
INT ピン“H”または“L”時間
TCY
−
−
ns
23 ††*
Trbp
RB7:RB4 変化割り込み“H”または“L”時間
TCY
−
−
ns
*このパラメータの値はテストはしていない.
†“Typ”の列のデータは,とくに指定のない限り,5.0V,25℃でテストしている.このパラメータは設計ガイダンスのためのも
ので,テストはしていない.
††この図には出ていないパラメータ.このパラメータは非同期イベントであり,どの内部クロック・エッジとも関連がない.
注 1:CLKOUT 出力が 4×T ,RC
モードでの計算値.
OSC
TCY(パラメータ番号 2):命令実行サイクル・タイム
定は次の命令サイクルの Q2 の立ち上がりには間に合わない場合が生じます.
PIC の場合は,出力と入力が続いたとき,PIC からのデータの出力タイミングと次に PIC がデータ・バ
ス上のデータを読み取るタイミングが近接していて,場合によっては重なるときがあること前提にして,
LCD ドライバのリード/ライトを考えます.
9-3 LCD への書き込み
LCD ドライバへの書き込みタイミングは,図 9-5 に示すようになります.タイミング値は表 9-2 に示し
ます.LCD ドライバにデータを書き込む場合は,E(Enable signal)信号のパルス幅(PWEH )は 230 ns 以上
で,E 信号の立ち下がりの 80 ns 以前(tDSW )に書き込むデータが確定して,E 信号の立ち下がりで LCD ド
ライバが DB0 ∼ DB7 のデータを読み込みます.この条件を満足するかを確認します.
書き込み処理では,まず,RS 信号をビット操作命令でコマンドの場合は“L”
(0)に,データの場合は
“H”
(1)に指定し,次に R/W 信号を bcf 命令で“L”に指定します.この二つの条件は,データの出力以
前に所定の値になっているとして話を進めます.
これ以後,PIC からの LCD ドライバへ書き込みするタイミングを図 9-6 に示します.movwf PORTD
命令で,書き込むデータをポート D に出力し(①),LCD ドライバのデータ・バス上に書き込むデータを
9-3 LCD への書き込み
181
制御信号 E の ON する前に,
bcf 命令で“L”にしてお
く. 同じ操作が続く場合,
変更しない
230ns以上
必要
RS
VI H 1
VI L1
tAS
R/W
tAH
VI L 1
PWEH
tAH
tEf
VI H 1
VI L1
E
tDSW
E信号がONする前
に,movwf命令で
データを出力する
VI H 1
VI L1
データ・バス
DB0∼DB7
この期間,P I Cは出
力データを確定して
おく必要がある
tH
tEr
有効なデータ
LCDのドライバが正しくデータを読み
取るため必要な最小限の時間で,これ
以前に出力が確定していればよい.
表9-2より 80ns 以上必要
tcycE
図 9-5(8) LCD ドライバへの書き込みタイミング
ライト操作.PIC のシステムからLCD へデータ/コマンドを書き込む.
表 9-2(8) LCD ドライバへの書き込みタイミング
記号
tcycE
Min Typ Max 単位
Enable サイクル時間
項 目
500
−
−
Enable パルス幅(
“H”レベル)
PWEH
230
−
−
Enable 立ち上がり / 立ち下がり時間
tEr ,
tEf
−
−
20
RS,R/W アドレス・セットアップ時間 tAS
40
−
−
RS,R/W アドレス・ホールド時間
tAH
10
−
−
データ・セットアップ時間
tDSW
80
−
−
データ・ホールド時間
tH
10
−
−
ns
用意します.次に,bsf 命令で E 信号を“H”にして(②),次に bcf で E 信号を“L”にします(③).この
期間が FOSC が 10 MHz のとき 400 ns で,E 信号の最小値は 230 ns ですから,仕様を満足します.FOSC が
20 MHz の場合は 200 ns となり E 信号の最小値 230 ns 以下となるので,図に示すように NOP 命令を挿入し
(④)実行時間 200 ns を追加すると,計 400 ns となり仕様を満足します.
したがって,通常の場合,RS 信号でデータ/コマンドを選択し,R/W 信号を“L”にして,
movwf PORTD
bsf
PORTE,2
bcf
PORTE,2
の命令を実行することで,LCD ドライバへの書き込みが確実に行えます.
182
第 9 章 LCD ディスプレイに表示するためのプログラミング
Fly UP