青い電子サイコロ...page.1/4


はじめに...

サイコロ(ダイス)はチンチロリンやマージャン、すごろくなどゲームに使われる他、何かを決めることにも使えます。
朝礼のスピーチ当番を決めたり、バーベキューのクルマ担当を決めたり...
このサイコロをブルー発光ダイオードを使って作りましょう。



概要

サイコロは正六面体に1〜6の数字を示したもので、発光ダイオードに置き換えると、7個の発光ダイオードを4つの組み合わせで点灯制御すると実現できます。
その様子を下図に示します。





ここでは8ピンのマイコンで知られるPIC12F629を使って制御することとします。



プログラム

dice.asm
dice.asmは充分理解できるように多くコメントを記述しておきました。

dispサブルーチンは呼び出す毎に数値(saimeレジスタ)が変更されるようになっています。
cont1レジスタは待機中に1〜12まで高速に更新され、これを最後の低速回転数を決定しています。
サイコロの数字はスタートスイッチが押下されたときのcount1レジスタの値と、スタートスイッチが離されたときのsaimeレジスタの値で決定されます。

電源のOFFはPIC12F629をSLEEPさせることとします。何も動作していないときは約30秒後にSLEEP状態にさせます。
SLEEPからのWake-UPにはGP3端子の状態変化により行なわれます。
状態変化割り込みだけ有効にして、GIEビットは立てずに実際は割り込み動作はさせません。あくまでもWake-UPさせるだけになります。
このため割り込みベクタORG4の記述はありません。

クロックは内部発振(4MHz)を使います。
尚、内部発振回路で用いる場合、個々の発振周波数にバラツキがありますから、発振周波数を補正する必要があります。
キャリブレーションビットと呼ばれる周波数補正値を調べて、asmファイルの最終項を書き直してビルドしましょう。
このためにHexファイルは載せられません(補正値は正しい値にしないと意外にかけ離れた発振周波数となります)。
このキャリブレーションビットはプログラムする前に(購入したばかりの)プログラムエリアの最終に書き込まれています。

下図は秋月電子:PICライターVer.4を用いて、購入したばかりのPIC12F629のプログラムエリアを読み込んだものです。この場合のキャリブレーションビットは「2C」であることが判ります。だいたい20h〜40hの範囲になると思います。
このキャリブレーションビットは忘れないようにPICの裏側にシャーペンなどで記入しておくといいでしょう。






回路図

回路図だけを見て製作される場合はPIC12F629の電源の極性に注意です。特にオペアンプに慣れている方は充分注意です。
私は逆に(8pinに電池のプラス)接続して3個のPIC12F629を壊しました。
回路図は見易いように電源ラインに色を付けてみました。






回路の説明

PIC12F629は8ピンのマイコンで、電源となるVddとVssの端子を除いてGP0〜GP5の6つの端子をプログラムで使い分けることができます。
今回は内部発振回路を使いますからGP0〜GP5の端子を全て入出力(I/O)として使います。





ただし、GP3の端子だけは入力専用となりますからスイッチはGP3へ接続することとなります。
スタートスイッチはSLEEPからWake-UP(電源)せる役割とサイコロを動作させる役割を果たします。

残りはGP0〜GP2、GP4、GP5の5つあります。
サイコロの目の表示は概要で記述したように4つのラインがあれば可能ですから、1つ余ります。
この1つをサイコロが転がる様子を音でも楽しめるように圧電素子を接続しました。

圧電素子とシリーズの抵抗:2.2KΩは音量を抑えるもので470Ω〜3.3KΩの範囲で決めて下さい。音を大きくする場合は抵抗値を低くします。

PIC12F629の出力電流は1ピン当り25mA、総合で125mAを取り出すドライブ能力があります。
電源を4.5V、ブルーLEDのVfを3V、ブリーダ抵抗を240Ωとした時、(1個当りのLEDの電流)約6mAですから、過負荷無くドライブしてくれます。
高輝度ブルーLEDは6mAも流せば充分な明るさになります。このブリーダ抵抗は120Ω〜330Ωの範囲で選択されることを奨めます。

GP3端子から接続される抵抗:10KΩはプルアップ抵抗(普段のデジタルレベルを「H」としている)です。PICはオプションレジスタでプルアップ抵抗の設定ができますが、PIC12F629ではGP3端子だけプルアップ抵抗の設定は出来ません。ここのプルアップ抵抗は4.7KΩ〜47KΩの範囲で選択して下さい。


TOPNEXT