スタートスイッチを押してから,10秒毎に経過時間を知らせてくれる装置を作りました。
現在,感光基板の焼付け時に腕時計を見ながら太陽光線で焼き付けるという原始的な方法でやっています。そのとき,基板等を両手で持っていますので,腕時計が見にくいのです。
そこで,見なくても音で時間を知らせてくれる物があったらいいなと思ったわけです。
タイマーだと,一度時間が過ぎてしまうと,その後あと30秒だけ追加みたいなことができません。
何というものなのか,とりあえず「計時鈴」としてみました。
計時鈴は,X分Y十秒のときに,モールスで「X,Y」と知らせてくれます。
最大計測時間は,プログラム作成で区切りの良い10分となっています。誤差は,10分で約3秒で,作成目的からすると充分です。
この装置を作ったときに興味深かったのは,PIC12F629の内臓発信機の精度です。
最初に,PICに内蔵されている発振器の校正係数を使わないままプログラムしたところ,10%位の誤差が出ました。
次に,発振器の校正係数をプログラムに組み込みましたが,それでも1分で3秒位つまり5%位の誤差が残りました。いくら簡易計時装置といっても,この誤差は大きすぎます。
ここで,基準時間を計測している「タイマー1」のTMR1Hレジスタの値を調整して,実用になる程度にまですることはできます。
が,データシートを良く見ると,ベストオペレーションのためにはVDDとVSSを可能な限り短い配線でデカップリングして下さいと書いてあります。また,発振周波数の特性表にも,0.01と0.1μFでデカップリングしたときと,条件提示されています。
そこで,回路図のVDDのところにある0.01と0.1のコンデンサを追加したら,10分で3秒位の誤差になりました。
なぜ,コンデンサの追加がここまで効くのか不思議ですが,ともかく満足できるようになりました。
レベルメータICが市販されていますが,結構高価です。
ADコンバータ内臓のPIC16F818を使って,対数(LVM10lg)および線形(LVM10ev)のレベルメータICを試作してうまくいきまし。
いずれもタイマー1を使って約20ミリ秒毎に,AD変換を繰り返します。入力レベルが小さい方から大きくなるにつれて,PORTB0〜7,PORTA6,7の順に点灯します。入力はPORTA0,AD変換の基準電圧は,PICのVddです。
対数メータでは,Vddの1/1024,1/512,1/256・・・1/2以上かどうかを判定して,レベルに応じてLEDを点灯させます。
線形メータでは,Vddの約0,10,20・・・90%以上かどうかを判定して,レベルに応じてLEDを点灯させます。ただし,0%については,ノイズでメータがピコピコしてしまいますので,実際には約2%以上で点灯するようにしています。それでも,ピコピコすることがありますので,入力部にノイズカットのパスコンが必要です。
アナログ入力は,PICの絶対最大定格から,−0.3V〜Vdd+0.3V以下を守る必要がありますので,過電圧保護をするなり注意が必要です。
必要最小限のシステムとして16F818を選択しましたが,819の方が安く出ているようで,殆んどそのまま819に移植できると思います。
また,この記事を書くためにコードを再度見て気がついたのですが,線形メータの「約10%云々」の「約」の部分をもう少し追い込めそうです。近いうちに,精査してみたいと思います。