I am trying to generate code that reads the pulswidth of a signal. I am avoiding use of Interupt pins 1 and 2 for later use. As my code is set up, I am trying to read the pulsewidth on pin 3. (BTW this is the Vex controller, I don't think it should make a difference though)
The code:
Code:
#define accel_x rc_dig_int3
.......
else if (INTCONbits.RBIF && INTCONbits.RBIE) /* Ints 3-6 (RB4, RB5, RB6, or RB7) changed. */
{
int_byte = PORTB; /* You must read or write to PORTB */
if(accel_x){
WriteTimer1( 0x00 );
T1CONbits.TMR1ON = 1; // turn it on
}
else if (!accel_x){
T1CONbits.TMR1ON = 0; // turn it off
accel_xTilt= ReadTimer1();
WriteTimer1( 0x00 );
}
INTCONbits.RBIF = 0; /* and clear the interrupt flag */
}
I had a suspicion that maybe I am reading the pin incorrectly, so I set up:
Code:
void Process_Data_From_Local_IO(void){
if(accel_x){printf("ON\n");}
else if (!accel_x){printf("OFF\n");}
}
It works, but it seems that there is a lag. Forexample I hooked up a normal switch to the pin. On the terminal I get
0n
0n
....
I then press the switch
0n
0n
0n
....................... (Ons for about another second)
Off
Off
It is the same for the 0ff to On transition.
I thought maybe for some reason my ISR was consuming to much time, explaining the delay, and so I took all of my code out an left the default:
Code:
...
else if (INTCONbits.RBIF && INTCONbits.RBIE) /* Ints 3-6 (RB4, RB5, RB6, or RB7) changed. */
{
int_byte = PORTB; /* You must read or write to PORTB */
INTCONbits.RBIF = 0; /* and clear the interrupt flag */
} /* to clear the interrupt condition. */
Thanks for anyhelp.