//********************************************************************** /*   『動的半田ごてヒータ抵抗測定ユニット』  ※半田ごてに電圧を加えたままで、ヒータ抵抗が測定できます。  ※ヒータ抵抗は温度が上昇すると抵抗値が上がっていきます。  ※これを応用することにより、半田ごての温度を調整することが出来そうです。 */ //********************************************************************** static unsigned char FLAG; void interrupt(){ if (INTCON.INTF == 1) { INTCON.INTF = 0; PORTA.F2 = ~PORTA.F2; FLAG = 1; } } //********************************************************************** unsigned int measurement() { unsigned int ad, max, min, cnt; // ad = 0; max = 0; min = 1024; for (cnt = 0; cnt < 100; cnt++) { ad = Adc_Read(1); max = ad > max ? ad : max; min = ad < min ? ad : min; } return (max); } //********************************************************************** void main() { static unsigned char buf[6], cnt; static unsigned int ad; static double v1, r1, i1; // OSCCON = 0b01110000; // クロックは8Mhz CMCON = 0b00000111; // コンパレータは使用しない。 // A/D変換を使用する。 ANSEL = 0b00000010; // ポートを初期化する。 TRISA = 0b00111010; TRISB = 0b00001111; // 入力割り込みの設定 INTCON.INTE = 1; INTCON.INTF = 0; OPTION_REG.INTEDG = 1; // LCDを初期化する。 Lcd_Custom_Config(&PORTB,4,5,6,7,&PORTA,0,7,6); Lcd_Custom_Cmd(LCD_CURSOR_OFF); Lcd_Custom_Cmd(LCD_CLEAR); Lcd_Custom_Out(1, 1, "HeaterResistance"); Delay_ms(500); Lcd_Custom_Cmd(LCD_CLEAR); // INTCON.PEIE = 1; // これ以降の処理で割り込みを許可する。 INTCON.GIE = 1; // これ以降の処理で割り込みを許可する。 // FLAG = 0; while (1) { ad = 0; for (cnt = 0; cnt < 30; cnt++) { while (FLAG == 0) ; FLAG = 0; ad += measurement(); } ad = ad / 30; v1 = ((double)ad * 4.8828125) / 101.0; i1 = v1 / 1.0; r1 = (4400 - v1) / i1; // WordToStr(r1, buf); Lcd_Custom_Out(1, 1, buf); buf[0] = 0xF4; // Ω buf[1] = 0x00; Lcd_Custom_Out(1, 6, buf); // WordToStr(v1, buf); Lcd_Custom_Out(2, 1, buf); Lcd_Custom_Out(2, 6, "mV"); // WordToStr(i1, buf); Lcd_Custom_Out(2, 9, buf); Lcd_Custom_Out(2, 14, "mA"); } } //**********************************************************************