Need Help with Encoder - Won't Count Clicks

I need help getting these encoder clicks to work in the 2005 FRC. It works fine in the demo encoder.hex. But I can’t it to work with the current frc.

What am I doing wrong??

Thanks
Adam

user_routines.c.txt (19.8 KB)


user_routines.c.txt (19.8 KB)

I am not sure whats included inside of the ‘Initialize_Encoders();’ function, but I believe that you need to initialize the interrupts first by running function ‘Initialize_Interrupts();’ before you run ‘Initialize_Encoders();’ inside of function ‘User_Initialization()’, like so:


void User_Initialization (void)
{
...
Initialize_Interrupts();
Initialize_Encoders();
Putdata(&txdata);			 /* DO NOT CHANGE! */
...
}

Error - could not find definition of symbol ‘Initialize_Interrupts’ in file ‘C:\FrcCode2005v2.4\user_routines.o’.
Errors : 1

:frowning:

Then I would suggest that you add it…

Sorry, thats just in my teams code I guess, I do not remember the default code, here is what the function looks like:


void Initialize_Interrupts(void) 
{
// initialize external interrupt 1 (INT2 on user 18F8520)
TRISBbits.TRISB2 = 1; // make sure the RB2/INT2 pin is configured as an input [108]
		//
INTCON3bits.INT2IP = 0; // 0: interrupt 1 is low priority (leave at 0 for IFI controllers) [91]
		// 1: interrupt 1 is high priority
		//
INTCON2bits.INTEDG2 = 1; // 0: trigger on the falling-edge [90]
		// 1: trigger on the rising-edge
		//
INTCON3bits.INT2IE = 1; // 0: disable interrupt 1 [91]
		// 1: enable interrupt 1
 
// initialize external interrupt 2 (INT3 on user 18F8520)
TRISBbits.TRISB3 = 1; // make sure the RB3/CCP2/INT3 pin is configured as an input [108]
		//
INTCON2bits.INT3IP = 0; // 0: interrupt 2 is low priority (leave at 0 for IFI controllers) [90]
		// 1: interrupt 2 is high priority
		//
INTCON2bits.INTEDG3 = 1; // 0: trigger on the falling-edge [90]
		// 1: trigger on the rising-edge
		//
INTCON3bits.INT3IE = 1; // 0: disable interrupt 2 [91]
		// 1: enable interrupt 2
}
 

It might be in your ‘Initialize_Encoders();’ routine, so check in there to see if its there before adding another function.

edit:

  • if you are adding the function, be sure to set the right interrupts you re using, and if not, make sure that they are set correctly as of now -

How are “Get_Left_Encoder_Count();” and “Get_Right_Encoder_Count()” defined in your code?
And what does your ‘InterruptHandlerLow()’ (inside of user_routines_fast.c) function include?

EDIT: we got it working fine