View Single Post
  #2   Spotlight this post!  
Unread 04-01-2008, 01:32
billbo911's Avatar
billbo911 billbo911 is offline
I prefer you give a perfect effort.
AKA: That's "Mr. Bill"
FRC #2073 (EagleForce)
Team Role: Mentor
 
Join Date: Mar 2005
Rookie Year: 2005
Location: Elk Grove, Ca.
Posts: 2,356
billbo911 has a reputation beyond reputebillbo911 has a reputation beyond reputebillbo911 has a reputation beyond reputebillbo911 has a reputation beyond reputebillbo911 has a reputation beyond reputebillbo911 has a reputation beyond reputebillbo911 has a reputation beyond reputebillbo911 has a reputation beyond reputebillbo911 has a reputation beyond reputebillbo911 has a reputation beyond reputebillbo911 has a reputation beyond repute
Re: Interrupt issue with new code

Quote:
Originally Posted by EHaskins View Post
I've been trying to write the drive code for my current prototype drive, but I'm having issues.

This is the setup:
Hardware:
BaneBots gearbox connected to pwm01
Banebots encoder kit and encoder divider board installed on the gearbox.
Divider direction connected to rc_dig_in07
Divider speed connected to rc_dig_in03

Software:
Kevin's new code
In "interrupts.h"
#define ENABLE_INT_3_6 un-commented
In "teleop.c"
"Initialize_Int_3_6();" added to Initialization() where comments indicate.
Code:
void Teleop(void)
{
	static int i, j;
	i ++;
	j ++;

	if (i > 20)
	{
		printf("Encoder 1 Direction = %d\r\n", (int)ENCODER_ONE_DIRECTION);
		printf("Encoder 1 = %d\r\n\r\n", (int)Encoder_One_Count());
		i = 0;
	}

             //Run motor to demomstrate proper functioning
	if (j < 100)
	{
		Motor(1, 50);//in drive.c
	}
	else if (j < 150)
	{
		Motor(1, 0);
	}
	else if (j < 250)
	{
		Motor(1, -50);
	}
	else if (j < 300)
	{
		Motor(1, 0);
	}
	else
	{
		j = 0;
	}
	//Update_OI_LEDs();	// located in ifi_code.c
}
In "interrupts.c"
Call to "Encoder_One_Tick()"(in Drive.c) added in Int_3_Handler

EDIT: I attached the drive.c/.h files
The Direction displays correctly, but the count is always 0.

I'm sure I forgot something really simple, but I can't figure it out.

I'll send the complete project to anyone who wants to look at it.
I think you are right. The error looks simple to me as well. I think the reason you aren't seeing the count change is because the code in your ISR to do the increment/decrement is commented out. It looks like it should work correctly if the whack whacks and whack star and star whacks were removed.

Code:
void Encoder_One_Tick(void)
{
	//if (ENCODER_ONE_DIRECTION)
	//{
		_countOne ++;
	/*}
	else
	{
		_countOne --;
	}*/
}
__________________
CalGames 2009 Autonomous Champion Award winner
Sacramento 2010 Creativity in Design winner, Sacramento 2010 Quarter finalist
2011 Sacramento Finalist, 2011 Madtown Engineering Inspiration Award.
2012 Sacramento Semi-Finals, 2012 Sacramento Innovation in Control Award, 2012 SVR Judges Award.
2012 CalGames Autonomous Challenge Award winner ($$$).
2014 2X Rockwell Automation: Innovation in Control Award (CVR and SAC). Curie Division Gracious Professionalism Award.
2014 Capital City Classic Winner AND Runner Up. Madtown Throwdown: Runner up.
2015 Innovation in Control Award, Sacramento.
2016 Chezy Champs Finalist, 2016 MTTD Finalist