8ピンPICマイコン時計の製作
不意にLEDチカチカ工作がしたくなったので、Microchipの8ピンPICマイコンPIC12F675を使って時計を作ってみました。
目標は
- 8ピンPICマイコン1個で制御する
- LEDをたくさんチカチカさせる
- 部品はなるべく増やさない
です。
製作の経緯・過程はこちらをご覧ください。
回路
まず先に回路図です。LEDだらけです。
8ピンPICマイコン1個には出力ポートが5本あります。この5本の出力ポートで何個のLEDがチカチカできるのか簡単なテストで確認してみたところ、30個という結果になりました。(N本の出力ポートでN * (N+1)個のLEDのうち任意の1個が点灯できる。)
LEDが30個使えるということは7セグメント配置で4桁表示できるということなので、今回の時計では時:分をそれぞれ2桁ずつで表示することにしました。
次に基準信号の取得方法ですが、時計というのは案外高精度が要求されます。時計としての実用性を持たせるには月差30秒以内、日差1秒以内にしたいところです。安物クォーツ時計にも劣る精度ですが、それでも日差1秒の精度は約12ppm相当とかなり高いものです。
PICマイコンの内蔵クロックは一応キャリブレーションが可能ですが、その刻みは数%ごととかなり荒いので、内蔵クロックをそのまま基準信号に使用することはできません。時計に使えそうな精度の基準信号の取得方法には
- 単体の高精度発振器を使用する(例えばこういうもの)
- 長波標準電波(JJY)を使用する(電波時計で使われているもの)
- 商用電源の周期を使用する
等がありますが、今回は最後の商用電源(AC100V)の周期を使用することにしました。PICにはフォトカプラを使ってゼロクロスを絶縁入力しています。
ハード製作
製作にはブレッドボードを使うことにしました。配線が大変なことになるのは目に見えていましたが、手軽さを優先させました。
まず下書き的な配線図を作りました。
汎用CADで電気シンボルがないので、LEDをクサビ型で表現しています。右側の白線の四角がPIC、横の青線がブレッドボードの電源線、縦の水色線がブレッドボード自体による導通、その他の色の線がジャンパー線です。
ちょっと分かりづらいですが、クサビ型は7セグメントの形に4桁並べてあります。いちばん左の1桁は1か2しか表示しないので、7セグメントのうち点灯しない左上の1つを省略しています。
この配線図に従ってジャンパーを飛ばしたのがこれです。
LEDも差し込んだ様子。ようやく7セグメントが分かります。
LEDは、手持ちの都合で、もともと5連になっていたものを切り離して使用しました。それでも足りない分は形と色が似ているもので代用。右側の丸いのは、時と分のあいだのドット用です。
ここまでできたところでPICを挿してLED点灯のテストをしていたのですが、最初の配線図の配線にバグが多数あり、修正しているうちにどんどん汚く・・・
それでも、ひとまず点灯動作を確認するところまではできました。非常に暗いのは、回路構成の都合上全数同時に点灯することができないため、LEDを1個ずつダイナミック点灯しているためです。
フォトカプラ周りも追加し、バグ取りを終えた最終的な配線図はこんな感じになりました。
実物はこんな感じ。
テストをしているうちにPIC12F675を壊してしまったので、急遽PIC12F683に変更しました。
フォトカプラは、手持ちの都合で交流入力用のTLP626-2(2回路入り)を使用。
ソフト製作
次はソフト側です。時計の仕様はこんな感じにしました。
- 時刻表示は0:00〜23:59の24時制表示
- SW1を1回押すと「時」設定モード
- もう1回押すと「分」設定モード
- もう1回押すと通常表示モード
- 通常表示モードでは時刻表示の間のドット(「:」)を1Hzで点滅
- 通常表示モードでSW2を押すとテストモードON/OFFを切り替え
- テストモードをONにすると、時刻のカウントアップが600倍速になる(「分」が0.1秒ごとに増える)
- 設定モードでは「時」または「分」を点滅表示
- 設定モードでSW2を押すと「時」または「分」を1つ増やす
- そのままSW2を押しつづけると、1秒後から0.2秒ごとに1つずつ増やす
- SW1,SW2の状態取得にチャタリング防止用の50msフィルタ
- AC電源からの基準信号を(フォトカプラ経由で)取得
- 基準信号取得にノイズ防止用の3msフィルタ
- 基準信号が30ms取得できない場合、現在時刻をEEPROMに保存
- 初期化時、EEPROMに現在時刻が保存されていたら、その時刻で初期化
- 初期化時、バナー(「HELLO」)表示
- 初期化時、実測した基準信号周波数を表示
- 初期化時、基準信号の周波数(50Hz/60Hz/100Hz/120Hz)判別
基準信号は、直流入力用のフォトカプラ(TLP521等)に交流を入力すると50Hz/60Hzに、交流入力用のフォトカプラ(TLP626等)に交流を入力すると100Hz/120Hzになります。また半波整流後だと50Hz/60Hzに、全波整流後だと100Hz/120Hzになります。
いちおうどの周波数が入っても大丈夫なように作ったつもりですが、居住地が50Hz地域なので60Hz地域での動作は確認していません。
ソフト制作の過程を見てもしょうがないと思うので、結果をどうぞ。と言っても、追試する人はいないと思いますが(笑)
当初使用予定だったPIC12F675向けにコンパイルすると、ROM容量1024ワードのうち969ワード、RAM容量64バイトのうち60バイトの使用量で、何とか収まりました。
動作の様子
動作の様子です。
5/22/2007 作成
7/28/2007 作成日追加
12/12/2007 製作の経緯・過程へのリンク追加
戻る