- 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変換について [TAKI] 2006/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週間悩んでいたのでホントに嬉しいです!!ありがとうございました!!!!!