ミリ秒計測回路
//m秒時間計測 //SensorA A2 //Sensor B A3 //SensorC A4 //Sensor checkLED A0 //Sensor checkLED A1 //Sensor checkLED B5 //TestSW B3 //I2C B1,B4 //ICSP CLR,B7,B6 // I2Cマスター 6*7seg 0x62 // #include <16f88.h> #fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT #use delay(clock = 20000000) #use i2c(MASTER,slow,sda=PIN_B1,scl=PIN_B4) #use fast_io(B) #use fast_io(A) #define seg6dva 0x62 int sn,i,w; long count0,count1,count2; int dig[6]; void main() { set_tris_a(0b11100);//4,3,2:in, 0,1:out set_tris_b(0b11011111);// output_bit(PIN_A0,0); output_bit(PIN_A1,0); output_bit(PIN_B5,0); delay_ms(300); count1 = 987; count2 = 321; while(1){ if(input_b() & 0x8){//sw off //Sensor test mode sn = input_a(); output_bit(PIN_A0,bit_test(sn,2)); output_bit(PIN_A1,bit_test(sn,3)); output_bit(PIN_B5,bit_test(sn,4)); } else {//測定開始 count0 =0; count1=1; count2=2; while(input_a() & 0x4){ output_bit(PIN_A0,1); count0++; delay_ms(3); if(count0 >= 999) { count1=888; break; } } while(input_a() & 0x8){ output_bit(PIN_A1,1); count1++; delay_ms(1); if(count1 >= 999) break; } while(input_a() & 0x10){ output_bit(PIN_B5,1); count2++; delay_ms(1); if(count2 >= 999 ) break; } } //10進数に分解 dig[5] =count1/100; w = count1 % 100; dig[4] = w/10; dig[3] = w % 10; dig[2]=count2/100; w = count2 % 100; dig[1] = w /10; dig[0] = w % 10; //I2C 送信 i2c_start(); //スタートコンディション i2c_write(seg6dva); for(i=6;i>0;i--){ i2c_write(i<<4 | dig[i-1] );//桁数と数値 } i2c_stop(); delay_ms(100); //count2++; //else }//while }
理論値 | 実験1 | 実験2 | 実験3 | 実験4 | |
A-B間 | 389 | 383 | 378 | 391 | 417 |
BーC間 | 217 | 222 | 222 | 223 | 222 |