//********************************************************************** /* <人体センサー> 2007.5.4 */ //********************************************************************** void Pwm_Change_DutyEx(unsigned int duty_ratio) { CCPR1L = duty_ratio >> 2; CCP1CON.F6 = duty_ratio & 0b00000001; CCP1CON.F7 = (duty_ratio & 0b00000010) >> 1; } //********************************************************************** void main() { static unsigned int min, max, ad0, temp, cnt; // OSCCON = 0b01000000; // クロックは1Mhz CMCON0 = 0b00000111; // コンパレータは使用しない。 ANSEL = 0b00000001; // AN0を使用する。 TRISIO = 0b00001011; GPIO = 0b00000000; OPTION_REG = 0b10000000; PIE1.TMR1IE = 1; PIR1.TMR1IF = 0; T1CON = 0b00000001; INTCON = 0b01000000; // Pwm_Init(1000); // 1Khz Pwm_Change_DutyEx((PR2 * 4) / 2); // Delay_ms(2000); // while (1) { min = 1024; max = 0; for (cnt = 0; cnt < 50; cnt++) { // 約0.5秒間<10msec間隔で50回>取り込む。 temp = Adc_Read(0); if (min > temp) min = temp; if (max < temp) max = temp; Delay_ms(10); } ad0 = max - min; // if (ad0 > 20) { // 100mV以上信号が変化すると人体を検出したとみなす。 Pwm_Start(); Delay_ms(100); Pwm_Stop(); } } } //**********************************************************************