電子工作2 –12F629を使う暗くなると赤/黄/緑のLEDsが順次、徐々に点滅を繰返す回路
概要
発泡酒1缶の値段で買える最新のPIC12F629とは、どんなものか、どうやってプログラムをつくるのかいったことを試すべく、BasicコンパイラPicBasic Pro(PBP)を使って(他の言語はわかりません)実験してみることにした。
具体的には、この言語の中のPWM(パルス幅変調)というコマンドを使って、赤、黄、緑の3個のLEDを順次、徐々に明るくし、ピークを過ぎたら、今度は徐々に暗くしていき、消灯。次のLEDが同じことを繰り返すようにする、というものです。明暗を感知して(暗くなったら)、上記一連のルーチンが動き出すように、CdSセンサ(秋月で入手、暗:50K位、明:2K以下位)を取付けてあります。
回路作成・プログラミング
実際に回路を組み、プログラムを作成するには、12F629のスペックが掲載されているマニュアルに当たり、PBP(最新版V2.45)のコマンドPWMの意味を理解し、試行錯誤繰り返しながらプログラムを作成し(MicroCode
Studioを使用)、ライター(AKI−PIC プログラマーv.6.2.195 使用)で焼き込む作業が必要です。
12F629は、8ピンのICに機能が一杯詰まっているので、各ピンが複数の役目をし、その選択や設定はステートメントを通じて、あるいは、ライターで焼き込む際の設定で行います。結構複雑です。このICにはクロックが内蔵されていて外付けが要らず、ピンを最大限制御用に使えます。
下図が、回路です。電源は電池2本(正式には2.0-5.5V)で十分動作します。
MicroCode
StudioというPBPを組み込んだ開発環境で、以下のようなプログラムをつくりました。この環境では、説明文を含め日本語が使えないので、ちょっと分かりにくいかもしれません。先頭に“‘”の付いたものはコメント文で、プログラムには影響を与えません。実際のプログラムはTRISIO=%000100 から Goto CdSin 迄です。 このBasicで書いたPWMF629e.basというファイルをコンパイルして PWMF629e.hex
というヘキサ・ファイルに変え、それをライターを使って PIC12F629 に書き込んで(焼き込んで)やります。この時、ライターの設定を、内部クロックを利用(FOSC
– INTOSC)するや、MCLR を Internal にしたりします。
プログラム(Basic):
'PWMF629e.bas 2004.1.22
'Experiment
on the use of PWM
'Three
LEDs (GPIO.0-red, GPIO.1-yellow, GPIO.4-green)
'smoothly
change their brightness (dim-bright-dim) one
'after
another (not at the same time) when the input
'from CdS (GPIO.2) is "0" (when changed to dark).
TRISIO=%000100 'GPIO.2 only - input
CMCON=7 'Disable Comparators.
WPU=%00000100 'Weak Pull-Up on GPIO.2 only
OPTION_REG.7=0 'Enable Weak Pull-Up's
LR var GPIO.0 'LED red on GPIO.0
LY
var
GPIO.1 'LED yellow on
GPIO.1
LG
var
GPIO.4 'LED green on
GPIO.4
level var byte 'level=variable
GPIO.0=0 'Turn off LED at GPIO.0.
GPIO.1=0 'Turn off LED at GPIO.1.
GPIO.4=0
'Turn off LED at GPIO.4.
CdSin:
If GPIO.2=0 then Loop
Goto CdSin
Loop:
For level=0 to 255 'Fade-up routine
PWM LR, level, 5 '0 -> 255
Next level '5 cycles for each level
For level=255 to 0 step -1 'Fade-down routine
PWM LR, level, 5 '255 -> 0
NEXT level
For level=0 to 255
PWM LY, level, 5
Next level
For level=255 to 0 step -1
PWM LY, level, 5
NEXT level
For level=0 to 255
PWM LG, level, 5
Next level
For level=255 to 0 step -1
PWM LG, level, 5
NEXT level
Goto CdSin
'Note:
'Programmer's configuration must be set as follows:
'1) FOSC - INTOSC(GP4:I/O); WDTE - Enable; PWRTE - Enable
'MCLR - Internal (so no MCLR-resistor-+Vdd connection
'required!!); BODEN - Enable; CD - Disable; CDP - Disable.
'2) Comment: I made a spelling mistake on "O" (oh) and "0" (zero) and
'the error message was "bad data type" (took hours to recognize and fix it !!)
動作状況
ボード上に組み上げた回路です。この写真ではNiCd 3本の電池から約3.6Vが供給されています。CdSセンサはボードの中央付近の左下部に見えます。その感度の設定は、VR(10K、青い円形のもの)で行います。
ピンがまだ2本空いているので、違った色のLEDが増やせます。 今晩も、入り口ドアの上にある窓ガラスの裏側で光り続けています。