概要
06P型9V電池を使うことが時折あり、1回毎に捨てるのはモッタイナイと常々思っていた。そこで同じタイプの充電池を使ってみたい考えたが安価な充電器は出回っていない。自作してみることにした。
製作時に考えていたことなど;
1) 充電池は秋月で500円販売されている006P型ニッケル水素充電池GP20R8H(ラベルGP200, 8.4V、200mAH)を使う。データシートもあって便利。
2) 原則、100−200mA位を流す急速充電モードで充電する。
3) 充電の終了は充電された電池の電圧を測定して行う。
4) 安全のために、電池のケースが一定の温度以上になると充電を強制終了させる温度センサと、電源を入れてから一定時間で充電を強制終了させるタイマを備える。
5) トリクル充電モード(2次電池の自然放電を防ぐ目的の細流充電:20mA位)も加える。
6) 以上の目的達成のために12F683と12F675(タイマ用)の2個のマイクロコントローラを使う。
回路
電源にACアダプタを使い、三端子レギュレータLM317で充電池を充電させるためのDC13−15Vをつくり、更に2個のPICに供給するDC5Vを小容量三端子レギュレータXC6202P502PRをLM317につないででつくっている。フォトMOSリレーが充電池への電流供給をON/OFFする(最大で350mA位流せるようだ)。超小型リレーは充電しようとする充電池の電圧が一定以下の場合豆電球と抵抗を使って放電させるために使われている。最大で580mA位流れる。温度センサはその上に乗せた充電池のケース温度を検知して予め設定した一定温度以上になると充電を停止させ、トリクル充電モードに入り12F683のPin2に接続させた点滅LEDを点灯させる。12F675は安全タイマでシステムの電源を入れてから予め設定した一定時間(0.5、1、1.5、2、3、10時間)を経過すると12F683のリセットピンをGNDに落として12F683の動作を停止させる。充放電の途中で電池電圧を何度も測定する必要がある。電池電圧が10Vを超えるため固定抵抗と可変抵抗を使った分圧器で5V以下になるように調節し12F863のGP0より取り込んでいる。フォトMOSリレーと超小型リレーにそれぞれ使われている逆流防止ダイオードは絶対必要。
実験ボード: 充電中は電池GP200をその右手に見える小さい黒色の温度センサ(電子工作39参照)上に載せる。 その右手に安全タイマ役の12F675や設定した時間を表示する小さいLED1-3が見える。現在2時間設定を示す2つ目が点灯中(右手最上部)。ボードのほぼ真ん中に12F683、その直ぐ左手に白いフォトMOSリレーが見える。下方右手に超小型リレー、そしてその左手に電池の放電に使う豆電球が見える。豆電球にさらにセメント抵抗(16W、5W)などを追加すると放電が早まる。
充電方法
1) NiMH充電池GP200のデータシート(秋月HP)によると急速充電モードとして100−200mAでの充電を勧めている。フル充電直後の電池電圧は10−10.5V位。したがって、充電開始後時々充電を止めて(充電120秒間に対し20秒間充電を止めてから)電池電圧を測定し、測定値がフル充電電圧に達したら充電を停止させ、トリクル充電モードに入る。フル充電に近づくと電池の温度が上がってくる。何らかの理由でフル充電電圧に達っしても充電が続く場合電池が高温になって危険なので温度を検知して充電を停止させる必要がある。温度センサがその役割を果たす。その温度設定はVR(200K)で行う。通常40−45°C位(125−129KW)に設定する。さらに、この温度センサが働かない場合に備え外付けの12F675を使ったタイマで12F683の動作を完全に停止させてしまう。タイマの時間調整は12F675のPin7(GP0)につながっている分圧器の10KのVRtで行う。
2) ほぼ使いきった充電池GP200の電圧が8V位以下だと、自動的に放電モードで豆電球(12V, 0.11A、,それにセメント抵抗など)を2−3分間点灯し続け、電池電圧がある一定電圧以下に達すると自動検知して充電モードに入る。最初は200(電流制限抵抗4.7W 1/2W)−150mA(電流制限抵抗10W 1/2W)位流れ、充電が進むと電流量が次第に低下してくる。充電と電池電圧測定を繰り返し行い、そして設定したフル充電電圧に達したらトリクル充電モードに入る。一方、充電する充電池の電圧が8V位以上だと放電モードには入らず即充電モードに入り上記と同じ行程を歩む。
3) タイマの時間設定: 12F675のタイマの時間設定はVRt、LED1-3および電源スイッチ(SW)で行う。12F675のポートピンが3本しか残っていないので設定にはちょっとしたコツが要る。例えば、1時間30分を設定する場合、VRtを0から時計回りに少し回して電源SWを入れる、どのLEDも点灯しなければ電源SWを切り、また、VRtを少し進めては電源SWを入れ1時間を表すLED1が点灯するまで繰り返す。同様にして2時間を表すLED2が点灯する位置を見つけ、少し逆にVRtを回して電源SWを入れてどのLEDも点灯しなければそこが1時間30分の設定位置である。また10時間に設定したければVRtの回転と電源SWのON/OFFでLED3の点灯する位置を見つけ、VRtを更に進めてLED3が点灯しなくなる位置が10時間の設定位置になる。
タイマの設定時間とLEDの点灯時間の関係
設定時間 |
30分 |
1時間 |
1時間30分 |
2時間 |
3時間 |
10時間 |
LEDの点灯 |
なし |
LED1 |
なし |
LED2 |
LED3 |
なし |
結果など
1) 充電池の特性と思えるが、充電直後の電圧は時間とともに低下しなかなか安定しない。
2) NiMH充電池GP200の容量は200mAHとされているの150−200mAで充電すれば1−2時間でフル充電が出来る。フル充電後しばらく放置すると電池電圧が9.7Vほどで落ち着く。
3) 12F683のリセットピンをGNDに落とす(12F675の接続ピンをLにする)と12F683の動作が停止するというのは新しい発見であった。これでPICを使った外付けタイマが簡単に出来る。
4) 12F683のポートに取込める最大電圧はDC5Vなので、電池電圧(8−12V)を分圧器で1/3に下げて読込ませることにした。
充電池電圧(V)をVbat、Vbatに対応するビット数(5V->1023)をBit noとすると、充電池電圧とビット数の間には次の関係がある。
ビット数(Bit no)=(Vbat/3)X1023/5=Vbat
X 68.2
充電池電圧(Vbat)とビット数(Bit no)の関係 (5Vは1023に対応)
Vbat |
8.0 |
8.2 |
8.4 |
8.6 |
8.8 |
9.0 |
9.2 |
9.4 |
9.6 |
9.8 |
10.0 |
10.3 |
10.7 |
11.0 |
11.5 |
12.0 |
Vbat/3 |
2,67 |
2,73 |
2,80 |
2,87 |
2,93 |
3.0 |
3.07 |
3.13 |
3.20 |
3.27 |
3.33 |
3.43 |
3.57 |
3.67 |
3.83 |
4.0 |
Bit no, |
546 |
559 |
573 |
587 |
600 |
614 |
627 |
641 |
655 |
668 |
682 |
702 |
730 |
750 |
784 |
818 |
この表の値を充放電の開始や停止の限界値として使う。例えばプログラムの中でIf Vin>600 Then Charging のように使う。ここで600は電池電圧8.8Vに相当する。
分圧器の調整法: LM317の3KのVRを調節して分圧器にDC12.0Vを供給し、分圧器の10KのVRを調節して12F683のGP0に4・0Vが入るようにする。
5) トリクル充電モードとは無負荷の下で20mA位流して充電池電圧が自然放電で次第に低下するのを防ぐ目的の充電モードである。今回、これをPICBasic ProのソフトウエアPWM命令を使って達成する。つまりフォトMOSリレーをON/OFFさせて充電電流を流す時間を全体の20%(Duty比)に調整し、充電終了時に流れている100mA前後の電流を実質5分の1の20mA位に低下させて充電しようとするものである。下図のように細い方形波の部分が電池に充電される。設定した安全タイマが動作するまでこの充電は続く ((255/1267)x100=20%)。
6) 何度も充電を繰り返したGP200電池に比べ、新しいGP200電池の充電には2倍ぐらい時間がかかった。なかなか電圧が上がらないためである。
7) NiMH電池の充電法が少し分かってきた。いろいろ他のタイプの充電池に応用で出来そう。
8) 材料費の合計は一番高いGP200電池500円を含め1500円弱ほど。
プログラム
以下に示すように、充放電コントロール用12F683と外付け安全タイマ用12F675のプログラムがそれぞれ必要になる。
1)
12F683用のプログラム(充放電コントロール)
充電する充電池を接続すると、先ずその電圧を測定し、一定以下だと超小型リレーをONにして放電させ、低下した電圧がある一定値に達したら、そのリレーをOFFにし、フォトMOSリレーをONにし充電モードに入る。60秒間充電して温度センサをチェックしまた60秒間充電して温度センサをチェック、その後電圧を安定させため20秒間待って電池電圧を測る。その値がフル充電値(例えば10.2V)に達していればトリクル充電モードに入る。もし、達していなければ上記の合計120秒間充電し20秒間待って電圧測定のプロセスをフル充電値に達するまで繰り返し、トリクル充電モードに入る。なお途中に入れた温度センサチェックは電池の過熱を防止するためのものである。もし、このチェックに引っかかると点滅LEDを点灯させながらトリクル充電モードに入る。トリクル充電モードは安全タイマが12F683を停止させるまでまで続く。 <<追記>>トリクル充電中に電池が過熱したら12F683の動作を止める機能を追加した(2010.8.12)。
'********* プログラム ************
'06P9VCahrger683Tr1.bas – 2010.8.12 Trickle Charge function added. Works OK!
'12F683 with internal clock 4MHz
'Software PWM command used
'******** ピン接続 ************
'Pin 1: Vdd (5V)
'Pin 8: Vss (GND)
'Pin 2: GPIO.5: output - driving flashing LED (overheating)
'Pin 3: GPIO.4: input - from Temp sensor
'Pin 4: GPIO.3: input - internal reset via R=10K
'Pin 5: GPIO.2: output - driving photo MOS relay
'Pin 6: GPIO.1: output - driving mechanical relay
'Pin 7: GPIO.0: input - from Divider for 06P battery's voltage
'******** プログラム本体 ********
Define ADC_BITS 10 '10-bit ADC used 以下の10行はADCを使うための設定
Define ADC_CLOCK 3 'Internal clock used ?
Define ADC_SAMPLEUS 50 'Sample timing
ADCON0=%10000011
'=131 (decimal) 'bit7=1(right justified),bit6=0(volt refer-Vdd), ADCの基準電圧はVdd(5.0V)を使っている
'bit5-4=0(unimplemented),bit3-2=00(channel0-An0),
'bit1=1(starts right away),bit0=1(on operation)
ANSEL=%00010001 'sets Fosc/8 and GPIO.0 as ANS0 input
'bit7=0(unimplemented),bit6-4=001 (Fosc/8),
'bit3-2-1=0(Digtal I/O pins),bit0=1(Analog input)
TRISIO=%011001
CMCON0=7 'turns off comparator function 12F683の場合CMCONではないことに注意
BatteryVolt var GPIO.0
PhotoRelay var GPIO.2
MechaRelay var GPIO.1
TempSensor var GPIO.4
BattOverheat var GPIO.5
Vin var word 'ADC storage
PhotoRelay=0 'No activation of PhotoRelay
MechaRelay=0 'No activation of MechaRelay
BattOverheat=0
Adcin 0, Vin 'Read ADC ch-0 and save in Vin (range 0-1024) 充電池の電圧チェック
Pause 5
If Vin>600 Then Charging '8.8V 放電するか充電するかを決める
Discharging: 'Lamp -> ON or Resistor -> ON 以下が放電プロセス ― 120秒間放電させ10秒間待って電圧測定
PhotoRelay=0 'PhotoRelay -> OFF フォトMOSリレーをOFFにする
MechaRelay=1 'MechaRelay -> ON 超小型リレーをONにする
Pause 60000 '60 sec
Pause 60000 '60 sec
MechaRelay=0 'MechaRelay -> OFF
Pause 10000 '10 sec
Adcin 0, Vin
Pause 5
If Vin>570 Then Discharging '8.4V ? ここで放電によって低下した電圧を再びチェック
Goto Charging
Charging: ‘以下が充電プロセス − 原則120秒間充電させ20秒間待って電圧測定。途中に温度センサチェックが入る
TempSensor=0
MechaRelay=0 'MechaRelay -> OFF
PhotoRelay=1 'PhotoRelay -> ON
Pause 60000 '60 sec
If TempSensor=1 Then Overheated 'Overheating check 温度センサチェック。もし、TempSensor=1なら電池が過熱しているので点滅LEDを点灯させ充電終了
Pause 60000 '60 sec
If TempSensor=1 Then Overheated
PhotoRelay=0
Pause 20000 '20 sec
Adcin 0, Vin ‘ch0よりアナログデータを取り込む
Pause 5
If Vin>730 Then FullyCharged '10.5V ? - 3.57V at GP0 このビット数の設定は微妙。大き過ぎると中々FullyChargedに飛ばない。逆だと充電不足になりそう。
Goto Charging
Overheated:
PhotoRelay=0 'PhotoRelay -> OFF
BattOverheat=1 'Flash LED lights up. 点滅LEDを点灯させる
Goto Trickle
FullyCharged:
BattOverheat=1 'Flash LED lights up.
Goto Trickle
Trickle: 'Trickle charging continues until 12F683 stops working by Timer or Temp sensor ->ON ‘ここからトリクル充電モード。安全タイマや温度センサが動作して12F683を止めるまでトリクル充電は続く。
PhotoRelay=1 'PhotoRelay -> ON
PWM GPIO.2, 255, 50 'Duty ratio=20% この2行のソフトウエアPWMの設定でPWM充電を行う。大変便利なコマンドである
PWM GPIO.2, 0, 200
if TempSensor=1 Then Goto Jump ‘'Overheating check while trickle charging トリクル充電中に電池が過熱したらJumpに飛んで12F683の動作を止める
Goto Trickle
Jump:
BattOverheat=0 'Flash LED ->OFF
End
'******** プログラムの終了 ********
'Note:
'melabs U2 Programmer's
configurations 12F683:
'FOSC – INTOSCIO; WDTE - Enable; Power-up Timer - Disable
'MCLRpin – Reset ; BODEN - Enable; Internal External Switvh Over – Enable, Fail-Safe Clock Monitor – Enable, CD - Disable;Dtata EPPROM - Disable.
2) 12F675用のプログラム (外付け安全タイマ)
何らかの理由で充放電のプロセスが暴走したような場合、予めタイマで1定時間(0.5、1、1.5、2、3、10時間)経ったら充放電のプロセスを強制終了させることが出来ると安心である。このプログラムはその目的を果たす。LED1-3を参照しながらVRtを調節してタイマ時間を設定しておく。その設定時間が終了するとGP2(Pin5)が“L”にされ、同じGP2につながれた12F683のGP3(リセット)が“L”になり12F683の動作は完全に停止する。同時に点滅LEDが点灯し充放電プロセスがタイマによって強制終了させられたことを知らせてくれる。
'********* プログラム ************
'06P9VCahrger675Timer1.bas - 2010.8.1
'12F629 with internal clock 4MHz
'Safety Timer (0.5-10 hours) for 06P9VCahrger
'******** ピン接続 ************
'Pin 1: Vdd (5V)
'Pin 8: Vss (GND)
'Pin 4: GPIO.3: input - internal reset via R=10K
'Pin 5: GPIO.2: input - grounding of Pin 4 (GPIO.3) of 12F683
'Pin 7: GPIO.0: input - from Divider for Timer adjustment
'Pin 6: GPIO.1: ouput - LED1 (Setup time indicator)
'Pin 3: GPIO.4: ouput - LED2 (Setup time indicator)
'Pin 2: GPIO.5: ouput - LED3 (Setup time indicator)
'******** プログラム本体 ********
Define ADC_BITS 10 '10-bit ADC used 以下の10行はADCを使うための設定
Define ADC_CLOCK 3 'Internal clock used ?
Define ADC_SAMPLEUS 50 'Sample timing
ADCON0=%10000011
'=131 (decimal) 'bit7=1(right justified),bit6=0(volt refer-Vdd), ADCの基準電圧はVdd(5.0V)を使っている
'bit5-4=0(unimplemented),bit3-2=00(channel0-An0),
'bit1=1(starts right away),bit0=1(on operation)
ANSEL=%00010001 'sets Fosc/8 and GPIO.0 as ANS0 input
'bit7=0(unimplemented),bit6-4=001 (Fosc/8),
'bit3-2-1=0(Digtal I/O pins),bit0=1(Analog input)
TRISIO=%001101
CMCON=7 'turns off comparator function 12F675の場合CMCON0ではないことに注意 (12F683との違い)
Vin var word 'ADC storage
TimerOut var GPIO.2
OneHour var GPIO.1
TwoHour var GPIO.4
ThreeHour var GPIO.5
n var byte 'counter
OneHour=0
TwoHour=0
ThreeHour=0
Adcin 0, Vin 'Read ADC ch-0 and save in Vin (range 0-1024) Vinput=0-2.5V ここでVRtで設定した電圧0−2.5Vを読込む。値によって6通りの時間に分岐する
Pause 5
if (Vin>0) and (Vin=<100) Then Halfhour '6 selectable timer, 30 min 30分
if (Vin>100) and (Vin=<200) Then Hour1 ‘1時間
if (Vin>200) and (Vin=<300) Then Hourandhalf '1 hour and 30 min ‘1時間30分
if (Vin>300) and (Vin=<400) Then Hour2 ‘2時間
if (Vin>400) and (Vin=<450) Then Hour3 ‘3時間
If Vin>450 Then Hour10 ‘10時間
Halfhour: ‘30分タイマ
High TimerOut
For n=1 to 34 '0.5 hour timer - 34 gives accurate 30 min., experimentally decided Pauseコマンドの不正確さのためか34にしないと30分にならなかった
Pause 60000 '60 sec
Next n
Low TimerOut
Goto Timeout
Hour1: ‘1時間タイマ
High OneHour ‘LED1が点灯する
High TimerOut
For n=1 to 68 ‘Pauseコマンドの不正確さのためか68にしないと1時間にならなかった
Pause 60000 '60 sec
Next n
Low TimerOut ‘12F683のリセットピンをLにし動作を停止させる。
Goto Timeout
Hourandhalf: ‘1時間30分タイマ
High TimerOut
For n=1 to 102
Pause 60000 '60 sec
Next n
Low TimerOut
Goto Timeout
Hour2: ‘2時間タイマ
High TwoHour ‘LED2が点灯する
High TimerOut
For n=1 to 136
Pause 60000 '60 sec
Next n
Low TimerOut
Goto Timeout
Hour3: ‘3時間タイマ
High ThreeHour ‘LED3が点灯する
High TimerOut
For n=1 to 204
Pause 60000 '60 sec
Next n
Low TimerOut
Goto Timeout
Hour10: ‘10時間タイマ
High TimerOut
For n=1 to 673
Pause 60000 '60 sec
Next n
Low TimerOut
Goto Timeout
Timeout:
End
'******** プログラムの終了 ********
'Note:
''melabs U2 Programmer's configurations - 12F675:
'FOSC - INTOSC; WDTE - Enabled; PWRTE – Disabled
'MCLR - Reset ; BODEN – Enabled;
CP – Not Protected; CPD - Not Protected
実用機の製作 (2010.8.10)
上記の実験で得たデータをもとに実用機を製作した。回路を一部変更したことと、安全タイマのVRtによる設定温度を5段階(1、2、3、5、10時間)にし、2、3、5時間だけがLED1−3で表示される(ポートが足りないため)。したがって、VRtを回して2時間のLED1が点灯した状態で逆方向に回しどのLEDも点灯しなところが1時間である。また、5時間のLED3が点灯した状態から更に回転させてどのLEDも点灯しなところが10時間である。
回路
前のプロトタイプ機より変えた点は4個所。すなわち12F675に接続するLED1−3を吸い込み方式に変えた(ピンをLにすると点灯)。温度センサの温度設定抵抗を固定抵抗133KW(50°C)にした。三端子レギュレータを通常の7805に変えた。もう一個所、セメント抵抗を除いて放電は電球のみで行うようにした(目視出来るのが良い)。
基板に組み上げたGP200専用充放電実用機。電球は放電用。右手は説明用のラベルを貼り付けたもの。
電池ケースの下に温度センサが組み込んでありセットすると接触する
急速放電ケーブル: 電球が消えるまで待って5−10分で電池を放電出来る
使用法
1) 充電する電池をケースの(+/−)ソケットに差し込む。電池の底面がケース下の温度センサに完全に接触していることを確認する。
2) 電源スイッチをON/OFFさせながらVRtを回して安全タイマの時間を設定する。
3) 安全タイマの時間は最低2時間に設定する。フル充電後は自動的にトリクル充電モードに変わって残りの設定時間をこなす。時間がくると12F675わきの点滅LEDが明るく点灯する。
4) 充電を終了した電池は外して上部の(+/−)端子をビニールテープで覆っておく。
タイマの設定時間とLEDの点灯時間の関係
設定時間 |
1時間 |
2時間 |
3時間 |
5時間 |
10時間 |
LEDの点灯 |
なし |
LED1 |
LED2 |
LED3 |
なし |
結果など
1) 全部品を基板(138x95mm)にきれいに組込めた。
2) うまく動作することを確認した。電池の容量が200mAhなので、使用済みの状態から2時間以内でフル充電が出来る。
3) フル充電直後の電圧は10V以上に達するが、徐々に低下し10時間後で9.7V位になる。公称電圧は8.4Vである。電池には“標準充電は20mAで16時間”と書いてある。
4) 途中使用した超小型リレーが動作不良であることを発見した。メカニカルなものは壊れやすい。
5) 実験目的で電池を急速に放電させるには、電球(12V 0.11A)とセメント抵抗(16W 5W)を使った放電ケーブルを用いる。フル充電状態の電池を5−10分程度で放電できる。
6) 別の種類の06PタイプNiMH電池を充電する場合は、電池の充放電特性を調べ プログラム中のIf Vin>730 Then FullyCharged の730等の値を適当に変える必要がある。
7) 本格的にPWMの充電方式を使えばシステムをもっと単純化出来るかも知れない。
8) 得られた情報を他のタイプのNiMH電池の充放電装置の開発につなげたい。
9) 割り込み等を使いPICを1個ですべて処理できるようにしたい。
10) Web上には“抵抗1本で充電する”などという荒業もあるようだが検討に値するかも。
11) 材料費の合計は1500円ほど。
12) 結構面白いプロジェクトだった。奥が深い。とにかくユニークでないと。
13) トリクル充電中に電池が過熱することが懸念されたので、過熱したら12F683の動作を停止させるようにプログラムを改良した。安全タイマとは干渉しない(2010.8.12追加)。
プログラム
以下に示すように、充放電コントロール用12F683と外付け安全タイマ用12F675のプログラムがそれぞれ必要になる。
1)12F683用のプログラム(充放電コントロール)
前のプロトタイプ機のもの06P9VCahrger683Tr1.bas を使う。 このプログラムにはトリクル充電中に電池が過熱したら12F683の動作を止める機能を追加してある(2010.8.12)。この機能は安全タイマの動作には干渉しない。
2)
12F675用のプログラム (外付け安全タイマ)
TRISIOとタイマ設定時間の部分を変更した。
'********* プログラム ************
'06P9VCahrger675Timer1Tr.bas - 2010.8.8
'12F675 with internal clock 4MHz
'Safety Timer (1,2,3,5,10 hours) for 06P9VCahrger
'******** ピン接続 ************
'Pin 1: Vdd (5V)
'Pin 8: Vss (GND)
'Pin 5: GPIO.2: input - grounding of Pin 4 (GPIO.3) of 12F683
'Pin 7: GPIO.0: input - from Divider for Timer adjustment
'Pin 6: GPIO.1: input - LED1 (Setup time indicator)
'Pin 4: GPIO.3: input - to 5V via 10k
'Pin 3: GPIO.4: input - LED3 (Setup time indicator)
'Pin 2: GPIO.5: input - LED4 (Setup time indicator)
'******** プログラム本体 ********
Define ADC_BITS 10 '10-bit ADC used
Define ADC_CLOCK 3 'Internal clock used ?
Define ADC_SAMPLEUS 50 'Sample timing
ADCON0=%10000011
'=131 (decimal) 'bit7=1(right justified),bit6=0(volt refer-Vdd),
'bit5-4=0(unimplemented),bit3-2=00(channel0-An0),
'bit1=1(starts right away),bit0=1(on operation)
ANSEL=%00010001 'sets Fosc/8 and GPIO.0 as ANS0 input
'bit7=0(unimplemented),bit6-4=001 (Fosc/8),
'bit3-2-1=0(Digtal I/O pins),bit0=1(Analog input)
TRISIO=%111111
CMCON=7
Vin var word 'ADC storage
TimerOut var GPIO.2
TwoHour var GPIO.1
ThreeHour var GPIO.4
FiveHour var GPIO.5
n var byte
'counter
TwoHour=1
ThreeHour=1
FiveHour=1
Adcin 0, Vin 'Read ADC ch-0 and save in Vin (range 0-1024) Vinput=0-2.5V
Pause 5
if (Vin>0) and (Vin=<100) Then Hour1 '5 selectable timer, 1 hour
if (Vin>100) and (Vin=<200) Then Hour2
if (Vin>200) and (Vin=<300) Then Hour3
if (Vin>300) and (Vin=<400) Then Hour5
If Vin>400 Then Hour10
Hour1: ‘1-hour timer ピン不足のためLED表示はない
High TimerOut
For n=1 to 68
Pause 60000 '60 sec
Next n
Low TimerOut
Goto Timeout
Hour2:
Low TwoHour ‘2-hour LED1表示
High TimerOut
For n=1 to 136
Pause 60000
'60 sec
Next n
Low TimerOut
Goto Timeout
Hour3:
Low ThreeHour ‘LED2表示
High TimerOut
For n=1 to 204
Pause 60000 '60 sec
Next n
Low TimerOut
Goto Timeout
Hour5:
Low FiveHour ‘LED3表示
High TimerOut
For n=1 to 340
Pause 60000 '60 sec
Next n
Low TimerOut
Goto Timeout
Hour10: ‘10-hour timer ピン不足のためLED表示はない
High TimerOut
For n=1 to 673
Pause 60000 '60 sec
Next n
Low TimerOut
Goto Timeout
Timeout:
End
'******** プログラムの終了 ********
'Note:
''melabs U2 Programmer's configurations - 12F675:
'FOSC - INTOSC; WDTE - Enabled; PWRTE – Disabled
'MCLR - Reset ; BODEN – Enabled; CP – Not Protected;
CPD - Not Protected