ミリ秒計測回路





//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 |