このページをはてなブックマークに追加このページを含むはてなブックマーク このページをlivedoor クリップに追加このページを含むlivedoor クリップ

*目次 [#b7489025]

#contents


*LCDモジュールの接続 [#fb812bac]

 TRNジュニアを拡張することでLCDモジュールを接続することができる。『トランジスタ技術SPECIAL No.29』の記事では日立製作所製「LM018L」(20文字×2行)の接続例が示されている。また、他には日立製作所製「LM016L」(16文字×2行)、シャープ製「LM162」(16文字×2行)なども接続できる。
 [[TRNジュニア]]を拡張することでLCDモジュールを接続することができる。『トランジスタ技術SPECIAL No.29』の記事では日立製作所製「LM018L」(20文字×2行)の接続例が示されている。また、他には日立製作所製「LM016L」(16文字×2行)、シャープ製「LM162」(16文字×2行)なども接続できる。

 接続されたLCDには英数字・カタカナ・特殊文字などを表示できる。


*LCDモジュール用のインターフェース回路 [#r0b6a754]

#img(http://security2600.sakura.ne.jp/main2/image3/lcd_buhin.jpg)
#img(,clear)

 新しく必要な部品は次の通りである。

-汎用ロジックIC
--74HCT04
--74HC20
--74HCT139
--74HCT245
-抵抗器
-[[抵抗器]]
--560Ω
-半固定抵抗器
-[[半固定抵抗器]]
--100Ω
-14ピンコネクタ

 これらの汎用ロジックICはLCDモジュールだけでなく、他の拡張回路に必要になるものである。

 LCDモジュールを14芯のフラットケーブルで接続する。このケーブルは14芯フラットケーブルの両端に14芯のコネクタを圧着して作る。


*接続と調整 [#xadd8938]

1:配線後はTRNジュニアの電源を入れる。

2:LCD表示面の左側にカーソルが現れたらOK。もし画面が真っ黒あるいは真っ白ならば、VSUB{0};調整用の半固定抵抗器を回して最適な状態になるように調整する。もし、ROM内のモニタプログラムをバージョン2に変更していた場合、LCDに「TRNJ MONITOR 2.0」という文字列が表示されるはずである。


*LCDの初期化ルーチンの流れ [#q2465867]

 ここで示す初期化ルーチンは最も基本的な設定である。

1:表示をクリアし、カーソルをホーム位置(左上)に戻す。

2:ファンクションセットにより、インタフェースデータ長を8ビット、表示行数を2行、文字フォントを5×7に設定する。

 これらの値を変更したければ、ドットマトリクス液晶表示コントローラドライバであるHD44780のインストラクション一覧表と比較しながら、レジスタAにセットする8ビット列の値を変更すればよい。

3:表示ON/OFFセットインストラクションにより、全表示=ON、カーソル表示=ON、カーソル位置の文字ブランク(点滅)=OFFとする。

4:エントリモードをインクリメント=ON、表示シフト=OFFに設定する。


*実験 [#x6e0fb97]

**LCDに1文字を表示させる [#sca1ec6a]

 モニタプログラムがバージョン1ならば(バージョン2ならばここは通読して、後半を参照)、LCDの初期化は、拡張モニタの初期化ルーチンの中で自動的に行われている。そのときは改めてLCDを初期化することない。

 アキュムレータAのデータを液晶に表示するにはLQOUTファンクションを用いる。LQOUTファンクションのエントリアドレスは042AHである。そこで、次のような機械語(左側)を入力することで、すぐ「A」が表示されるはずである。

#code(asm){{
3E 41		LD A, 'A'
CD 2A 04	CALL 042A

}}

[補足]これは『トランジスタ技術SPECIAL No.29』で例として提示されていたものだが、それには誤植がある。『トランジスタ技術SPECIAL No.29』では2行目が「CD 26 04」となっているが、正しくは「CD 2A 04」である。なお、記録するアドレスはE000H以降などにしておけばよい。 ◇

 実際の入力は次の通りである。

1:[E][0][0][0][ADR]と入力し、記録するアドレス値に移動する。

2:ここからマシン語を入力する。

-[3][E][WRT]を入力する。
-[4][1][WRT]を入力する。
-[C][D][WRT]を入力する。
-[2][A][WRT]を入力する。
-[0][4][WRT]を入力する。

3:[E][0][0][0][ADR]を入力し、アドレス値を移動して、[INC]を押していき入力したマシン語が正しいかを確認する。

4:正しいことを確認したら、[E][0][0][0][ADR]を入力し、アドレス値を移動する。そして、[RUN]を入力する。

 モニタプログラムがバージョン2だと、LCDに自動的にすでに「TRNJ MONITOR 2.0」という文字列が表示されているはずである。

#img(http://security2600.sakura.ne.jp/main2/image3/lcd1.jpg)
#img(,clear)

 さらにカーソルが表示されない。そのため、この状態で上記のようにエントリアドレス042AHをコールしても、うまくいかない(ここで自分はかなりはまった)。そこで、手動で初期化プログラムと同等のことを実行すればよいと思った。LCDの初期化プログラムのアセンブリコードは『トランジスタ技術SPECIAL No.29』のP74のリスト1に記載されているので、これを参考にしてハンドアセンブルした。

1:アドレス値をE000Hに移動して、次のリストの左側のマシン語を入力していく。

#code(asm){{
                                ORG	0E000H
                                LQ_CTL	EQU	6AH

E000: 3E 01                     LD	A,00000001B	;表示クリア、カーソルのホーム移動
E002: D3 6A                     OUT	(LQ_CTL),A
E004: 3E 38                     LD	A,00111000B	;ファンクションのセット
E006: D3 6A                     OUT	(LQ_CTL),A
E008: 3E 0E                     LD	A,00001110B	;ディスプレイをONにセット
E00A: D3 6A                     OUT	(LQ_CTL),A
E00C: 3E 06                     LD	A,00000110B	;エントリモードをセット
E00E: D3 6A                     OUT	(LQ_CTL),A
E010: C9                        RET

}}

[注意]RET命令がなくても最初は問題ない挙動を示すが、一旦LCD表示の実行後にまたE000Hを実行すると変なメッセージがLCDに残ってしまう。HALT命令でもよかったのだが、これだと7セグメントLEDが消灯し、次の入力には[RES]を押す必要がある。[RES]を押すと、LCDの画面には再び「TRNJ MONITOR 2.0」が表示されてうまく解決できない。

 入力後にアドレス値をE000Hに移動して、[RUN]する。すると、LCDにカーソルが表示されるはずである。

#img(http://security2600.sakura.ne.jp/main2/image3/lcd2.jpg)
#img(,clear)

2:次に、アドレス値をE100Hに移動して、次のリストのマシン語を入力していく。

#code(asm){{
                                ORG 0E100H

E100: 3E 41                     LD A, 'A'
E102: CD 2A 04                  CALL 042AH
E105: C9                        RET

}}

 入力後にアドレス値をE100Hに移動して、[RUN]する。すると、LCDに「A」が表示されるはずである。

#img(http://security2600.sakura.ne.jp/main2/image3/lcd3.jpg)
#img(,clear)


**LCDに文字列を表示させる [#t1e37a38]

 自分の所有しているTRNジュニアのモニタプログラムはバージョン2なので、1文字表示の実験のように手動でLCDのフォーマットプログラムを実行するのは約束事としておく。

 次のマシン語を入力すると「AKADMEIA」という文字列がLCDに表示される。

#code(asm){{
                                ORG 0E100H

E100: 3E 41                     LD A, 'A'
E102: CD 2A 04                  CALL 042AH
E105: 3E 4B                     LD A, 'K'
E107: CD 2A 04                  CALL 042AH
E10A: 3E 41                     LD A, 'A'
E10C: CD 2A 04                  CALL 042AH
E10F: 3E 44                     LD A, 'D'
E111: CD 2A 04                  CALL 042AH
E114: 3E 4D                     LD A, 'M'
E116: CD 2A 04                  CALL 042AH
E119: 3E 45                     LD A, 'E'
E11B: CD 2A 04                  CALL 042AH
E11E: 3E 49                     LD A, 'I'
E120: CD 2A 04                  CALL 042AH
E123: 3E 41                     LD A, 'A'
E125: CD 2A 04                  CALL 042AH
E128: C9                        RET

}}

#img(http://security2600.sakura.ne.jp/main2/image3/lcd4.jpg)
#img(,clear)

[独り言]AKADEMEIAのスペルミスで「E」を入れ忘れた…。E表示のための命令を入れなおすとしたら、それ以降の命令がすべてずれてしまい、再入力が必要になってしまう。これは面倒に感じたので、このままにしておいた。 ◇


*参考文献 [#r7b7f1be]

-『トランジスタ技術SPECIAL No.29』