LCD利用の小型タイマー&カウンター(BigFontを使ってみた)
R6/11/03:新規掲載
タイマー(BigFont表示)ビッグフォントを使ってタイマー&カウンターを作って見ました。
タイマー&カウンターは制作を重ねるごとに大型化して、箱型の7号は25cmです。大きくて視認性はよいのですが、持ち運びには難点が・・・。そこで、LCDのBigFontで見やすさも維持しながらの小型化をテーマにしました。
<出来上がり画像>
内部配置
- 外形115w×80h×70d(mm)に治まりましたから、小型化はできました。
- パーツの詰め込みや取付については、今まで多くの失敗の経験を積んでいますので少しずつですがスマートになっています。
- 小型化のためには、単4電池に・・とも考えましたが、バックライト付きLCDは消費電流が多めなので採用できませんでした。
- 時間設定と得点操作にタクトスイッチを共用としたので、パネル面がスッキリしました。時間設定はVRの方が自然ですが、VRのツマミの大きさと可変抵抗のスペースを考えると、小型化がテーマの今回には採用できませんでした。
<説明いろいろ・詳細>
- スピーカーは電話の子機を分解して得た超小型のものです。電源SWの反対側のの側面に取り付けました。薄くて場所を取らず小音量なら音質も良好です。
- 本体は4mmのシナ合板にニス(ケヤキ)を塗りました。
- カウンター機能も持たせたので、上面にも表示装置が必要で、8文字×2行の小型LCDを設置しました。
- 前面取付のLCDは、16文字×2行(HD44780 5v 1602)の廉価品で、amazonで入手しPCF8574TというI2cアダプターを付けています。表示面は幅70mmです。
- 上面LCDはAQM0802A(I2cバックライト付き)です。秋月通販で購入しました。
- 今回のタイマーは通常の消費電流が30mAを越えます。(メロディ演奏時はアンプが電力を使いますので、100mAも越えます。)2つのLCDは両方ともバックライト付きですし、これが無いと少し離れると見難くなりますので仕方が無いと思っています。
- 回路図にPicerFT(Pickit3)用の引出線が描かれています。今回はRB6,7 には何も接続されていないので、はんだ付けされた基板に直接HEXファイルを書き込めます。(通常は不要です。)
<PICプログラムについて>==>ソース(Hi_tech_c)
- 製作環境は、いつものMPLAB IDE Ver8.84 HI-TECH C v9.83です。Picも16F1827です。
- メロディは『大きな栗の木の下で』です。
- 2つのLCDはI2c接続ですので、アドレスの指定を変えれば、共用部分もあります。
- 今回のソースは900行を越えてしまい、コンパイル結果、メモリの使用量が94.4%になりました。初期のソースでは、あれもこれも・・と機能を加えると容量オーバーでコンパイル不可となってしまい、機能をそぎ落としてやっと稼働しました。
- ただ、PCF8574Tのアダプターを付けたLCDは少し不安定で、配線の取り回し等で、時々変な表示が出たりします。(大抵はリセットスイッチで戻りますが・・)
- LCDは電圧変動(降下)による表示の不安定度が増すので、単3×4=6vを電源として簡易定電圧回路(ZD)で5.6vに落とし、SBD(ショットキーバリアダイオード=電池の逆接続防止用)で更に0.4v程下げて 5.2v位で使っています。(16F1827はMAX5.5vまでは掛けられます。)(ほんとはSBDとZDの順番は逆の方が良いのですが、製作途中で電源を6vに変更したので・・)
- ビッグフォント(BigFont)については、下記に掲載しました。。
<後書き>
◎今回の製作は外見的にはスッキリと小型化に成功したかな?と思っていますが、時々前面の(1602)のLCDの表示が不安定になります。
◎PCF8574Tのアダプターが不安材料ですが、まだ不調の原因が特定できていないので、『納得』や『満足』はまだ!・・といった状態です。
カウントアップ動作中のLCDLCDでBig_Fontを表示
キャラクタ型LCDで大きな文字を表示する記事を見つけました。小型タイマーの表示にLCDを考えていたのですが、文字が小さく視認性が問題でした。 Arduinoの記事とライブラリは沢山見つかりますが、Picのは少なくて難しくて手に負えない感じでしたが、理屈は何とか理解できましたので、私流にでっち上げてみました。。
![]()
<使用部品について:>
- ◎PIC : 12F683:汎用性の高い手持ちのものを使いました。
- ◎LCD : KKHMF DC 5V 1602 LCD:16文字2行のバックライト付きです。
- ◎アダプタ: KKHMF I2c(PCF8574T) シリアルインターフェースモジュール。16本のピンヘッダーがLCDの端子穴に合致します。
<インターフェースの説明>
- 私の購入したのは、PCF8574Tを使ったもので、LCDとの対応は次のようになっている模様です。
LCD DB7 DB6 DB5 DB4 (BL) EN RW RS PCF8574T P7 P6 P5 P4 P3 P2 P1 P0 - (BL)はバックライトのon/off用で、"1"のとき点灯、"0"で消灯です。
- 表示の濃淡はインターフェースに取り付けられたVRで行います。中央付近よりMax寄りでやっと表示文字が確認できました。
- スレーブ・アドレスは、0x27 でした。
- 基本的にテスト回路は、I2c_LCDの物と同じです。
<テスト回路について>
- 開発環境は、MPLAB IDE v8.84 HI-TECH C v9.83です。
- 動作テスト用ですから、LCDにはカウントアップする数字(分:秒)が表示されるだけです。(画像参照)
- GP2につながるLEDは、main()のwhile_loopの動作確認のためです。コントラスト用のVRを動かさないと文字が表示されていないように見えます。
- Ic2での動作については、再記はしません。
<プログラムついて>==>ソース(Hi_tech_c)
- 16文字2行のLCDは16x2個の縦長の窓があり、元々はその1つずつに1文字を表示しますが、BigFontは横3桁x縦2行で大きな文字1つを表示するものです。
- 1つの窓は横5×縦8個の点(ドット)で構成されています。
- LCDには0x00~0x07(窓8個分)の自作定義文字(CGRAM)の領域がありますので、その1つずつの窓を大文字の部品として定義し、組み合わせて大きな文字を表示します。
- 行番号47~56はCGRAMに格納するドットのデータです。1バイトデータのようですが、実際に格納されるのは下位5ビット(横5ドット分)です。
- 行番号60~72は右端に示す数字データの部品の並びです。左から3個ずつ2行(段)に並べます。11番目にはコロンを入れました。
- Hyouji()では、先にTimeから分と秒に表示する数字を求め、後半にBigNum[11][6]からそのデータを呼び出して、3桁ずつ2段に表示しています。
- 表示文字が4桁ごとなのは、文字間を1桁空けるためです。
- 今回は大きな数字のテストなので、Timeのインクリメントは(タイマを使わず)delayによる0.5秒ごとです。
- ◎参照させていただいたページ
ありがとうございました。
- http://ja3rua.ddns.net/html2/pic/cgram.html
- https://woodsgood.ca/projects/2015/02/17/big-font-lcd-characters/
- http://arms22.blog91.fc2.com/blog-entry-439.html