2010年11月17日水曜日

A/D変換+RS232C通信




RA3ポートは基準電圧です。本来なら電源電圧に接続しないで、正確に出力された電源に接続するべきでしょう。
電源電圧を基準電圧に使うならRA3ポートを使って電源電圧に接続しないで、
プログラムで基準電圧に電源電圧を利用する設定をすればいいでしょう。
ADCON1.VCFG1 = 0; //基準電圧は電源電圧
ADCON1.VCFG0 = 0;

  1. /* 
  2. 概要:A/D変換した値をRS-232c通信でパソコンに送信 
  3.  
  4. PIC16F88 
  5.  
  6. A/D: RA1 (10KΩ半固定抵抗で分圧しアナログ値を生成) 
  7. 基準電圧入力ポート:RA3 
  8. RS-232通信用:RB2/RX RB5:TX 
  9.  
  10. Clock: 8.0MHz 内蔵発振器使用 
  11.  
  12. Device Flags: 
  13. _CP_OFF  _CCP1_RB3  _DEBUG_OFF  _WRT_ENABLE_OFF 
  14. _CPD_OFF  _LVP_OFF  _BODEN_OFF  _MCLR_OFF  _PWRTE_ON 
  15. _WDT_OFF  _INTRC_IO  _IESO_ON__CFG2  _FCMEN_ON__CFG2 
  16.  
  17. MikroC v8.2.0.0 
  18. */  
  19.  void main() {  
  20.  //使用変数の定義  
  21.  float volt,press,calc,adc_value;  
  22.  char inter, deci;  
  23.   
  24.  PORTA = 0b00000000; //PORTAの初期化  
  25.  PORTB = 0b00000000; //PORTBの初期化  
  26.   
  27.  OSCCON = 0b01110000; //内臓クロック8MHzに設定  
  28.   
  29.  //A/D変換clock設定 0.125us*16倍=2.0us at 8MHz > 1.6us  
  30.  //Fosc=8MHz 8/2/8  
  31.  ADCON0.ADCS1=0;  //01 Fosc/8  
  32.  ADCON0.ADCS0=1;  
  33.  ADCON1.ADCS2=1;     //1:Foscを1/2にする  
  34.   
  35.  ADCON1.VCFG1 = 1; //基準電圧入力ポートをRA3に設定  
  36.  ADCON1.VCFG0 = 0;   //Vref+  Vss  
  37.   
  38.  // A/D利用PORTの設定 // ANALOG=1, DIGITAL=0 //  
  39.  ANSEL = 0b00000010; //RA3のみアナログ使用  
  40.   
  41.  TRISA = 0b00001010; //RA1,RA3のみ1:入力に設定、他は0:出力  
  42.  //マイコンの初期化終わり  
  43.   
  44.  usart_init(9600);  
  45.   
  46.  do {  
  47.   //アナログデータの取得 10bit(0~1023)  
  48.   adc_value = ADC_Read(1); //RA1値をアナログデジタル変換(0~1023)  
  49.   press = adc_value*0.005; //AD変換した値を電圧に 0.005=基準電圧(5v)/1023 pressは小数点未満二桁  
  50.   inter = (int) press;        //小数点未満の切り捨て  
  51.   deci= (int) (press*10.0) - inter*10;//小数点未満の一桁目を取得  
  52.   usart_write('V');  
  53.   usart_write('O');  
  54.   usart_write('L');  
  55.   usart_write('T');  
  56.   usart_write('=');  
  57.   usart_write(inter | 0x30);  
  58.   usart_write('.');  
  59.   usart_write(deci | 0x30);  
  60.   usart_write('V');  
  61.   usart_write(13);        //1310改行コード  
  62.   usart_write(10);  
  63.   delay_ms(1000);  
  64.  } while(1);  
  65. }  

0 件のコメント:

コメントを投稿