2009/12/22(火)今度は7セグメントジャンクLCD
コントローラはNEC(旧ロゴ)uPD7225Gで、セグメントLCD制御ICです。
データシートは、英語ですが uPD7225 で検索すればすぐに見つかります。
このICはLCDの駆動方法に「スタティック」「1/2divide」「1/3divide」「1/4divide」があるのですが、購入したLCDは 1/3MODEのでした。といっても自分で解析したわけではありません。本当はこれくらいなら自力でできるようになりたいのですが・・・。
この方の情報を参考にしました。PICを使った工作4(製作編)
このサイトの方はPICのアセンブラでやられていましたが、私はAVRのGCCでやりました。同じものを扱うにしても違う方法を取っているので少しでも情報になればと思います。
LCDのピンアサインは、
- RESET#
- SCK#
- SI
- BUSY#
- CMD/DATA#
- CS#
- Vcc(+5V)
- Vss(GND)
CS#=L → アドレスセット(コマンド) → CS#=H → CS#=L → 表示データ(コマンド) → CS#=H
としても最初のアドレスセットの情報は無効となります。最初Cの関数で組んだときに1バイト単位をforループという形式にして組んで嵌りました。正解の方法は、
CS#=L → アドレスセット(コマンド) → 表示データ(コマンド) → 表示データ(コマンド) ・・・・→ CS#=H
これで、先のアドレスセットが有効になります。
また、CS#の変化後はBUSY#=Hになるまで処理を待つ必要があります。
実験動作のソースコードを置いておきますので具体的な部分はソースコードを見てください。
試行錯誤の結果が以下です。
バッチリ、0~9とA~Fが表示されました。1/3divideMODEなので1文字に3バイト必要なのが面倒ですがセグメントデータテーブルをつくりそれをロードするようにしました。見づらいですが2枚目の写真で小数点が1個付いています。これはLCD_dot()関数を設け任意の場所に小数点(ドット)を付け消しできるようにしました。
最初ピンアサインを間違えICがかなり発熱し、色々いじって動作しないので2個目を買ってしまいましたが、2個とも元気に動いています。この手のジャンク品の一番の悩みどころは実験・勉強後「何に使うか」なのですが・・・w
電力全然食わないみたいなので時計かなぁ・・・。
ちなみにデジットには\200-でまだまだ大量に置いてありました。
AVRマイコン(ATMEGA88用)ソースコードをここに置いておきます。
LCD7SEG(web).zip
ATMEGA88、回路構成によっては書き込み時にLCDとの接続を外す必要がありますのでご注意を。