PICを使った30分、60分オフタイマーの製作

PICを使ったオフタイマー製作の動機

 私が寝室で使っているテレビのマイコンに不具合があり、リモコンで消したテレビの電源が勝手に入ったり、オフタイマーが働かなかったりしていました。テレビ自体が古いので直す気にもなれずそのままになっていました。
  PICマイコン がなんとか使えるようになったので、PICの学習も兼ねてテレビにも使えるオフタイマーを作ってみました。うまくできましたので紹介します。PICマイコンPIC12F629と秋月電子通商のソリッドステートリレー(SSR)のキットを利用して作りました。
 PICのアセンブラープログラムはフリーソフトのTera-Padエディターで作成しました。PIC開発ツールはMicrochip社のMPLAB IDE Ver.7.4、PICプログラムの書き込みは秋月のAKI-PICプログラマーVer.4を使いました。
 もちろん、テレビ以外にもラジオやラジカセ、時間の変更や放熱板の変更でエアコンでも使えるようにできます。
2007.06.04


スポンサード リンク


30分、60分オフタイマーの製作方法

30分、60分オフタイマーの回路図

PICを使ったオフタイマーの回路図

製作の注意点と使い方


スポンサード リンク




PICアセンブラープログラム

PICで正確なタイマープログラムとするには

 できるだけ正確な時間のタイマーにする為に工夫したところを紹介します。プログラムはアセンブラーで作成しています。
 要するに500mSを遅らせるサブルーチンプログラムの中の2mSを作る部分で、PIC内部クロックが正確ならばこの精度をきっちり2mSになるようにしたことです。500mSのサブルーチンの誤差はサブルーチンコールも入れて+5μS程度です。プログラム上での精度は1/100,000以下です。
 私がプログラム作成の参考にした秀和システムの「やさしいPICマイコンプログラミング&電子工作」高橋隆雄著 ではgoto命令を1サイクルとしていますが、これは間違っています。
(128ページにPIC16F628のgoto命令は1サイクルと書いてあります。また4μS*250=1000μSと言っておきながら、250でなく240をセットしていると歯切れの悪い表現になっています。それなら5μS*200=1000μSではありませんか。)
(ラーメンタイマーの記事(PIC12F629を使用)で248ページの1mSを作る部分で4*250=1000μSとしています。正確にはgoto命令が2サイクルなのでnopをひとつ減らす必要があります。)

 PIC12F629のgoto命令は2サイクルが正しいのです。いくら実験しても正確な時間にならないのでよく調べてみてわかりました。
 また最初のDLY_1ループでできるだけサイクル数を多くした方が正確な時間にすることができます。これはレジスターが8ビットなのでループ回数は256以内に制限されるので、サイクル数を多くするとDLY_1ループの時間が長くなり、このループ外の誤差が同じなら誤差を少なくすることができるからです。このサイクル数を8としましたので、内部クロック4MHzでは1サイクル=1μSなのでここで8*249=1992μSとなります。
 次にDLY_2を一巡するサイクル数を考えると前半で( )でくくったサイクル数の合計は6サイクルで6μSです。後半では、本来のDLY_1部分の8サイクルを除いてやると2サイクルで2μSとなります。クロックが正確なら合計で正確な2000μSとなります。

DLY_500 ;500mS                 ;         DLY_500 loop
movlw   d'250'      ;             {1} 2mS*250=500mS
movwf   CNT2        ;             {1}
DLY_2   ;2mS                   ;  DLY_2 loop     DLY_2 を一巡する時間 6+ 8*249 +2=2000μS
movlw   d'249'      ;      (1)    (1) 1cycle=1μS
movwf   CNT1        ;      (1)    (1)
nop                 ;      (1)    (1)
nop                 ;      (1)    (1)
nop                 ;      (1)    (1)
nop                 ;      (1)    (1)
DLY_1                   ;  DLY_1 loop
nop                 ;1      1      1
nop                 ;1      1      1
nop                 ;1      1      1
nop                 ;1      1      1
nop                 ;1      1      1
decfsz  CNT1,f      ;1      2      2  (TMP_CNT1が0になると2サイクル)
goto    DLY_1       ;2                (goto は2サイクル)
decfsz  CNT2,f      ;       1    1+(1)
goto    DLY_2       ;      (2)
return              ;           (1)+{1}

オフタイマーのアセンブラープログラム

 次に私の作成したアセンブラープログラムを置いておきます。ファイル名はtimer30_60.txtとなっていますので、右クリックでダウンロードしたら拡張子をasmにリネームして使ってください。
timer30_60.txt

完成した基板と周辺機器

オフタイマー基板等の写真  左からDC5V用の携帯電話充電用電源アダプタ、秋月のSSRキット、PIC12F629を使ったタイマー基板です。ケースに入れる前の状態です。何度もPICのプログラムを書き換えて試せるようにICソケットを使っています。
 PIC12F629でタイマーを作る場合はセラロックか水晶発振子を使った方が良いのですが、内部発振でもそこそこの精度があります。また回路が非常に簡単なのも魅力です。



振幅変調波形
as76.netはインターネットの利用者へ有益な情報を提供することで世の中に貢献するように努力しています。

スポンサード リンク