1 ' ********************** 2 ' ADC_Controller 3 ' Ni-MH Chargeas 4 ' By JA8FGA 5 ' 2010/12/27 6 '*********************** 7 8 $regfile = "Attiny26.dat" 'このマイコン使用 9 $crystal = 1000000 '内臓クロック数1MHz 10 11 '****** LCD ピンを設定 ********** 12 13 Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 14 Config Lcdpin = Pin , Db6 = Porta.6 , Db7 = Porta.7 15 Config Lcdpin = Pin , E = Porta.3 , Rs = Porta.2 16 Config Lcd = 16 * 2 17 18 '***** ADC & Port Pin 設定  ****** 19 20 Config Adc = Single , Prescaler = Auto 21 Config Porta.0 = Input 22 Config Porta.1 = Input 23 Config Portb.3 = Output 24 Config Portb.4 = Output 25 Config Portb.5 = Output 26 27 '***** 変数の宣言 ******* 28 29 Dim A As Word '符号なし16ビットの整数型 30 Dim B As Word ' 〃 31 Dim A2 As Word ' 〃 32 Dim Cnt As Word ' 〃 33 Dim V1 As Single '符号付32ビットの浮動小数点型 34 Dim V2 As String * 5 '5文字の変数「V2」 35 Dim V3 As String * 5 ' 〃  「V3」 36 Dim C1 As Bit '0または1だけを保持する 37 'Dim C2 As Bit 38 39 40 '********************** 41 42 B = 10776 '約3時間のタイムオーバ停止用。 43 Cnt = 1796 '約30分で強制充電解除用。 44 C1 = 1 '充電終了及びタイムオーバー時 45 'にリセットして表示変数を保持。 46 'する為のフラグ。 47 Cursor Off 'LCDのカーソルを表示しない。 48 49 '********************** 50 51 Do '此処からメインループ始まり。 52 Lp: '無限ループの始まり。 53 If Pina.0 = 0 Then 'スタート釦チェック 54 Set Portb.3 'スタート釦押されたらEnd If 55 '迄を実行。 56 C1 = 1 '無限ループフラグを1にする。 57 V3 = V2 'V3をV2と同じにする。 58 Cnt = 1796 '強制充電の時間数をセット。 59 B = 10776 'タイムオーバー数をセット。 60 Reset A2 '電圧上昇時に新数値が入る。 61 Reset Portb.4 '強制充電中のPL-ON 62 Set Portb.5 '充電 ON 63 End If 64 65 If C1 = 0 Then 'C1 = 0 なら無限ループTOPへ 66 Goto Lp 67 End If 68 69 If Pina.1 = 0 Then 70 Cnt = 0 71 End If 72 73 Start Adc 'A D コンバータ ON 74 A = Getadc(9) 75 V1 = A / 204.8 '1024/5V=204.8 なので正規 76 '表示にする為にする割り算 77 V2 = Fusing(v1 , "#.###") '少数点以下3位まで表示 78 Cls 'LCD 表示クリヤー 79 Lcd "Vin " ; V2 ; "v" '上段に入力電圧を表示 80 Locate 2 , 'カーソルを下段へ 81 Lcd "Max " ; V3 ; "v" '下段にMAX値を表示 82 Wait '約一秒間此処で停止 83 84 '********************** 85 86 If V3 <= V2 Then 'MAX値がちいさければ 87 '以下の2行を実行する 88 V3 = V2 89 A2 = A 90 91 End If 92 93 '********************** 94 95 If Cnt = 0 Then '強制充電時間終了調べ 96 Reset Portb.5 'YES なら PL OFF 97 A = A + 3 'Aに15mV 値3をセット 98 If A2 => A Then 'A2-14mV以下かチェック 99 Reset Portb.3 'YESなら充電停止 100 Reset C1 '無限ループへ入る印ON 101 End If 102 Else '強制充電中なら以下の 103 '3行を実行 104 Decr Cnt 105 V3 = V2 106 A2 = A 107 End If 108 109 If B = 0 Then 'タイムオーバー調べ 110 'YESなら以下を実行 111 Reset Portb.3 112 Set Portb.4 113 Reset C1 114 Else 115 Decr B 'タイムオーバーで 116 '無ければB-1をする 117 End If 118 119 Loop 'メインループの終わり 120 121 End 'プログラム暴走の 122 'お呪い