7セグ時計をつくってみる-1

7セグメントLEDを使った時計を作ってみます。
コンセプトは、手持ちの部品だけで作ることと、楽をして作ることです。


手持ちの部品は、カソードコモンの7セグLED*1の常時点灯や、買ってみたけど使っていない電気二重層キャパシタ*2を瞬断時のバックアップ電源として搭載するとかしてみます。
ケースもなんかで使っていた150x100程度の穴ぼこで天板のないアルミケースの下側のベースになる部分が、外に置いてある我が家の燃えないゴミのかごの中に入っていたので、再利用します。丁度良くゴム足もついてたし。
適当にアクリルパネルを切ってフロントパネルと天面にして、アニメのロボなんかで使われているでっかいマイナスネジ*3で止めれば、なんとなく格好よくなるはずです。
電源は、前買ったI/O-DATAのルータに、5V/2Aのスイッチング方式のアダプタが付属していたので、ちょうどいいです。ルータをぶっ壊せば受け側のコネクタも取れます。


マイコンはPICを使うのを辞め、トラ技のH8-Tiny基板など、フラッシュの書き込みに抜き差しのいらないピン数の多いものをつかいます。
寝かせててもしょうがないし、日本製の部品製品を賞賛するわりには中国製のMPUを愛用しているってのも、妙な話ですし。
ソースコードはCだけで作ってみようと思います。でも楽ならば、割り込みルーチンのみだけアセンブラというのもありです。
PICの場合は、コンパイラが無料じゃないし、メモリがパンク方式なので結局アセンブラを使ったほうが分かりやすいし速いので、いつもいつもアセンブラで記述する羽目になってしまいましたが、そろそろその悪癖から卒業しようと思います。



実は以前PICを使って7セグ時計の製作に挑戦したものの、みごとに失敗しています。


ハードウェア的な失敗は、機能追加による仕様変更に対応できなかったことです。
当初は単なる時計機能だけ考えていたのに、ある程度動いたら目覚ましやストップウォッチ機能などを盛り込みたくなったが、その為のボタンを追加できる設計ではなかった。18pinのマイコンではI/Oピンが足らなくなったのです。
ソフトウェア的な失敗は、低消費電力を意識しすぎてメインクロックに32Khzを入れる暴挙に出たことです。
割り込み処理による7セグのダイナミック点灯だけでCPUパワーの半分を喰ってしまい、通常の時計表示ならともかく、時間設定などの込み入った処理のルーチンがまともに動かなかったという。
ちなみに、32Khzで走るMPUはμAオーダーというIntelAMDなど一般PCの世界からすると嘘みたいな低消費電力で動きますが、LEDの点灯で80mA弱使っていたので全く意味がないことに気がついたのも、つい先日回路図を見返していた時だったりします(ぉぃ。


今思うに、PICから時計用水晶を外し内蔵RCクロック4Mhzで走らせて、余った2ピンにモードスイッチとブザーをつけたら、アップダウンカウンタとキッチンタイマーのような、誤差があまり気にならない用途に転用できた気がします。
しかし製作当時は、失敗したということにばかり気をとられて、ほかの用途に使うというような柔軟な考えにはなれなかったのでそのままお蔵入りになり、これに使われる予定だったPICマイコンは、とあるコントローラの制御回路として使われて、いまでも年に5回くらい稼働してます。


ということで前回の失敗から時も経過し、やる気も湧いてきたので再度挑戦。
今度は余裕を持った設計にしてみます。
MPUはピン数が余るヤツを使い、メインクロックは素直に4Mhzくらいで走らせ、サブクロックに32Khzを入れ、、電池ではなく商用電源で動作させます。
ちなみにマイコン用に下ろす前に、Linuxのコンソールで動く時計のコードを作っていまして、既に完成してたりします。
キー入力をボタンに、printf出力を7セグ用に書き換えれば、一丁上がりのはずです。
PICみたいにアセンブラで書きなおす必要はありません。


さて一円も掛けずに作れるでしょうか。

*1:普通マイコンのダイナミック点灯で使う場合は、アノードコモンのものを使う。マイコンのピンの入出力をタイミングよく切り替えることで、7セグの出力ピンとボタンの入力ピンとを兼用することができ、ピン数を減らせる為

*2:今でこそ使用例がいろいろありますが、6年くらい前はなんに使っていいかさっぱりでした

*3:普通ロボならあのサイズでは六角ボルトを使う…。アニメ世界はマイナスネジに夢見すぎ