|
|
View previous topic :: View next topic |
Author |
Message |
embedded123
Joined: 06 May 2009 Posts: 3
|
12F683 Undefined indentifier WDT_1152MS |
Posted: Wed May 06, 2009 10:25 am |
|
|
Hi,
I use PCM Compiler V4.004 to complile my code for PIC12F683.
I got "Undefined identifier WDT_1152MS on this line:
setup_wdt( WDT_1152MS );
The same code compilers if I change header file from 12F683.h to 16F73.h.
Could anybody help me with this?
Thanks in advance.
Jeff |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed May 06, 2009 10:30 am |
|
|
That's a very early version and shouldn't be used for anything.
But, look in the 12F683.h file to see if WDT_1152MS is defined there.
It's also possible that you didn't construct the program properly.
The #include file for the PIC goes at the top of the program.
Don't just put a #device statement there. Example:
Code: | #include <12F683.h>
#fuses INTRC_IO, WDT, MCLR, PUT, BROWNOUT
#use delay(clock=4000000)
//=============================
void main()
{
setup_wdt(WDT_1152MS);
while(1)
{
restart_wdt();
}
}
|
|
|
|
embedded123
Joined: 06 May 2009 Posts: 3
|
|
Posted: Wed May 06, 2009 10:38 am |
|
|
Thanks for your quick reply.
I checked 12F683.h, here is the snip:
Quote: | ////////////////////////////////////////////////////////////////// WDT
// Watch Dog Timer Functions: SETUP_WDT() or SETUP_COUNTERS() (see above)
// RESTART_WDT()
//
#define WDT_ON 1
#define WDT_OFF 0
#define WDT_DIV_32 1
#define WDT_DIV_64 3
#define WDT_DIV_128 5
#define WDT_DIV_256 7
#define WDT_DIV_512 9
#define WDT_DIV_1024 11
#define WDT_DIV_2048 13
#define WDT_DIV_4096 15
#define WDT_DIV_8192 17
#define WDT_DIV_16394 19
#define WDT_DIV_32768 21
#define WDT_DIV_65536 23 |
In 16F73.h, it is this:
Quote: | ///////////////////////////////////////////////////////////////// WDT
// Watch Dog Timer Functions: SETUP_WDT() or SETUP_COUNTERS() (see above)
// RESTART_WDT()
//
#define WDT_18MS 8
#define WDT_36MS 9
#define WDT_72MS 10
#define WDT_144MS 11
#define WDT_288MS 12
#define WDT_576MS 13
#define WDT_1152MS 14
#define WDT_2304MS 15 |
What should I do?
Regards,
Jeff
PCM programmer wrote: | That's a very early version and shouldn't be used for anything.
But, look in the 12F683.h file to see if WDT_1152MS is defined there.
It's also possible that you didn't construct the program properly.
The #include file for the PIC goes at the top of the program.
Don't just put a #device statement there. Example:
Code: | #include <12F683.h>
#fuses INTRC_IO, WDT, MCLR, PUT, BROWNOUT
#use delay(clock=4000000)
//=============================
void main()
{
setup_wdt(WDT_1152MS);
while(1)
{
restart_wdt();
}
}
|
|
|
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed May 06, 2009 10:53 am |
|
|
Copy and paste the definitions from the 16F73.h file into the 12F683.h file.
But be aware that vs. 4.004 is complete junk. (As you can see from the
missing #defines). It didn't become stable until months later. I don't
really want to answer any more questions on it. |
|
|
embedded123
Joined: 06 May 2009 Posts: 3
|
|
Posted: Wed May 06, 2009 11:00 am |
|
|
Thanks for answering my question. |
|
|
Ttelmah Guest
|
|
Posted: Thu May 07, 2009 2:21 am |
|
|
Just think for yourself....
The 'point' is that the watchdog, only ever actually supports 'divisors'. The 'times' that result from these, are very variable. As a convenience, on some chips, CCS calculated the (suupposed) time that the particular divisors give, and include constants for these in the include file, but it is always really better, and safer, to read the data sheet, and work out for yourself, what divisor you need, and what the minimum time is that this will equate to.
Now, the 'default' core time for the watchdog, is 17mSec on these chips. So the divisors give:
WDT_DIV_32 544mS
WDT_DIV_64 1088mS
WDT_DIV_128 2176mS
WDT_DIV_256 4352mS
WDT_DIV_512 8704mS
WDT_DIV_1024 17408mS
These are all approximate, so (for example), WDT_DIV_64, gives a minimum of 640mSec, to a maximum of 1920mSec.
You will note that _none_ correspond to a nominal 1152mSec.
Don't use the constants for the 16F73. This has a completeley different watchdog, with different timings supported, and different constants needed. The 683, can't actually give this time, with the 'closest' being using the /64 or /128 dividers.
So, think for yourself, chose the divisor that _in it's worst case_, exceeds the shortest period at which you will refresh the watchdog, and even on chips that offer these 'time' values, do not rely on them, but read the data sheet, and be sure you know what the times really may be....
As a further comment though, as PCM has already said, 4.004, will be unlikely to give working code. Read the V4 thread at the top of the forum. At 4.004, the compiler was (fit own rude word here...).
Best Wishes |
|
|
FvM
Joined: 27 Aug 2008 Posts: 2337 Location: Germany
|
|
Posted: Thu May 07, 2009 4:13 am |
|
|
I also considered to answer something similar as Ttelmah, that the 12F683 has different registers than the 16F673 and you should use the constants provided with the 12F683.h file. Then I realized, that during the various V4.xxx iterations the coding of setup_wdt() and the *.h file constants apparently have been changed. I checked the code from a recent PCM version, and I must confess, that I don't understand at first sight what they are doing now. I know, that with PCM V3.xxx the 12F watchdog has been programmed by using WDT_DIV_xxx constants, which would the obvious and direct way to my opinion. Now they are doing something different, also involving the prescaler.
I'm not using PCM V4.xxx up to now due to several changes that are incompatible with existing projects, the WDT programming seems to be one of these. |
|
|
Ttelmah Guest
|
|
Posted: Thu May 07, 2009 8:54 am |
|
|
Worse though, they have obviously not read the data sheet.....
They give a 18mSec watchdog a the lowest setting, while on the 683, the default shortest watchdog 'time', is 17mSec, with a minimum of 10mSec, and max of 30mSec. The basic watchdog interval is shorter than on most chips.
The newer compiler do still accept the smaller divisor values though, so these are 'standard', and the better way to go.
It is really symptomatic of the CCS 'attitude', of trying to hide the hardware. When they hide the settings, and then get them wrong, it is a bit of a pain.
Best Wishes |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|