電子書籍の厳選無料作品が豊富!

PIC16F88のAN4のアナログ/デジタル変換について教えてください?
PIC16F88にて以下のピンアサインでCCS社のCコンパイラで作成しました。AN2の温度AN3の湿度は正常にLCDに表示するのですがAN4の電圧がAN3の湿度の変化に追従してくるんです。ピンアサインが間違っているのか、PIC16F88に制限があるのか英語の説明書見てもチンプンかんぷんで。どなたかよろしくご教授お願いします。(現在AN4の電圧測定はオープン状態で0.245V 湿度計を触ると0.443vに変化します)

RB7(13ピン) LCD DB7(14ピン)
RB6(12ピン) LCD DB6(13ピン)
RB5(11ピン) LCD DB5(12ピン)
RB4(10ピン) LCD DB4(11ピン)
RB2(8ピン) LCD RS (4ピン)
RB3(9ピン) LCD STB (6ピン)
LCD R/W(5ピン)→GND
LCD VSS(1ピン)→GND****LCDタイプによりVSSとVDDが逆****
LCD VDD(2ピン)→+5V****LCDタイプによりVSSとVDDが逆****
RA2(1ピン)AN2LMC662CN 温度電圧入力
RA3(2ピン)AN3LMC662CN 湿度電圧入力
RA4(3ピン)AN4電圧測定
RA0(17ピン)右SW(B_sw)MAX and MIN クリア
RA1(18ピン)左SW (A_sw)MAX and MIN and 電圧 表示

関係ありそうなプログラム抜粋
#include<16f88.h>
#fuses HS,NOWDT,PUT,NOPROTECT,NOLVP,NOBROWNOUT,
#device ADC=10         //アナログ/デジタル変換10ビットモード
#usedelay(clock=4000000)//4Mzクロック
#usefast_io(b)//ポートB出力設定
途中省略
set_adc_channel(2);//A/D変換チャンネル設定
delay_us(116);//変換にかかる時間96μs+19.72μs
ondo = read_adc();//A/D変換レジスタリードしondoへ
ondo = (ondo * 50.0) / 1024;//ondo値を実数に変換
途中省略
set_adc_channel(3);//A/D変換チャンネル設定
delay_us(116);//変換にかかる時間96μs+19.72μs
shitsudo = read_adc();//A/D変換レジスタリードしshitsudoへ
shitsudo = (shitsudo * 100.0) / 1024;//shitsudo値を実数に変換
途中省略
set_adc_channel(4);//A/D変換チャンネル設定
delay_us(116);//変換にかかる時間96μs+19.72μs+α
v = read_adc();//A/D変換レジスタリードしvへ
v = (v * 0.5) / 1024;//v値を実数に変換
途中省略
main()
{
////////////////////////温度計湿度計電圧計の設定///////////////////
setup_adc_ports(sAN2 | sAN3 | sAN4 | VSS_VDD);//アナログポート設定

setup_adc(ADC_CLOCK_DIV_32);//アナログ変換クロック設定

A 回答 (1件)

オープンにしているからです。

インピーダンスが非常に高いため、アナログマルチプレクサの浮遊容量等の影響で、隣の信号レベルが誘導されます。

このピンに限らず、入力ピンをオープンにしておいてはだめです。このような誘導や、入力レベルが中間値になると電源に大電流が流れたり、いろいろ不都合が出ます。
オープンピンは出力モードにするか、入力モードなら、10KΩ程度の抵抗でGNDか電源につなぐようにしなければなりません。これは CMOS IC を使う上での常識です。
    • good
    • 0
この回答へのお礼

P0O9Iさま
今日パーツショップで10KΩの抵抗4つと10KΩの半固定可変抵抗4つを購入し実験回路を作って早速試してみました。AN1,AN2,AN3に回路を接続しAN4のみオープンとしました。
結果おっしゃる通りでオープン状態だと隣の端子に電圧が引っ張られます。抵抗と半固定の回路をAN4に接続するとVRの変化に比例して電圧測定出来ました。ありがとうございました。

お礼日時:2010/08/02 23:11

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