PIC16F84電子遊戯(30)
最終更新日:2001年7月6日
乾電池チェッカー(1ページ) (2ページ)へ

乾電池チェッカーを作ろう
この頃は表示系の製作が中心でしたが、この辺で初期に戻り実用系の製作をすることにしましょう。今回はLED表示とA/Dコンバータを駆使して「乾電池チェッカー」を作ることにしましょう。
まずは回路図を見て下さい。
(乾電池チェッカーの回路図)
回路のポイントを説明します。
LED表示は2色LEDを用いて電池の内容がわかり易いように工夫します。
手持ちのLEDを使用しましたが、カーソードコモンタイプを使いました。
どのように表示させるかはソフトのほうで工夫することにします。
A/Dコンバータは温度計の製作と同じものを使用します。手持ちのAD7820です。
基準電圧も同様に5VレギュレータのS81350AGを使います。
A/Dコンバータと5Vレギュレータの詳細は温度計の製作のページを見て下さい。
電池の電圧はオープン特性だけでなく、10Ωでショートした時(負荷特性)の電圧も測れるようにしています。
このオープン特性と負荷特性の電圧差が大きいと電池が減っていることになります。
このあたりの解説は
乾電池の解説のページへどうぞ
(2色LEDの取り付け)
今回の製作のポイントは2色LEDの表示にあります。体裁良く表示が並ぶように写真のようにLEDを並べて透明のアクリル系2液接着剤で固めました。
ケースには前もってアクリルの板を貼っておけば、それにLEDを接着出来ます。
皆さん自身も色々と工夫してみて下さい。
では完成したハードの部分を見ていただきましょう。
乾電池チェッカーの基本仕様
ハードが準備出来ましたので、この製作の基本仕様を考えましょう。
1)単3、単4電池の電圧をLEDで表示することが出来る。
2)LED表示の更新は0.1秒ごとに行う。
今回は超簡単ですね。
以上を基本的な乾電池チェッカーの仕様としました。ソフト作成途中で都合が悪くなれば随時仕様修正することにします。
乾電池チェッカーのポート割付
回路図に従ってマイコンのポートを割り付けましょう。
PORTBは入力と出力を切り換えて使用します。
ポート名 入出力 機能 入出力 機能
RA0 OUT 赤色LED選択
RA1 OUT 緑色LED選択
RA2 OUT あき
RA3 OUT A/Dコンバータ CS
RA4 OUT A/Dコンバータ WR/RDY
RB0 OUT LED駆動(0) IN A/DコンバータDATA
RB1 OUT LED駆動(1) IN A/DコンバータDATA
RB2 OUT LED駆動(2) IN A/DコンバータDATA
RB3 OUT LED駆動(3) IN A/DコンバータDATA
RB4 OUT LED駆動(4) IN A/DコンバータDATA
RB5 OUT LED駆動(5) IN A/DコンバータDATA
RB5 OUT LED駆動(6) IN A/DコンバータDATA
RB7 OUT LED駆動(7) IN A/DコンバータDATA
(乾電池チェッカーのポート設定)
乾電池チェッカーのポートの方向設定
ではソフト上でのポートの方向をレジスタに設定します。入力は「1」、出力は「0」です。
PORTBは入出力を切り換えて使用しますのでそれぞれの設定をソフト中に行います。
--- --- --- PA4 PA3 PA2 PA1 PA0
--- --- ---

0

0

0

0

0

(TRISA)
PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0

0/1

0/1

0/1

0/1

0/1

0/1

0/1

0/1

(TRISB)
乾電池チェッカーのタイマー割り込みの設定
今回のタイマー割り込みはLEDの表示内容をチェンジするための基本クロックに使用します。今回は基本クロックをとりあえず0.1秒とします。0.1秒ごとに表示を切り換えます。
そこでタイマー割り込みの基本となるプリスケーラ値を128分周にします。
発振子が4MHz時基本クロックは1usecなので、128usecごとにタイマーカウンタがアップします。その他の設定はテストボードの時と同じにします。(詳しくはテストボードのページを参照して下さい。)
ではレジスタにデータを設定しましょう。
RBPU INTEDG TOCS TOSE PSA PS2-0

1

0

0

0

0

1

1

0

(OPTION_REG)
さて0.1秒のタイマー割り込みを作る方法を考えましょう。まず128usecのタイマーカウントアップを使用して20msecごとにタイマー割り込みを掛けるようにします。
128usec x 156= 19.968msec
128usecを156カウントして約20msecにします。
次にこのタイマー割り込みを5回カウントして0.1秒にします。
19.968msec x 5 = 99.84msec
このタイミングで表示を切り換えることにします。
次に定数を設定します。まず20msecの割り込みを掛けるためにタイマーカウンタに設定する初期値です。タイマー割り込みはタイマーカウンタがオーバーフローするごとに掛かります。従って初期値を255-156 = 99= 63HにすればOKです。
tm0_setdata
63H
(tm0_setdata)
次に0.1秒を刻むための初期値データです。05Hです。
cnt_setdata
05H
(cnt_setdata)
このタイマー割り込み処理で使用する作業RAMを設定します。
0.1秒のカウントのために、20mscの割り込みを何回カウントしたかのRAMが必要になります。これはcnt_setdataの初期値から減算してカウントします。ここのRAMが「0」になれば0.1秒経ったことになります。
count_data
0.1秒カウントまでの残り

(count_data)

乾電池チェッカーのポート初期設定
マイコンが動作してからのポートの初期状態を設定します。
PORTAに接続されるポートの制御は全てアクティブLですので、初期値はHに設定します。
PORTBはLED表示の出力とA/Dコンバータの入力で使用しますが、とりあえず次のように設定しましょう。
PORTA PORTB
0FFH 0FFH
(ポート初期設定)
乾電池チェッカーのLED表示
LEDの表示は赤色LEDと緑色LEDを交互に表示します。
これをメインルーチンで繰り返すことによりLEDを点灯させています。
割り込みを禁止する
PORTBを出力ポートに設定する
割り込みを許可する
赤色LEDのデータをRB0-7に出力 RA0を「L」にする 時間待ち RA0を「H」にする
緑色LEDのデータをRB0-7に出力 RA1を「L」にする 時間待ち RA1を「H」にする
led_red_data led_green_data
赤色LEDの表示データ 緑色LEDの表示データ
乾電池チェッカーのA/D変換
A/D変換はAD7820を制御して行います。WRポートをLからHにした後、データバスに変換値がパラレル出力されます。
割り込みを禁止する
PORTBを入力ポートに設定する
CSをLにする
WRをLにする
WRをHにする
PORTBをデータをadin_dataに入力する
CSをHにする
割り込みを許可する
このA/D変換はメインルーチンで繰り返し行われます。
変換後のデータはadin_dataに入力されます。
メインルーチンで行っているのはLED表示とA/D変換のみです。
実際に表示するためのデータを作っているのは、割り込み処理の中で0.1秒ごとに行っています。
ということで、今回はここまでです。
今後も益々面白くなる「PIC16F84電子遊戯」をよろしくお願いいたします。

不明点などあればメールお願いいたします。nonchansoft@nifty.com

Copyright(c)2000-2001 nonchansoft