Hi hkpatrice,
have you tried installing a capacitor on your MCLR pin to ground to hold the PIC in a reset condition until the chip settles down internaly?
I see no TRISE statement in code . . . Probably need this so chip knows input or outputs.
Hi hkpatrice,
have you tried installing a capacitor on your MCLR pin to ground to hold the PIC in a reset condition until the chip settles down internaly?
I see no TRISE statement in code . . . Probably need this so chip knows input or outputs.
Last edited by Archangel; - 22nd November 2007 at 06:39.
If you do not believe in MAGIC, Consider how currency has value simply by printing it, and is then traded for real assets.
.
Gold is the money of kings, silver is the money of gentlemen, barter is the money of peasants - but debt is the money of slaves
.
There simply is no "Happy Spam" If you do it you will disappear from this forum.
Joe s. said:
"Hi hkpatrice,
have you tried installing a capacitor on your MCLR pin to ground to hold the PIC in a reset condition until the chip settles down internaly? I see (at least I think I see) you are feeding the mclr pin through a resistor from the 24 volt line and limiting the voltage with a zener, I am wondering if that zener is introducing noise from it's constant switching, cycling the voltage up/down. . . How does it work on a 5v regulated supply?"
Hello Joe and thanks for the quick answer.
-I haven't tried putting a cap on the MCLR line, however, I have the power-up timer enabled, doesn't that play a similar role?
-The MCLR pin is fed through a resistor from the 5V rail, not the 24V one... And no zener there... Sorry for the quality of the BMP, it's the best I could do while staying under the 200Kb limit.
-You are right about the missing TRISE statement! How could I miss that? Could that be the cause of the problems I've been experiencing?
Thanks for the input!
can you try to use PrimoPDF to post your Schematic?
http://www.primopdf.com/
PrimoPDF is free and really nice, not sure 'bout the final PDF size so far
It also seems to have something to do with the ISR, about DISABLE/ENABLE/RESUME 'round your ISR
Last edited by mister_e; - 22nd November 2007 at 17:15.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
mister_e,
Thanks for the suggestion, I tried convertingthe file to PDF but it still comes in at 370Kb...
Still too much to post on here.
Please tell me more about this interrupt handling issue, you seem to have spotted something that eludes me. Of course, If the problem was with the ISR, then it would cause the erratic behavior I've been experiencing...
Thanks for the help!
Try to ZIP your PDF, or send it to my e-mail.
Originally Posted by MCS help file --- On Interrupt
MAYBE it's safe to place Disable BEFORE the ISR as long as there's another ENABLE somewhere after, but i don't see anyCode:ON INTERRUPT GOTO serialin ' Declare interrupt handler routine ' ' ' ' ' Subroutines DISABLE ' Don't check for interrupts in this section getbuf: ' move the next character in buffer to bufchar index_out = (index_out + 1) ' Increment index_out pointer (0 to 63) IF index_out > (buffer_size-1) THEN index_out = 0 ' Reset pointer if outside of buffer ADDRESS = addressbuffer[index_out] ' Read buffer location COMMAND = commandbuffer[index_out] RETURN error: ' Display error message if buffer has overrun errflag = 0 ' Reset the error flag CREN = 0 ' Disable continuous receive to clear overrun flag CREN = 1 ' Enable continuous receive GOTO main ' Carry on ' Interrupt handler ' Where's the Disable??? serialin: ' Buffer the character received IF PIR1.5=1 THEN 'IF THIS IS A USART INTERRUPT.... IF OERR THEN usart_error ' Check for USART errors index_in = (index_in + 1) ' Increment index_in pointer (0 to 63) IF index_in > (buffer_size-1) THEN index_in = 0 'Reset pointer if outside of buffer IF index_in = index_out THEN buffer_error ' Check for buffer overrun HSERIN badparity,10,badparity,[addressbuffer[index_in],commandbuffer[index_in]] ' Read USART and store character to next empty location IF RCIF THEN serialin ' Check for another character while we're here ENDIF RESUME ' Return to program badparity: IF index_in=0 THEN index_in= (buffer_size-1) ELSE index_in = (index_in - 1) ' Move pointer back to avoid corrupting the buffer. ENDIF GOTO main ' You don't even need it as you used HSER_CLROERR define. ' Let's say CLROERR don't work, YOU DON'T WANT TO use a GOTO inside the ISR ' or you'll experiment a stack overflow/underflow one day or another. Same rule apply in badparity sub.. which is also called somewhere in the main loop usart_error: errflag=1 GOTO main buffer_error: errflag.1 = 1 ' Set the error flag for software IF index_in=0 THEN index_in= (buffer_size-1) ELSE index_in = (index_in - 1) ' Move pointer back to avoid corrupting the buffer. ENDIF RESUME ' Return to program
Maybe there's something else, those are the first who jump in my face.
HTH
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Bookmarks