Comments
Description
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 ディスプレイに表示するためのプログラミング