特集1 Mission1 岩塩ランプで癒される

岩塩ランプ・プログラム(LED_M1)の概要

 プログラムはMPLAB IDE7.50を用い作成しました.ソース・ファイルとHEXファイルを用意しました.HEXファイルはPIC16F648Aに秋月通商のAKI-PICプログラマV4構成で書き込みテストしたものです.また、JDMアダプタとIC-progV1.05Dのソフトでの書き込みテストしました。
 ソース・プログラムは必要があれば,MPLAB IDEで修正し,動作を変更することができます.

PICの使用条件

 PIC16F648Aを次の条件で使用しています.
 -クロックは内蔵の4MHzとしています.
 -RA0はデジタル出力ですが、使用していません
 -RA1,2,3,4はデジタル入力のスイッチ入力ですがRA1のみ使用しています。
 -RB0-3の4ビットは起動時の動作を決めるためDIPスイッチ入力です。
 -RB5,6,7はLEDをドライブするポートですが、RB7のみ使用しています。
 -ソフトPWM処理等のためタイマ割り込み処理を使用しています.
 -Config値は予め指定してあります。
以上の条件でプログラムしてあります.


●ソース・プログラムの概要
 ソフトPWM処理を実現しています。タイマ割り込みは256μsごとに発生させて、PWM処理のクロックにしています。DIPスイッチの設定で次の動作を行います。

   (ゼロはスイッチOFF、1はONを示す)


						
; RB3 RB2 RB1 RB0 

;  0   0   0   0  常時点灯 SW1にて遅延消灯、即点灯

;  0   0   0   1  75%点灯 SW1にて遅延消灯、即点灯

;  0   0   1   0  50%点灯 SW1にて遅延消灯、即点灯

;  0   0   1   1  25%点灯 SW1にて遅延消灯、即点灯

;  0   1   0   0    ゆらぎ ランダム点灯1

;  0   1   0   1    ゆらぎ ランダム点灯2

;  0   1   1   0    ゆらぎ シーケンシャル点灯1

;  0   1   1   1    ゆらぎ シーケンシャル点灯2

;  1   x   x   x    予備(常時点灯動作になっています)
							

 動作を設定するDIP値0〜3は、PWMのDUTY比の違いによる明るさを変更するものです。DIP値4〜7までは明かりをゆらゆら変化させるためにDUTY値を入れ替えています。DIP値8〜15はあけてあります。
 RB7ポートには5端子レギュレータのON/OFF端子がつながれており、その出力がLEDにつながっていて、明るさを制御する点灯動作を行います。
 RA1に接続されたボタン・スイッチは点灯中に押すと、約8秒後に消灯します。また、消灯しているときに押すと即点灯します。


(1) タイマ割り込みルーチン
 タイマ0の割り込みを256μsごとに発生し、変数名count256μsでカウントします。この変数のカウントがオーバフローしたら、65536μsごと(約65ms)に変数名count65msでカウントします。

(2) 初期設定ルーチン
 I/Oポートの入出力設定、内蔵クロックを4MHzへ、タイマ0の基本設定,DIPスイッチ用ポートのプルアップ、ポートAをディジタルへ設定、変数のクリアなど行います。

(3) メイン処理ループ ここの処理を繰り返す
 DIPスイッチの値を読んで処理先にジャンプします。予備のDIP値8以降は単に100%の明るさで点灯するだけになっています。

(4) DIPスイッチの値 0番〜3番(調光) 
 スイッチング周期122HzでRB7ポートにPWM波形を出力します。ONしている時間を変化させています。
 DIPスイッチの値が0ならばDUTY=100%です。連続点灯した明るさになります。DIPスイッチ値1はDUTY=75%、2はDUTY=50%、3はDUTY=25%で出力します。DUTY値とLEDの明るさは比例していません。

(5) DIPスイッチの値 4番〜7番(ゆらぎ)
 ここでは、DUTY値を毎回変化させることにより、ろうそくや焚き火の明かりにしています。
DIPスイッチ値4番はランダムなDUTY値を32個準備して入れ替えています。ろうそくの明かりのつもりです。DIP値5番はもう少し少ない16個でやってみました。一方、DIPスイッチ値6番7番はDUTY値をシーケンシャル・データにしてあります。このあたりはぜひ値を変更して試してみてください。

(6)ソフトPWM処理ルーチン
 256μsx32=8.192msが周期になります。最初にポートをONして点灯させたLEDを指定した256μsのカウント(DUTY)になったとき消灯させます。

(7)ボタン・スイッチ
 点灯中にRA1に接続されたボタン・スイッチを押すと約8秒程度で消灯します。消灯しているときに押すと即点灯します。


 ソース・プログラムのDIPスイッチ値8以降は空いていますので、オリジナル動作を追加できます。

2007年1月16 後田 敏