アプリ版:「スタンプのみでお礼する」機能のリリースについて

mikcroC PRO for PIC v.7.0.1
PIC12F683で
3番ピンに温度センサー(LM35DZ)の出力を入力させ
30度(300mVだったかな)以上になったら
5番ピンから出力させLEDを光らせたいのですがいろいろなサイトをみて試行錯誤しましたが動きません。
ご教示お願いします。


void main() {
unsigned int ad1, ad2, ad3;
unsigned int level;

OSCCON = 0b01110000; // 8MHz internal clock
ANSEL = 0b01011000; // AN3 and Fosc /16
ADCON0 = 0b10001101; // AD control CHS=11(AN3)
CMCON0 = 0b00000111; // Comperator not select

do {
ad1 = Adc_Read(3); // Read AN3
Delay_ms(5);
ad2 = Adc_Read(3); // Read AN3
Delay_ms(5);
ad3 = Adc_Read(3); // Read AN3
level = (int)((ad1 + ad2 + ad3) / 3); // Avg. AN3

if(level > 61 ) { // 30
GPIO=0b11111111; //LED ON
} else{ //
0b11111110; //LED OFF
}

} while(1);
}

質問者からの補足コメント

  • } else{ //
    0b11111110; //LED OFF
    }
    は誤植です。

      補足日時:2017/03/27 21:18

A 回答 (1件)

A/D変換器に「変換開始」の指令を出していますか?


PICのA/D変換は GO/DONE ビット(ADCON0レジスタのbit1)を1にすると変換が始まり、変換が完了するとハードウェアでゼロにリセットされます。
したがって結果をReadする前に、
  ① GO/DONE ビットを1にする。
  ② GO/DONE ビットがゼロになるのを待つ。
  ③ ゼロになったら結果をReadする。
としなくてはなりません。
貴殿のプログラムでは3回Readして平均を出していますが3回とも上記の操作が必要です。
小生アセンブラオンリーなのでC言語の書き方がよくわからないのですが、この点を確認してみてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2017/03/28 14:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!