RA3ポートは基準電圧です。本来なら電源電圧に接続しないで、正確に出力された電源に接続するべきでしょう。
電源電圧を基準電圧に使うならRA3ポートを使って電源電圧に接続しないで、
プログラムで基準電圧に電源電圧を利用する設定をすればいいでしょう。
ADCON1.VCFG1 = 0; //基準電圧は電源電圧
ADCON1.VCFG0 = 0;
/* 概要:A/D変換した値をRS-232c通信でパソコンに送信 PIC16F88 A/D: RA1 (10KΩ半固定抵抗で分圧しアナログ値を生成) 基準電圧入力ポート:RA3 RS-232通信用:RB2/RX RB5:TX Clock: 8.0MHz 内蔵発振器使用 Device Flags: _CP_OFF _CCP1_RB3 _DEBUG_OFF _WRT_ENABLE_OFF _CPD_OFF _LVP_OFF _BODEN_OFF _MCLR_OFF _PWRTE_ON _WDT_OFF _INTRC_IO _IESO_ON__CFG2 _FCMEN_ON__CFG2 MikroC v8.2.0.0 */ void main() { //使用変数の定義 float volt,press,calc,adc_value; char inter, deci; PORTA = 0b00000000; //PORTAの初期化 PORTB = 0b00000000; //PORTBの初期化 OSCCON = 0b01110000; //内臓クロック8MHzに設定 //A/D変換clock設定 0.125us*16倍=2.0us at 8MHz > 1.6us //Fosc=8MHz 8/2/8 ADCON0.ADCS1=0; //01 Fosc/8 ADCON0.ADCS0=1; ADCON1.ADCS2=1; //1:Foscを1/2にする ADCON1.VCFG1 = 1; //基準電圧入力ポートをRA3に設定 ADCON1.VCFG0 = 0; //Vref+ Vss // A/D利用PORTの設定 // ANALOG=1, DIGITAL=0 // ANSEL = 0b00000010; //RA3のみアナログ使用 TRISA = 0b00001010; //RA1,RA3のみ1:入力に設定、他は0:出力 //マイコンの初期化終わり usart_init(9600); do { //アナログデータの取得 10bit(0~1023) adc_value = ADC_Read(1); //RA1値をアナログデジタル変換(0~1023) press = adc_value*0.005; //AD変換した値を電圧に 0.005=基準電圧(5v)/1023 pressは小数点未満二桁 inter = (int) press; //小数点未満の切り捨て deci= (int) (press*10.0) - inter*10;//小数点未満の一桁目を取得 usart_write('V'); usart_write('O'); usart_write('L'); usart_write('T'); usart_write('='); usart_write(inter | 0x30); usart_write('.'); usart_write(deci | 0x30); usart_write('V'); usart_write(13); //1310改行コード usart_write(10); delay_ms(1000); } while(1); }
0 件のコメント:
コメントを投稿