View Single Post
  #2   Spotlight this post!  
Unread 19-02-2006, 11:18
Kevin Watson's Avatar
Kevin Watson Kevin Watson is offline
La Caņada High School
FRC #2429
Team Role: Mentor
 
Join Date: Jan 2002
Rookie Year: 2001
Location: La Caņada, California
Posts: 1,335
Kevin Watson has a reputation beyond reputeKevin Watson has a reputation beyond reputeKevin Watson has a reputation beyond reputeKevin Watson has a reputation beyond reputeKevin Watson has a reputation beyond reputeKevin Watson has a reputation beyond reputeKevin Watson has a reputation beyond reputeKevin Watson has a reputation beyond reputeKevin Watson has a reputation beyond reputeKevin Watson has a reputation beyond reputeKevin Watson has a reputation beyond repute
Re: Camera glitch / failure

Quote:
Originally Posted by Eldarion
I am having a problem with the 2005 camera code and the 2006 controller. The camera will "glitch" randomly and never recover. I have had the thing run for 30 minutes with no problems, and yet sometimes it will give out in five seconds!

It is giving all the appearences of a receive failure, and resetting the RC is the only thing that can make it recover. I have tried 2 different camera boards, with and without the TTL converter (made a special cable for without!). I have tried software and hardware resetting the camera board, to no avail. (It resets the camera board, but the RC never seems to receive anything, including the power-on ACKs, after the failure).

Can anyone help me on this? It is frustrating me to no end. When I say random, I mean random!

EDIT:
I wonder if this will clear up the problem? It looks as if maybe we are setting the RX overflow bit now and them (maybe due to a coincidental firing of a lot of interrupts in a short period of time), and this will halt the RX completely until the following code is called.

Kevin, could you please help me with this? I haven't worked directly with the PIC USARTs before.

Code:
if(RCSTA2bits.OERR)
{
RCSTA2bits.CREN = 0;		// Make sure the receive is still enabled!
RCSTA2bits.CREN = 1;
RXINTE2 = 1;
}
Make sure the serial port receive interrupts are the first to get serviced in the low-priority ISR. If it is an overrun error, you can only fix it by resetting the serial port Rx circuit with this code:

Code:
 
// if the interrupt handler was disabled while data was being received,
// data may have backed-up in the receiver circuitry, causing an overrun
// condition. So let's check the OERR bit to see if this has happened
// and if it has, we'll need to reset the serial port receiver circuitry
// to get data flowing again.
if(RCSTA1bits.OERR)
{
// reset by turning off the receiver circuitry, then...
RCSTA1bits.CREN = 0;
 
// ...turn it back on
RCSTA1bits.CREN = 1;
 
// indicate that we've had an error
RX_1_Overrun_Errors++;
}
If you're using my serial port driver, this is automatically handled in the Rx ISRs. If you aren't using my code, you can place this code in the fast loop.

-Kevin
__________________
Kevin Watson
Engineer at stealth-mode startup
http://kevin.org