PIC初心者用掲示板

★★ 質問する前に下記をチェック ★★
(PICに関する疑問は必ず解決するはず)
←←←「電子工作の実験室」へ
←←←← 

■最新ツリー一覧

□このツリー付近のツリー一覧

★新規ツリー作成

◆ 9544. AD変換について [恥ずかしいほどに初心者2006/02/09 19:50


9544. AD変換について [恥ずかしいほどに初心者2006/02/09 19:50
先日は丁寧に教えていただきありがとうございました。
今回、AD変換を使いたいのですが、まったく値が入ってきません。電圧を測定したところきちんと1〜5Vの任意の電圧がかかっているのですが常に「0」と表示されてしまいます。プログラムがおかしいのでしょうか?
↓のようなプログラムです。

#include <16f877a.h>
#fuses HS, NOWDT, PUT, NOPROTECT, BROWNOUT, NOLVP
#device ADC=10
#use delay(clock=20000000)

#use rs232(BAUD = 9600, XMIT = PIN_C6, RCV = PIN_C7)

#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
#use fast_io(E)

#fill_rom0x2800


#byte RA = 5
#byte RB = 6
#byte RC = 7
#byte RD = 8
#byte RE = 9

long adc_data;

setup_adc(ADC_CLOCK_DIV_32) ;
setup_adc_ports(RA0_RA1_RA3_ANALOG) ;

void main()
{
set_tris_a(0xff);
set_tris_b(0x00);
set_tris_c(0x64);
set_tris_d(0x00);
set_tris_e(0x01);

while ( 1 )
{
set_adc_channel(0) ;
delay_us (50) ;
adc_data = read_adc( ) ;
adc_data = (adc_data * 40) / 1024;

このあと、adc_dataの値を7セグに表示しています。
このように入ってきた値を0〜40の値に換えています。変数adc_dataに定数を代入すると問題なく表示されるのできっとAD変換のところがおかしいのだと考えています。ですが、本と見比べてみても全然わからなくて困っています。

ピンはRA0に電圧をかけています。
よろしくお願いいたします。

9545. Re: AD変換について [TAKI2006/02/09 20:04
>今回、AD変換を使いたいのですが、まったく値が入ってきません。電圧を測定したところきちんと1〜5Vの任意の電圧がかかっているのですが常に「0」と表示されてしまいます。プログラムがおかしいのでしょうか?

ADCの重要な設定(以下の2行)が処理関数に属していない為、無効になっていると思います。
main()関数内に書きましょう。

>setup_adc(ADC_CLOCK_DIV_32) ;
>setup_adc_ports(RA0_RA1_RA3_ANALOG) ;

9547. Re: AD変換について [恥ずかしいほどに初心者2006/02/09 21:06
動きました!!ありがとうございます。1週間悩んでいたのでホントに嬉しいです!!ありがとうございました!!!!!