画像をクリックすると拡大表示されます。
拡大画像からはブラウザの「←戻る」ボタンで戻ってください。
![]() |
![]() |
---|---|
製作したタイマー | 内部 |
MikroCをインストールしたので、とりあえず何か簡単なものを作ってみようと思いました。
作ったのはタイマーで、半田鏝などの電源の切り忘れ防止用です。
タイマー時間は3分、10分、30分、60分、120分を切り換えます。
スタート、ストップはセンターオフの両跳ね返りスイッチを使用しています。
手を離すとセンターに戻り、オフするタイプのスイッチです。
スイッチを上側に倒すとでオンし、タイムアップでオフします。
動作中にスイッチを下側に倒すと強制終了します。
動作中にスイッチを上側に倒すと経過時間は0になり、動作を継続します。
動作中に設定時間を変更すると強制終了します。
開閉容量は最大1200Wです。(電源コード、電源スイッチの制約によります。)
背面に別途、電源スイッチも付けています。
制御には8ピンのPIC12F683を使用しています。
制御回路の電源(5V)は1uFのコンデンサーの電圧降下を利用したトランスレス電源です。
出力の開閉には秋月のSSRキットを流用しています。
3端子電源は一般的なNPN出力のものを使用します。
PNP出力の低ドロップ型は起動する瞬間に数十mAの大電流を必要とします。
この回路では瞬時電流が流せないため、起動出来ません。
表題通り、MikroCを使いました。
ファームウエアのダウンロード
ファームウエアはZIP圧縮されています。
ソースファイルのみですので、コンパイルする場合は、プロジェクトを作成して、ファイルをプロジェクトに加えて
ください。
簡単な内容ですので、説明は不用かもしれません。
CCPの割り込みを1秒に1回、発生させています。
時間精度を、あまり問題にしないので、通常のタイマー割り込みで十分ですが、内部発振器の周波数精度に興味があったので、
CCP割り込みを使ってみました。
CPUクロックを2MHzに設定すると、内部クロックは1/4の500KHzで、サイクルタイムは2uSになります。
これを8分周して62500カウントすると1秒になります。
実際のタイマー時間は、2時間に設定したとき、+30秒でしたので、内蔵発振器は+0.5%程度の精度になりました。
発振周波数やCCPの比較値を微調整すれば、もう少し時間精度は上がりますが、必要無いので、そのままです。
スイッチの読み取りに、ビットフィールドを定義していますが、これもコンパイラの動作を確認するために使ってみただけ
です。
この例では、特にビットフィールドを定義する必要はありません。
ウオッチドッグタイマーはコンフィギュレーションではオフにしていますが、起動後、レジスタ操作でオンにしています。
PIC12F683の名称は12Fになっていますが、14ビットコアで16Fと同じ構造です。
8ピンのパッケージに多くの機能を詰め込んであるので、高機能で便利と言えなくもないですが、その分、簡単な用途に
使う場合、設定が煩わしいです。
クロック源やクロック周波数の設定等をしなければなりませんが、結構、判りにくいです。
ピンをIOポートに使う場合、アナログポートと兼用になっているので、デジタルポートに設定しなければなりません。
これは、最初から頭にあったのですが、コンパレータと兼用になっている事に目が届きませんでした。
レジスタ操作で「コンパレータを使わない。」と設定しないと、IOポートとして使えないようです。
最初、入力ポートに設定したはずのPINから、5MHzの方形波が出ていたので悩みました。
回路図や、ファームウエアは私の製作の紹介であり、他の人が作る事を目的にしていません。
もし、製作する場合は各自の責任で、お願いします。
簡単な回路ですが、AC100Vを使用するので、感電等の事故の可能性があります。
回路図に書かれていない、多くの制限事項があります。
例えば、電源コードの電流容量とか、SSR出力素子の放熱とか、構造的な強度、耐久性とか、いろいろあります。
ダウンロードしたソースファイルを2011年3月現在の最新の環境(MikroC PRO for PICVer4.60)
でビルドした場合、エラーが発生します。
上図でビットフィールド構造体の変数名を " bit " と定義した訳ですが、最新の環境では " bit " が予約語になってしまった
ことが原因です。
どのバージョンから予約語になったかは不明ですが、以前は通りました。
ビルドしたとき、意味不明のエラーメッセージが鬼のように出ましたが、" bit " が強調文字に表示されていたの
で判りました。
対策としては変数名を変える以外に無いので、安易に _bit と変更しました。
一方、byte の方は予約語になっていないので、このままでも良いですが、こちらも _byte と変えました。
MikroCでは細かい仕様が少しずつ変化していますので、今後のバージョンでは、さらに別のエラーが発生する可能性
がありますが、常にメンテナンスは出来ません事を了承願います。
尚、HEXファイルの方はチップが変わらない限り、今後も、そのまま使えます。