Hi all,
I need some advice on BOD Brown Out Detect programming as I'm doing my head in....
Pic 12F683 locks up when Vdd voltage drops below 0.6Vdc and then returns => 1.5Vdc.
Obviously I need to use the built in BOD feature but I'm having issues getting it to work the way I want. Here are my issues:
1. If I set config fuse BOD = ON -> the device is continually in reset even when Vdd = 5V - basically a complete lock up.
2. If I set config fuse BOD = SBODEN and enable BOD within the program - the PIC will reset at the place the code executes the enable BOD command. However - the pic does indeed BOD reset when voltage BOD occures.
3. If I never enable BOD - then the program continues to work happily until a voltage BOD occures.
What I want is for the program to keep running until a BOD occurres (~2.0Vdc) - then reset.
Can someone see where I have gone wrong and point me in the right direction?
Code:' SET FUSES ASM ; PIC12F683 __CONFIG _MCLRE_OFF & _WDT_ON & _INTRC_OSC_NOCLKOUT & _BOD_SBODEN & _CPD_OFF &_PWRTE_ON ENDASM PAUSE 100 ' STARTUP DELAY CMCON0 = 7 ' TURN ANALOG COMPARATOR MODE OFF ANSEL = 0 ' MAKE ALL GPIOS INPUT ACCEPT GP2 TRISIO = $3B ' INT OSC 4MHZ OSCCON = $61 SBOREN VAR PCON.4 POR VAR PCON.1 BOR VAR PCON.0 SBOREN = 0 ; BOR DISABLED PAUSE 1000 SEROUT2 GPIO.2,188,["XXXXXXXXXXXX",13,10] ; CLEAR BUFFER SEROUT2 GPIO.2,188,["RESET",13,10] ; ANNOUNCE PROGGY STARTED/RESET MAIN: if POR = 0 then ; POWER RESET OCCURRED SEROUT2 GPIO.2,188,["POWER RESET OCCURRED",13,10] POR = 1 ; CLEAR POR FLAG ENDIF if BOR = 0 then ; BROWN OUT OCCURRED SEROUT2 GPIO.2,188,["BOR OCCURRED",13,10] BOR = 1 ; CLEAR BOR FLAG ENDIF SEROUT2 GPIO.2,188,["Hello World!",13,10] PAUSE 1000 SBOREN = 1 ' ENABLE BOR ; ENABLE BRWN OUT DETECT GOTO MAIN END







Bookmarks