今回はADコンバータ機能を利用したプログラムを完成させます。ADコンバータプログラムまとめちょっとしつこいですが...ADコンバータ機能を利用するための必要なことをもう一度確認しておきましょう。ADコンバータを利用するピンを「アナログ入力」に設定ADコンバータ機能設定ADコンバータで電圧値読み取り今回はアナログ入力ピンを5番ピンにしましたので、(1)ではANSELAレジスタとTRISAレジスタで、5番ピンを「アナログ入力」に設定します。RA2とRA3を入力、それ以外は出力に設定このようにプログラムを書けばOKです。次に(2)ではADCON0レジスタとADCON1レジスタで、ADコンバータ機能の設定をします。結果数値は右寄せ、ADコンバータクロックはFOSC/2、基準電圧はVDDこれでOKです。1;でADコンバータの読み取り処理が開始されます。このwhile文を抜けると、結果は「ADRES」レジスタ(16-bit)に入っていますので、この数値に応じた処理をします。アナログ値の判定方法ADコンバータで読み取った10-bit、つまり0〜1023の値は16-bitレジスタADRESに右詰で格納されています。今回ピンに接続したスイッチの回路は、一つのスイッチを押すと0V、もう一つのスイッチを押すと電源電圧の半分になるようにしました。スイッチを押していない時は電源で暑になります。いうことは、0Vになるスイッチを押すと、ADRESの値は「0」、電源電圧の半分になるスイッチを押すと「511」か「512」、スイッチを押していない時は「1023」っていう判定でいいのでしょうか。実は、ADRESの値をこのように判定するとうまく動きません。いうのは、回路にはいろいろな要因があり、スイッチを押したり離したりしても、きっちり0V、電源電圧の半分、電源電圧になりません。電源電圧の半分にするために同じ抵抗を2本つなげましたが、この2本の抵抗の値はぴったり同じではありません。今回使用している抵抗はプラスマイナス5%の誤差がある抵抗です。そのため、抵抗を2本つなげて電源電圧の半分にしたつもりでも、結構ずれていることがあります。いうことで、0〜1023の値をどのように判別するかというと、以下のようにスイッチOFF、スイッチ(黒=0V)をON、スイッチ(白=電源電圧の半分)をONの3ブロックで分けて判定することにします。ADRESレジスタの値の判定はこのようにします。プログラムの動作仕様を考えましょう。自分のブレッドボードでは、黒と白のスイッチを取り付けました。なんとなくのイメージですが、黒がマイナス、白がプラスって感じるので、黒がタイマー時間を減らすスイッチ、白が増やすスイッチにします。動作確認のために、タイマー時間の単位は秒として、デフォルト5秒、黒のスイッチを押すとマイナス1秒、白のスイッチを押すとプラス1秒というプログラム動作仕様にしたいと思います。;このループの中で5番ピンのアナログ値を読み取って、タイマー時間の増減処理をするようにします。スイッチを押してタイマー時間を増減したら、無反応だと実際に処理されたかわかりませんので、LEDの点滅回数でタイマー時間を表現したいと思います。電源投入直後はLEDを点灯状態にしていますので、以下のように点滅パターンでタイマー時間を表現してみます。いうことで、プログラムの仕様を決めましたので、あとはこの通りにプログラムするだけです。(だけです、なんて書きましたが、自分でサンプルプログラムを作るときは一発で動作せず、バグ取りが必要でしたが...)プログラムここまで説明した動作仕様のプログラムです。解説はいらないと思いますが、わからないところなどありましたら、コメント欄かお問い合わせフォームでご連絡いただければと思います。