第13週 LCD表示器を操作してみる

ある会社に工事の下見に行きました。工場現地で落ち合うという約束。

ちゃっちゃちゃっちゃちゃっちゃちゃ(どらえもんの着メロ)
はい。
***ですぅ、今着きました。
はい、私も着いてます。
今、どこですか。
正門脇の駐車場です。
あ、私も正門脇の駐車場です。どのあたり?
入り口付近。
あ、私も入り口付近。
あれぇ? どこかなぁ、見えない。正門脇の駐車場ですけどぉ。
ええ、正門脇の駐車場です。
入り口付近ですよ。
ええ、入り口付近です。
あれぇ?
あれぇ?

その会社の別の工場まで車を飛ばしました。
「1つの会社には工場は1つ」という法律を作れ!


 LCD表示器を操作してみる

単にI/Oをいじり回すだけとはいえ、ちょっと見にもLCD表示器は複雑そうです。
でもここを押さえておけば、ただ動いたり光ったりとは一段レベルの違ういかにも頭良さそうな装置が組めそうです。(^^)
と、思ってLCD表示に突然挑戦です。こいつぁけっこう大変でした。(^^;

準備

PIC PIC16F84-10/P
LCD表示器 SC1602BS*B 秋月電子
データシート SC1602BS*B(これは隅から隅まで読んでおかないと

表示器は以前秋月電子通商で入手しておいたSC1602BS*Bです。16文字×2行キャラクタ表示です。
セイコー電子M1632とピンコンパチとなっています。(つまんないとこに自己主張していてなぜかピンNO.が逆)





発振回路はセラミック振動子(セラロック)10MHz
LCD表示器はSC1602BS*B(バックライトなし)
輝度調整端子VoはGNDへ



SC1602BS*Bは4ビット長と8ビット長の2通りのインターフェイスに対応しています。本やデータシートで見るPICの回路例はどれも4ビット長となっているようです。I/Oのやりくりが必要なPICでは当然です。
でもそのまま頂いたのではアマチュア精神上あんまりなので、SC1602BS*Bのデータシート首っ引きで8ビット長で組んでみました。

コントロール信号は   
RS レジスタ選択 0:インストラクション書き込み、BUSYフラグ読み込み
1:データ
R/W 0:書き込み
1:読み出し
動作起動信号

各信号間のタイミングがうるさいので、データシート首っ引きですが、各信号間時間差は最大のケースで40nsecあればよく、またEのパルス幅も220nsecあればいいので、順序よくプログラムを組みさえすれば確保できます。
むしろ初期処理がやっかいで以下の手順が必要です。

1.電源ON
2.電源立ち上がりから15msec待ち
3.BUSYフラグチェックせずに
  [30H書き込み]−[4.1msec待ち]−[30H書き込み]−[100μsec待ち]−[30H書き込み]
4.ファンクションセット
5.表示クリア
6.エントリーモード
7.表示ON


ちょっと長い(^^; なお電源立ち上げ条件が合えば自動初期設定されますがSC1602BS*Bはその条件に合わないそうで、 そのための初期化プログラムが必要らしいです。 動作としては Yamatonmbo   Kimura Kimura   と Yamatombo を交互に表示するというわけわからん代物ですが、一応2行表示なんかやってます。 プログラムは別ページ
表示器の初期設定の順序とタイミングでちょっとまごつきましたが、こんなプログラムでとりあえず動いたのでそれ以上の考察は
やめてそっと使うことに。(^^;



これでこれから作るプログラムで動作状況など表示しながらチェックしやすくなります。





今週のなるほど
LCD表示器SC1602BS*B の文字位置の2行目のアドレスは1行目からの連続ではなく、40H番地が先頭アドレス

データシートの読み方を再認識しました。つまり、一字一句舐めるように読む、どんな短い記述も重要な示唆を含んでいる、図の隅々まで意味がある、というような言ってみれば当然なことなんですけど。特に秋月さんのデータシートって2,3枚のペラペラな安っぽい紙質で印刷もプリントごっこ並でおまけにグシャって折り畳んであってついつい軽く読んでしまいがちなんですが、でも中身は3日も煮込んだお煮染めくらい濃いですから。