//********************************************************************** /*   『インピーダンスメーター』 */ //********************************************************************** unsigned int measurement(unsigned short channel) { unsigned int ad, max, min; unsigned char cnt; // max = 0; min = 1024; for (cnt = 0; cnt < 100; cnt++) { ad = Adc_Read(channel); max = max < ad ? ad : max; min = min > ad ? ad : min; Delay_us(100); } ad = max - min; return (ad); } //********************************************************************** void main() { unsigned char buf[8], cnt; double V1, V2, R; // OSCCON = 0b01110000; // クロックは8Mhz CMCON = 0b00000111; // コンパレータは使用しない。 // A/D変換を使用する。 ANSEL = 0b00001100; // ポートを初期化する。 TRISA = 0b00111110; TRISB = 0b00001111; OPTION_REG.F7 = 0; // LCDを初期化する。 Lcd_Custom_Config(&PORTB,4,5,6,7,&PORTA,0,7,6); Lcd_Custom_Cmd(LCD_CURSOR_OFF); Lcd_Custom_Cmd(LCD_CLEAR); // while (1) { //V1の測定と表示 V1 = 0.0; for (cnt = 0; cnt < 100; cnt++) { V1 += measurement(2); } V1 = (V1 * 4.8828125) / 100.0; WordToStr((unsigned int)V1, buf); Lcd_Custom_Out(1, 1, buf); Lcd_Custom_Out(1, 6, "mV"); //V2の測定と表示 V2 = 0.0; for (cnt = 0; cnt < 100; cnt++) { V2 += measurement(3); } V2 = (V2 * 4.8828125) / 100.0; WordToStr((unsigned int)V2, buf); Lcd_Custom_Out(1, 9, buf); Lcd_Custom_Out(1, 14, "mV"); //インピーダンスの計算と表示 R = V2 / ((V1 - V2) / 51.0); R = R * 1000.0; WordToStr((unsigned int)R, buf); Lcd_Custom_Out(2, 1, buf); buf[0] = 'm'; buf[1] = 0xF4; buf[2] = 0x00; Lcd_Custom_Out(2, 6, buf); // Delay_ms(500); } } //**********************************************************************