電子工作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が増やせます。 今晩も、入り口ドアの上にある窓ガラスの裏側で光り続けています。

 

 Menu Pageへ戻る    

Topへ戻る