View previous topic :: View next topic |
Author |
Message |
chen
Joined: 03 Mar 2004 Posts: 11
|
Question/Trouble in using #fuses |
Posted: Mon Oct 04, 2004 12:15 pm |
|
|
I am using 18F8620 in my design, and my application requires Brownout detect with Brown out voltage at 4.2V.
1) When I use #fuses to set up BROWNOUT as:
#include <18F8620.h>
#fuses HS,NOWDT,PUT, NOPROTECT, NOLVP, BROWNOUT
I notice the HEX file generated by CCS still has no BROWNOUT flag:
:020000040030CA
:0E00000000220C0E83030100FFC0FFE0FF4052
2) How do I specify Brown out voltage 4.2V?
3) When brownout is detected, will the PiC simply reset? If not, what will it be?
Thanks for your attention/time! |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Oct 04, 2004 12:31 pm |
|
|
What compiler version are you using ? I compiled this test program
using your fuse settings with PCH vs. 3.188, and it worked OK.
See the results for Config word 2, below:
Code: | #include <18F8620.H>
#fuses HS,NOWDT,PUT, NOPROTECT, NOLVP, BROWNOUT
main()
{
while(1);
} |
From the .HEX file:
Code: | :0E00000000220E0E83038100FFC0FFE0FF40D0 |
From the end of the .LST file:
Code: | Configuration Fuses:
Word 1: 2200 HS NOOSCSEN
Word 2: 0E0E BROWNOUT WDT128 NOWDT BORV25 PUT
Word 3: 0383 NOWAIT MCU CCP2C1 T1STANDARD
Word 4: 0081 STVREN NODEBUG NOLVP
Word 5: C0FF NOPROTECT NOCPD NOCPB
Word 6: E0FF NOWRT NOWRTD NOWRTC NOWRTB
Word 7: 40FF NOEBTR NOEBTRB |
|
|
|
chen
Joined: 03 Mar 2004 Posts: 11
|
|
Posted: Mon Oct 04, 2004 12:52 pm |
|
|
I am using Picc 3.186
BTW:
How do I specify 4.2V brownout voltage?
How do I detect a brownout from the software? (Checking RCON register?) |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Oct 04, 2004 1:29 pm |
|
|
Quote: | How do I specify 4.2V brownout voltage? |
To see the list of parameters for the #fuse statement, look at
the start of the 18F8620.H file. This file is in this folder:
c:\Program Files\Picc\Devices
You will see several available settings in this format: BORVxx
Quote: | How do I detect a brownout from the software? (Checking RCON register?) |
You could read the RCON register directly (after defining the address
with a #byte statement), or you could use the restart_cause() function.
The values that it returns are also given in the 18F8620.H file. |
|
|
chen
Joined: 03 Mar 2004 Posts: 11
|
|
Posted: Mon Oct 04, 2004 2:15 pm |
|
|
Thanks for your quick reply.
I tried BROWNOUT, and it simply doesn't work at all with CCS 3.186, but BORV42 works fine.
I will try some later version of CCS to see if it works there |
|
|
chen
Joined: 03 Mar 2004 Posts: 11
|
|
Posted: Tue Oct 05, 2004 7:30 am |
|
|
I just tried CCS 2.212, and the fuses were set correctly.
Now, a new question:
When I gradually lower the power supply voltage from 5 all the way down, until the PIC quits, I don't see the BrownOut reset, which is set at 4.2V
I also tried to lower it to 3.5V then back to 4.5V, I still don't see brownout reset
How is it supposed to work?
Thanks again! |
|
|
treitmey
Joined: 23 Jan 2004 Posts: 1094 Location: Appleton,WI USA
|
|
Posted: Tue Oct 05, 2004 8:53 am |
|
|
don't know it your hardware is buit yet or if you have pins available,...but
you could read analog volt from A pin on PIC and tie a output pin with a pull-up res to your reset. I know its not pretty, but it may work for you.
AND you could do a little more processing before the power dies. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Oct 05, 2004 10:24 am |
|
|
Please check the config bits by reading the PIC with your programmer.
Make sure that the correct bits are set:
BOREN = 1
// The following setting gives 4.2v
BORV0 = 1
BORV1 = 0
Also they recommend that the Power-up Timer should be enabled
when using Brownout reset.
\PWRTEN = 0 (ie., True)
See the reference manual:
http://ww1.microchip.com/downloads/en/DeviceDoc/39503.pdf
After you've checked all these things, if it still doesn't work, I will
drag my heavy variable power supply out of the closet and test BOR
with a 18F452 or 458. But I'm asking you to check everything first. |
|
|
chen
Joined: 03 Mar 2004 Posts: 11
|
|
Posted: Tue Oct 05, 2004 10:56 am |
|
|
Thanks, I will confirm that.
According to the 18F8620 user manual (section 3.5) and my setup, brownout reset should occur when supply is below 4.2V for more than 200us, and the chip will remain in brownout reset until Vdd rises above BVdd.
Since my Vdd drops slowly, once it is below BVdd, it will never come back above it, so it is not really a brown out here.
I wonder if there is a way for me to get a warning of Vdd is below 4.2V (without adding power monitoring circuit outside of PIC).
Anyway, I don't think it is CCS' problem, for the HEX file does have the correct flags set.
Thanks again for your time! |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Oct 05, 2004 11:44 am |
|
|
I tested Brownout reset with the 18F458, and it works completely as
expected.
This is the test program I used:
Code: | #include <18F458.h>
#fuses XT, NOWDT, PUT, PROTECT, NOLVP, BROWNOUT, BORV42
#use delay(clock = 4000000)
#use rs232(baud = 9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
//========================================
void main()
{
char i;
printf("Start\n\r");
i = 0;
while(1)
{
printf("%x\n\r", i++);
delay_ms(500);
}
} |
First, I ran that program with the NOBROWNOUT fuse setting.
I noted that it ran OK down to 3.0 volts, or less. Then I recompiled
and programmed the PIC with the BROWNOUT and BORV42 settings.
Then I slowly turned the voltage knob down, while watching my
digital voltmeter. When it got down to about 4.3v, the program
stopped sending characters via RS-232. If I then raised the
voltage back up a little, the PIC reset itself and started outputting
characters again. Here is the output from the terminal window.
Code: | 15
16
17
18
19
1a
Start
00
01
02
03
04 |
Please try this program on your test board. |
|
|
chen
Joined: 03 Mar 2004 Posts: 11
|
|
Posted: Tue Oct 05, 2004 12:28 pm |
|
|
PCM programmer & treitmey:
Thanks for your time
As I stated in my last post, I finally realized my test condition was not really a brown-out case, but a slow discharging, thus I will not see the PIC come out off the brown-out reset
I may have to use some external circuit to generate the interrupt so that I can do some final clean before the PIC dies. |
|
|
|