Go to Post Last I checked, this was a competition... just checked again, yup still has Competition in the name. - Andrew Schreiber [more]
Home
Go Back   Chief Delphi > Technical > Programming
CD-Media   CD-Spy  
portal register members calendar search Today's Posts Mark Forums Read FAQ rules

 
Closed Thread
Thread Tools Rate Thread Display Modes
  #1   Spotlight this post!  
Unread 13-02-2005, 23:27
neilsonster's Avatar
neilsonster neilsonster is offline
Registered User
AKA: Andrew Neilson
FRC #0772 (Sabre Bytes)
Team Role: College Student
 
Join Date: Jan 2005
Rookie Year: 2005
Location: Waterloo, ON, Canada
Posts: 188
neilsonster is a name known to allneilsonster is a name known to allneilsonster is a name known to allneilsonster is a name known to allneilsonster is a name known to allneilsonster is a name known to all
Send a message via MSN to neilsonster
Problems Initializing Serial Driver...

Hi, after getting my automous scripting and autonomous camera codes working independently, I have been having quite a bit of trouble putting the two together. The problems have seemed to start coming in User_Initialization when I call Serial_Driver_Initialize() along with Initialize_Encoders() and Initialize_Gyro() (from Kevin Watson's code).

I examined this and noticed it deals with interrupts, which I have had no experience with (It's my first and only year since I'm graduating this year ). Would anyone please be able to explain to me where the conflict lies? Here is the code from the three functions:

Serial_Driver_Initialize()
Code:
void Serial_Driver_Initialize(void)
{
  Initialize_uart();  
}

(which calls this) ---v

static void Initialize_uart(void)
{
  uword8 flush;
 
  /* Setup the device control block (dcb) */
  dcb[PROGRAM_PORT].myRCREG = &RCREG1;
  dcb[PROGRAM_PORT].myTXREG = &TXREG1;
  dcb[PROGRAM_PORT].portId = 1;         /* setup unique ID for PROGRAM_PORT */
  Reset_Control_Block(&dcb[PROGRAM_PORT]);

  dcb[TTL_PORT].myRCREG = &RCREG2;
  dcb[TTL_PORT].myTXREG = &TXREG2;
  dcb[TTL_PORT].portId = 2;             /* setup unique ID for TTL_PORT */
  Reset_Control_Block(&dcb[TTL_PORT]);

  /* Initialize the PROGRAM_PORT port */
#if USE_BUFFERED_PRINTF
  Open1USART(USART_TX_INT_ON & USART_RX_INT_ON & USART_ASYNCH_MODE &
    USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, baud_115); 
#else
  Open1USART(USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE &
    USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, baud_115); 
#endif
  
  IPR1bits.TXIP = PRIORITY;      
  IPR1bits.RCIP = PRIORITY;     
  TRISCbits.TRISC6  = 0;        /*TX1 output*/
  TRISCbits.TRISC7 = 1;         /*RX1 input */
 
  flush = RCREG1;               /* flush data */
  flush = RCREG1;               /* flush data */
  RXINTF = 0;

  /* Initialize the TTL_PORT port */

  Open2USART(USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE &
    USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, baud_115); 
  
  IPR3bits.RC2IP = PRIORITY;     
  IPR3bits.TX2IP = PRIORITY;     
  TRISGbits.TRISG1 = 0;         /*TX2 output*/
  TRISGbits.TRISG2 = 1;         /*RX2 input */

  flush = RCREG2;               /* flush data */
  flush = RCREG2;               /* flush data */
  RXINTF2 = 0;
  aBreakerWasTripped = FALSE;
}
Initialize_Encoders()
Code:
void Initialize_Encoders(void)  
{
	// Initialize the left encoder's interrupt. INT2 on the user PIC18F8520 
	// is mapped to the interrupt one pin on the EDU-RC and digital I/O one  
	// on the FRC-RC. 
	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 the right encoder's interrupt. INT3 on the user PIC18F8520 
	// is mapped to the interrupt two pin on the EDU-RC and digital I/O two 
	// on the FRC-RC. 
	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
}
Initialize_Gyro()
Code:
void Initialize_Gyro(void)
{
	// reset the heading angle
	Reset_Gyro_Angle();

	// force a gyro bias calculation
	Calc_Gyro_Bias();

	// initialize the analog to digital converter
	Initialize_ADC();

	// initialize and start timer 2
	Initialize_Timer_2();
}

Then Initialize_Timer_2() does this:
void Initialize_Timer_2(void)  
{
	//
	// use these parameters for a 200Hz gyro sample rate
	//
	#ifdef GYRO_SAMPLE_RATE_200HZ
	// use a 1:16 prescaler
	T2CONbits.T2CKPS0 = 0;
	T2CONbits.T2CKPS1 = 1;

	PR2	= 221; // 223.21 - 2 is ideal

	// use a 1:14 postscaler
	T2CONbits.T2OUTPS0 = 1;
	T2CONbits.T2OUTPS1 = 0;
	T2CONbits.T2OUTPS2 = 1;
	T2CONbits.T2OUTPS3 = 1;
	#endif

	//
	// use these parameters for a 400Hz gyro sample rate
	//
	#ifdef GYRO_SAMPLE_RATE_400HZ
	// use a 1:16 prescaler
	T2CONbits.T2CKPS0 = 0;
	T2CONbits.T2CKPS1 = 1;

	PR2	= 140; // 142.05 - 2 is ideal

	// use a 1:11 postscaler
	T2CONbits.T2OUTPS0 = 0;
	T2CONbits.T2OUTPS1 = 1;
	T2CONbits.T2OUTPS2 = 0;
	T2CONbits.T2OUTPS3 = 1;
	#endif

	//
	// use these parameters for a 800Hz gyro sample rate
	//
	#ifdef GYRO_SAMPLE_RATE_800HZ
	// use a 1:16 prescaler
	T2CONbits.T2CKPS0 = 0;
	T2CONbits.T2CKPS1 = 1;

	PR2	= 69; // 71.02 - 2 is ideal

	// use a 1:11 postscaler
	T2CONbits.T2OUTPS0 = 0;
	T2CONbits.T2OUTPS1 = 1;
	T2CONbits.T2OUTPS2 = 0;
	T2CONbits.T2OUTPS3 = 1;
	#endif

	//
	// use these parameters for a 1600Hz gyro sample rate
	//
	#ifdef GYRO_SAMPLE_RATE_1600HZ
	// use a 1:4 prescaler
	T2CONbits.T2CKPS0 = 1;
	T2CONbits.T2CKPS1 = 0;

	PR2	= 140; //142.05 - 2 is ideal

	// use a 1:11 postscaler
	T2CONbits.T2OUTPS0 = 0;
	T2CONbits.T2OUTPS1 = 1;
	T2CONbits.T2OUTPS2 = 0;
	T2CONbits.T2OUTPS3 = 1;
	#endif

	// make sure the timer 2 register starts at zero
	TMR2 = 0x00;

	// timer 2 interrupt is low priority
	IPR1bits.TMR2IP = 0;

	// to prevent a spurious interrupt, make sure the interrupt flag is reset
	PIR1bits.TMR2IF = 0;

	// enable the timer 2 interrupt
	PIE1bits.TMR2IE = 1;

	// enable timer 2
	T2CONbits.TMR2ON = 1;
}
Ok well.. thank you very much for any help you have to offer.
Closed Thread


Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Scripting Setup and the Camera + Serial Port Drivers CJO Programming 22 11-01-2006 17:42
Updated: Serial Port Driver Code Kevin Watson Programming 4 05-02-2005 18:39
New Serial Port Driver Kevin Watson Programming 16 09-01-2005 01:56
If you're having MPLAB problems, LOOK HERE. Jeremy_Mc Programming 0 20-01-2004 18:06
Middle School Drivers ram General Forum 40 26-02-2003 17:01


All times are GMT -5. The time now is 09:26.

The Chief Delphi Forums are sponsored by Innovation First International, Inc.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi