Quantcast
Channel: JH7UBCブログ
Viewing all articles
Browse latest Browse all 440

PIC12F675 A/Dコンバータ テスト

$
0
0
 今年最初の実験は、PIC12F675のA/Dコンバータを使うテストです。

 AN0の電圧をA/D変化して、変換した数値(0~1023)をI2C LCD AQM0802Aに表示します。

 回路図です。電源は、電池2本で3Vです。

イメージ 1

ブレッドボードです。

イメージ 2

 プログラムです。

 AQM0802Aの表示に必要なI2C関係関数とLCD表示関数は、前の記事と同じです。

 ここでは、main()のみ掲載します。

------------------------------------------------------------------
/* main program */
void main() {
    CMCON = 0x07;   //comparater disable
    TRISIO = 0b00110001;    //GP0,GP4,GP5 input GP1,GP2,GP3 output
    ANSEL = 0b00000001;     //select AN0
    ADCON0bits.VCFG = 0;    //Vref = VDD
    ADCON0bits.ADFM = 1;    //ADRES 右詰め
    ADCON0bits.ADON = 1;    //A/D converter ON
    ANSELbits.ADCS0 = 1;    //A/D変換クロック4MHz 16Tosc 4.0us
    ANSELbits.ADCS1 = 0;
    ANSELbits.ADCS2 = 1;
   
    I2C_init();     //I2C initialize
    LCD_init();     //LCD initialize
   
    LCD_home();
    printf("A/D TEST");
   
    /* select AN0*/
    ADCON0bits.CHS0 = 0;
    ADCON0bits.CHS1 = 0;
   
    while(1){
        __delay_us(50); //wait 50us
        ADCON0bits.GO_nDONE = 1;    //A/D convert start
   
        while(ADCON0bits.GO_nDONE);   //wait for A/D convert complete
        unsigned int val = ADRESH;
        val = (val << 8) + ADRESL;
        LCD_2line();
        printf("%4d",val);
        __delay_ms(500);
    }
}
------------------------------------------------
0.5secごとにA/Dコンバータの値を表示します。

/* main program */
void main() {
    CMCON = 0x07;   //comparater disable
    TRISIO = 0b00110001;    //GP0,GP4,GP5 input GP1,GP2,GP3 output
    ANSEL = 0b00000001;     //select AN0
    ADCON0bits.VCFG = 0;    //Vref = VDD
    ADCON0bits.ADFM = 1;    //ADRES 右詰め
    ADCON0bits.ADON = 1;    //A/D converter ON
    ANSELbits.ADCS0 = 1;    //A/D変換クロック4MHz 16Tosc 4.0us
    ANSELbits.ADCS1 = 0;
    ANSELbits.ADCS2 = 1;
   
    I2C_init();     //I2C initialize
    LCD_init();     //LCD initialize
   
    LCD_home();
    printf("A/D TEST");
   
    /* select AN0*/
    ADCON0bits.CHS0 = 0;
    ADCON0bits.CHS1 = 0;
   
    while(1){
        __delay_us(50); //wait 50us
        ADCON0bits.GO_nDONE = 1;    //A/D convert start
   
        while(ADCON0bits.GO_nDONE);   //wait for A/D convert complete
        unsigned int val = ADRESH;
        val = (val << 8) + ADRESL;
        LCD_2line();
        printf("%4d",val);
        __delay_ms(500);
    }
}
-------------------------------------

0.5secごとにA/Dコンバータの値(0~1023)をLCDに表示します。

今回、Vrefは、VDDとしていますが、しっかりとした電圧源に接続すれば、デジタル電圧計ができますね。

PIC12F675のプログラミング練習はこれくらいにして、新しいPICの品種に進みたいと思います。
 

Viewing all articles
Browse latest Browse all 440

Trending Articles