//********************************************************************** /* <照度計V2>  ■照度・周波数変換フォトIC S9705  ■主な仕様   ・浜松ホトニクス製 照度センサIC   ・照度に応じた周波数を出力するICです。   ・周波数をマイコンでカウントするだけなので扱いやすいICです。   ・電源電圧:2.7V~5.5V   ・50kHz(@2856K 100lx)   ・4ピン表面実装パッケージ   ・広いダイナミックレンジ */ //********************************************************************** #define LED PORTB.F3 //********************************************************************** void interrupt() { PIR1.TMR1IF = 0; // TRISA.F4 = 0; // ゲートを閉める。 PORTA.F4 = 0; T1CON.TMR1ON = 0; // TIMER1を停止する。 LED = ~LED; } //********************************************************************** unsigned long FreqMeasurement() { unsigned long freq; // TRISA.F4 = 0; //ゲートを閉める。 PORTA.F4 = 0; // TIMER0の設定 INTCON.T0IF = 0; TMR0 = 0; // TIMER1の設定 PIR1.TMR1IF = 0; TMR1L = 0x58; // 25000=(0.1/8000000) * 4 * 8 TMR1H = 0x9E; // 0x9E58=65536-25000 // freq = 0; // 割り込みを許可する。 INTCON.PEIE = 1; INTCON.GIE = 1; // 開始 T1CON.TMR1ON = 1; //カウント遅延 asm nop asm nop asm nop asm nop asm nop asm nop asm nop asm nop asm nop asm nop asm nop asm nop asm nop asm nop // TRISA.F4 = 1; //ゲートを開ける。 // 測定 while (T1CON.TMR1ON != 0) { if (INTCON.T0IF == 1) { INTCON.T0IF = 0; freq++; } } if (INTCON.T0IF == 1) { INTCON.T0IF = 0; freq++; } freq = (freq * 256) + TMR0; return (freq); } //********************************************************************** void main() { float freq; unsigned char buf[12], cnt; // OSCCON = 0b01110000; // 内臓クロックを8Mhzに設定する。 CMCON = 0b00000111; // コンパレータは使用しない。 ANSEL = 0b00000000; // A/D変換は使用しない。 TRISA = 0b01111100; TRISB = 0b00000111; OPTION_REG.NOT_RBPU = 0; // TIMER0の設定 INTCON.T0IE = 0; INTCON.T0IF = 0; OPTION_REG.T0CS = 1; OPTION_REG.PSA = 1; TMR0 = 0; // TIMER1の設定 PIE1.TMR1IE = 1; PIR1.TMR1IF = 0; T1CON.T1CKPS0 = 1; T1CON.T1CKPS1 = 1; T1CON.TMR1ON = 0; // Lcd_Custom_Config(&PORTB,7,6,5,4,&PORTA,7,0,1); Lcd_Custom_Cmd(LCD_CURSOR_OFF); Lcd_Custom_Cmd(LCD_CLEAR); // while (1) { freq = 0.0; for (cnt = 0; cnt < 10; cnt++) { freq += FreqMeasurement(); } // 周波数の表示 LongToStr(freq, buf); Lcd_Custom_Out(2, 1, &buf[3]); Lcd_Custom_Out(2, 9, "Hz"); // freq = freq / 500.0 * 100.0; LongToStr(freq, buf); buf[3] = buf[4]; buf[4] = buf[5]; buf[5] = buf[6]; buf[6] = buf[7]; buf[7] = buf[8]; buf[8] = '.'; Lcd_Custom_Out(1, 1, &buf[3]); Lcd_Custom_Out(1, 9, "Lux"); } } //**********************************************************************