View Single Post
  #1   Spotlight this post!  
Unread 13-02-2005, 14:44
Tom Bottiglieri Tom Bottiglieri is offline
Registered User
FRC #0254 (The Cheesy Poofs)
Team Role: Engineer
 
Join Date: Jan 2004
Rookie Year: 2003
Location: San Francisco, CA
Posts: 3,186
Tom Bottiglieri has a reputation beyond reputeTom Bottiglieri has a reputation beyond reputeTom Bottiglieri has a reputation beyond reputeTom Bottiglieri has a reputation beyond reputeTom Bottiglieri has a reputation beyond reputeTom Bottiglieri has a reputation beyond reputeTom Bottiglieri has a reputation beyond reputeTom Bottiglieri has a reputation beyond reputeTom Bottiglieri has a reputation beyond reputeTom Bottiglieri has a reputation beyond reputeTom Bottiglieri has a reputation beyond repute
Processing pre-set Interrupts

I am having troubles with my encoder. It is a 128 ppr encoder, and at close to maximum shaft RPM, I start to get bad readings from it. I figured this was from the RC trying to process too many interrupts per second, so I know I need decrease the ppr of the encoder.

The way I thought I could do this was by including a true/false check statement in the InterruptHandlerLow() function that would only call the Encoder Handler Function every other time that interrput happened. I tried doing this with if's and switch statements, but neither worked. I still got 128 ticks per revolution.

Heres a sample of the code I am using.
Code:
unsigned char loops=0;

void InterruptHandlerLow()     
{     
     if(loops==0)
     { 
         if (INTCON3bits.INT2IF && INTCON3bits.INT2IE) // left encoder interrupt?
		{ 
			INTCON3bits.INT2IF = 0; // clear the interrupt flag [91]
			Left_Encoder_Int_Handler(); // call the left encoder interrupt handler (in encoder.c)
		}
          loops=1;
     }
     else loops=0;
}
Any ideas?

Last edited by Tom Bottiglieri : 13-02-2005 at 14:47.