2009/12/22(火)今度は7セグメントジャンクLCD

今回もまたまた大阪日本橋のデジットでジャンクLCDを入手しました。価格は\200-で購入したときは、キャラクタ液晶の16文字1行かなと思ったのですが、調べてみると7セグメントLCDでした。基板には OPTREX PWB 842B MADE IN JAPAN と書いてあります。
7SEGLCD_01.jpg
7SEGLCD_02.jpg
7SEGLCD_03.jpg



コントローラはNEC(旧ロゴ)uPD7225Gで、セグメントLCD制御ICです。
データシートは、英語ですが uPD7225 で検索すればすぐに見つかります。
このICはLCDの駆動方法に「スタティック」「1/2divide」「1/3divide」「1/4divide」があるのですが、購入したLCDは 1/3MODEのでした。といっても自分で解析したわけではありません。本当はこれくらいなら自力でできるようになりたいのですが・・・。
この方の情報を参考にしました。PICを使った工作4(製作編)
このサイトの方はPICのアセンブラでやられていましたが、私はAVRのGCCでやりました。同じものを扱うにしても違う方法を取っているので少しでも情報になればと思います。

LCDのピンアサインは、
  1. RESET#
  2. SCK#
  3. SI
  4. BUSY#
  5. CMD/DATA#
  6. CS#
  7. Vcc(+5V)
  8. Vss(GND)
Vccは+3.3Vでも動作しますが表示が薄くなりすぎるので実質使用できません。通信手順としてはSPIなのですが、クセがあってCS#をアサートしている間だけコマンド情報を引き継ぎます。つまり、
CS#=L → アドレスセット(コマンド) → CS#=H → CS#=L → 表示データ(コマンド) → CS#=H
としても最初のアドレスセットの情報は無効となります。最初Cの関数で組んだときに1バイト単位をforループという形式にして組んで嵌りました。正解の方法は、
CS#=L → アドレスセット(コマンド) → 表示データ(コマンド) → 表示データ(コマンド) ・・・・→ CS#=H
これで、先のアドレスセットが有効になります。
また、CS#の変化後はBUSY#=Hになるまで処理を待つ必要があります。
実験動作のソースコードを置いておきますので具体的な部分はソースコードを見てください。

試行錯誤の結果が以下です。
7SEGLCD_05.jpg
7SEGLCD_04.jpg

バッチリ、0~9とA~Fが表示されました。1/3divideMODEなので1文字に3バイト必要なのが面倒ですがセグメントデータテーブルをつくりそれをロードするようにしました。見づらいですが2枚目の写真で小数点が1個付いています。これはLCD_dot()関数を設け任意の場所に小数点(ドット)を付け消しできるようにしました。

最初ピンアサインを間違えICがかなり発熱し、色々いじって動作しないので2個目を買ってしまいましたが、2個とも元気に動いています。この手のジャンク品の一番の悩みどころは実験・勉強後「何に使うか」なのですが・・・w
電力全然食わないみたいなので時計かなぁ・・・。

ちなみにデジットには\200-でまだまだ大量に置いてありました。

AVRマイコン(ATMEGA88用)ソースコードをここに置いておきます。
LCD7SEG(web).zip
ATMEGA88、回路構成によっては書き込み時にLCDとの接続を外す必要がありますのでご注意を。