マイクロチップ社のマイクロコンピュータPIC16C/F84を使った製作例の
ハードウェア製作方法の紹介です。(「ゲームラボ’98/5月号に掲載)
さて今回からPICマイクロチップの使い方を実際の製作をしながら紹介して
行きます。今回は「入出力ピンの使い方」を「電子ルーレット」を作りながら
説明して行きます。
さて電子ルーレットとは何でしょうか?
電子ルーレットは、startスイッチを押すと12個の発光ダイオード(LED)でできた
ルーレットが光りながら回りはじめ、キーを離すとしばらくしてある所で停止
するという動作をします。
ただ光るだけではつまらないのでブザーも鳴るようにしてみました。
2.PICの入出力ピンの使い方
PICを電子工作で使うには、まず入出力ピンの使い方を知る必要があります。
何せPICは発振回路用と電源用を除けば入出力ピンしか無いのですから。
この入出力ピンは文字どおり入力にも出力にもどちらにも使えます。
しかもプログラムでどちらにするかを設定出来るので、プログラムを実行して
いる最中に入出力を切り替えて使うことも出来てしまいます。
この入出力ピンの入出力が、プログラムの何に関係するかというと、図-1に
示すように、PORTAとかPORTBとかの名称で呼ばれる「レジスタ」として
扱える様になっています。
このレジスタという言葉は、マイコンを使うようになると頻繁に出てきますが、
これは、マイコンの中にある一時メモリで、演算や入出力の際の高速な
データ一時記憶場所として使われます。
例えば図−1に示すように、PORTA上から2ビット目の出力ピンを「1」の
状態にするには、PORTAレジスタの2ビット目に"1"を設定すれば良いこと
になります。出力ピンが「1」の状態というのは、電源電圧とほぼ同じ電圧
の状態です。逆に「0」という状態はほぼ0Voltとなります。
これで出力ピンを0Voltにしたり、5Volt(電源電圧)にしたりすることが出来
ることになります。
それでは、この入出力ピンのIC内部回路はどうなっているのでしょう?
簡単に表すと図-2のようになっています。この回路の構成はトランジスタ
2個が上下の相補するような格好で接続されているため、相補接続構成
(トーテンポール)と呼ばれています。
この動作は、まず入力モードに設定されると、P,N両方のトランジスタが
OFF状態となるため、外部から加えられる電圧だけに影響されるように
なり、下側のTTLゲートを介してデータ入力が行われます。
つまり外から入出力ピンに接続されている相手が、2V以上の電圧が
あると"1"として、0.4V以下だと"0"としてPORTレジスタに読み込まれます。
出力モードに設定された時には、PORTレジスタに"1"を設定すると、
図のPのトランジスタがONとなるため、入出力ピンはVdd(5V)側の電圧と
なり、図の@の様に、Vddから入出力ピンへ電流が流れ出る様に動作し
ます。
逆に、"0"をPORTに設定すると、図中のNのトランジスタがONとなるため、
入出力ピンはVss(0V)側の電圧となり、図のAの様に入出力ピンからVss
に電流が流れ込むことになります。
3.発光ダイオードの点灯制御
今回のルーレット製作では、発光ダイオード(LED)を点灯/消灯させ
ますが、LEDを上図の図-2の様に接続します。
こうすると、出力モードでPORTに"0"を設定すると、
Vdd(5V)→抵抗→LED→入出力ピン→Nトランジスタ→Vss(0V)
というように電流が流れLEDが光ります。
逆に"1"が設定されると両端がVdd電圧となるため電流は流れません
ので、LEDは消えることになります。
この流れる電流の量は図中の抵抗で制限しますが、この抵抗の値は概略
下記で決まります。
R = (Vdd - Vled)/I = (5 - 2)/15mA = 200Ω
ここで Vdd:電源電圧(通常は5V)
Vled:LED内降下電圧(通常は約2V)
I:LEDに流す電流(5〜20mA位)
LEDに流す電流が大きいほど明るく光りますが、PICの入出力ピンに流す
ことが出来る最大電流は25mAに制限されていますので、これ以上の大電
流を流すと、PIC内部の入出力ピンにつながっているトランジスタが壊れて
しまいますので気をつけて下さい。
4.キーの接続方法
今回ルーレットはstartキーをPICの入力素子として使います。
これはどうやって接続すれば良いのでしょうか? 答えは図-3の様にします。
こうすると入出力ピンには、スイッチがoffの時は抵抗を介してVddの電圧が
加わっているので、PORTに読み込むと"1"となります。
キーが押されると、入出力ピンはVss(0V)の電圧になってしまいますから、
PORTには"0"として読み込まれます。
これでキーを押したことが区別されることになります。この時の抵抗は電流を
ほとんど流さなくても電圧さえ区別できれば良いので高抵抗でOKですが、
余り電流が少ないとキーが接触不良を起こし完全にVssにならないので
0.5mA位は流してやりましょう。(結局10KΩ位)
5.入出力ピンの制御方法
それではこの入出力ピンを制御するプログラムの書き方を説明しましょう。
まず入出力の設定方法でが、これには入出力設定専用のレジスタ「TRIS
レジスタ」が用意されています。
例えばPORTAならTRISA PORTBならTRISBというように対応し、かつそれ
ぞれのビットも対応しています。このTRISレジスタに"1"をセットすると、
それに対応する入出力ピンは入力モードに、"0"をセットすると出力モード
になります。
例えば、今回のルーレットでは、キー入力はPORTAのRA4に、RA0〜RA3と
PORTBのRB0〜RB7はLED用の出力としていますので、リスト1のようにプロ
グラムを書きます。
ここでTRISレジスタにセットするためには、TRISレジスタがあるデータメモリ
が「Bank1」にあるのでBankの切替えが必要です。
このBankとはデータメモリを128バイト毎の4つの空間に分けたもので、
それらを、それぞれBank0からBank3と呼び、STATUSレジスタに設けられた
RP0,RP1ビットで切り替えて使います。
このBankとRP0,RP1、及び命令の関係は図-4で表されます。
即ち、STATUSの中にあるRP0とRP1でBankを指定し、その後汎用レジスタ
の場所を指定するために命令のオペコード(opcode)部分を使います。
次に実際の入出力ピンへの出力をするプログラムの書き方ですが、リスト2
に示すように汎用レジスタと同じ扱いで入出力命令を書くことが出来ます。
6.全体ハードウェアの構成
この電子ルーレットをPICで実現するための回路図は図5、パーツリストは
表1です。
回路を簡単に説明すると、6個づつの赤と緑のLEDが、PICの入出力ピン
に1個づつ接続されています。
電流制限用の抵抗は、本来ですと各LEDに1個づつ必要なのですが、
今回は、常時必ず1個しか点灯しないので、6個づつまとめて2個の抵抗
で済ませています。
残った1個の入出力ピン(RA4)には、startスイッチとブザーを鳴らすため
のタイマーIC(μA555)を接続します。
このRA4ピンは、常時は入力モードとしてキーの入力を受け付け、ブザー
を鳴らすときだけ出力モードにして、一瞬の間だけ"0"を出力します。
そうすると、あとはタイマーICのワンショット動作の働きで、一定時間だけ
タイマの出力ピン3が「High」となってブザーが鳴ります。
この一定時間を決めるのがICに接続されている10μFのコンデンサと10KΩ
の抵抗です。(詳しくはタイマICのデータシートに依る)
またstartスイッチがONの間は、タイマの2ピンが"0"のままとなるので
ブザーは連続して鳴ります。
あとは、電源回路ですが、5Vの3端子レギュレータだけで構成しています。
今回は携帯用を考えて9Vの電池を供給電源としています。消費電流は
20mA位ですから結構長く使えます。
ブザーには圧電ブザーを使っていますが、購入時には発振回路内蔵タイプ
ということで電源さえ接続すれば音が出るタイプを購入して下さい。表−1 パーツリスト
記号 説 明 規格、品名 数量 アクリルケース 100x80x35 1 プリント基板or汎用基板 10cmx7.5cm 1 SKT1-4 ICソケット 8,18pin 各1 BZ 圧電ブザー FUJI EB20 1 REG 3端子レギュレータ S81350または78L05 1 BAT 9V電池 乾電池006P 1 電池アダプタ リード線付き 1 LED1〜12 発光ダイオード 赤、緑6個づつ 12 XTAL クリスタル発振子 10MHz 1 IC1 マイクロチップ PIC16F84-10 1 IC2 タイマーIC μA555相当 1 抵抗 1/4W 2.2KΩ 1 〃 200Ω 2 〃 10KΩ 1 〃 470Ω 1 〃 5.1KΩ 1 コンデンサ 0.1μF(104) 1 〃 20pF 2 電解コンデンサ 10μF16V 2 〃 47μF10V 1 SW1 基板用3Pトグルスイッチ AC125V 0.3A 1 SW2 基板用押しボタンスイッチ 1 その他 スペーサ,ネジ,ナット 少々
7.製作しよう!
さて実際の工作ですが、基板は製作例はプリント基板を使いましたが、
使用したプリント基板のパターン図と回路図のCADデータを下記に
置いておきますので、ダウンロードしてお使い下さい。
これらを見るには、HiWIRE Uをお使い下さい。
写真の様に全体を1枚の基板に組込み、
ICにはICソケットを使い、ブザーは両面接着
テープで基板に固定しました。
12個のLEDは円周上に等間隔で配置します。
ケースには透明アクリルケースを使い、2個の
スイッチ用の穴と、基板固定用のネジ穴をあける
だけなので簡単だと思います。
部品類で背の高いクリスタル発振子だけは寝か
せて取り付けます。
基板をスペーサで浮かして取り付け、発光ダイ
オードが丁度良い高さになるようにしています。
パターンは幅広で出来ているので安心して
使えます。
組み立て後のハードウェアの動作チェック方法は、PICを実装しないで電源
ON後、テスターで電源の5Vが正常かどうかチェックし、次に、PICのソケット
の入出力ポートに相当する所を、マイナス電源にクリップケーブルなどで
仮接続してLEDが点灯すれば正常です。これを12個分確認します。
その後は、タイマICを実装したあと、startキーを押してブザーが鳴れば
これも正常です。