• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PIC16F877を用いたC言語でのAD変換について)

PIC16F877を用いたC言語でのAD変換について

このQ&Aのポイント
  • PICを使用したC言語でのAD変換の方法について困っています。
  • 可変抵抗を用いて0-5Vの入力をAN0ピンに接続し、AD変換結果をBポートに出力しようとしています。
  • プログラムに間違いがあるかどうか、ご指摘いただけませんか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

 困りましたね。  後は、コンパイラにADCの例題が付いていればそれを実行してみるとか....

cemehanK
質問者

お礼

返信が遅くなってしまって申し訳ありません. あれからいろいろ試してみた結果,結局原因は不明でしたがPICを16F873Aにしてみたところ動きました. 今回の使用上,16F873Aでも問題ないので16F877は諦めようと思います. いろいろとアドバイス頂き,ありがとうございました.

すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.3

 それでは、ADC_Read()が悪さをしているとしか思えません。  直接AD変換結果をリードしたらどうでしょう。?

cemehanK
質問者

補足

AD変換の結果はADRESH,ADRESLに保存されるので,ADC_Read()を用いずに out_b=ADRESH;やout_b=ADRESL;のように結果を直接出力してみようとしましたが,出力ポートは反応しませんでした.

すると、全ての回答が全文表示されます。
回答No.2

 質問者が「0になっていると考えている」と考えているのと 実際にそうなっているかは違います。  調べるのに時間はかかりません、調べてみればどうでしょう。?  以下のように変更してテスターでPORTB0,1がHIレベルで有れば 正解です。 void main() {   port_initialize();   value_initialize();   PORTB = 0; // <-----------   while(1){ //endless     ADCON0=0x81; //AD変換bitを選択     Delay_us(24); //アクィジション時間+AD変換後の待ち時間     ADCON0=0x85; //AD変換開始     // ここから     if (ADCON0 & 0x04) {       PORTB |= 0x01;     }      Delay_us(20); //AD変換待ち時間     if ((ADCON0 & 0x04) == 0) {       PORTB |= 0x02;     }     // ここまで     out_b=ADC_Read(0);     /* PORTB=out_b; */   } }

cemehanK
質問者

補足

上記のプログラムを試した結果,PORTBの0,1ピンはHIレベルでした.

すると、全ての回答が全文表示されます。
回答No.1

 基本的に間違っていないようです。  ところで、ADCON0のbit2(GO/nDONE)は1になって0に戻りますか。?

cemehanK
質問者

補足

回答ありがとうございます. ADCON0のbit2(GO/DONE)はAD変換が終了すれば自動的に0になるので Delay_us(20); //AD変換待ち時間 後に0に戻っていると考えています.

すると、全ての回答が全文表示されます。

関連するQ&A