2010年11月17日水曜日

A/D変換+RS232C通信




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 件のコメント:

コメントを投稿