|
|
View previous topic :: View next topic |
Author |
Message |
Guest
|
WDT WatchDog Questions? |
Posted: Wed Mar 19, 2008 3:18 am |
|
|
Hi,
I would like to know, How I can calculate the time-out period? my pic is a PIC16F688,I do not understand that the time-out period for each Prescale Rate.
I think:
Bit Value = Prescale Rate -->c
0000 = 1:32 -->equals 1ms
0001 = 1:64 -->equals ???????
0010 = 1:128 -->equals ???????
0011 = 1:256 -->equals ???????
0100 = 1:512 (Reset value) -->equals ???????
0101 = 1:1024 -->equals ???????
0110 = 1:2048 -->equals ???????
0111 = 1:4096 -->equals ???????
1000 = 1:8192 -->equals ???????
1001 = 1:16384 -->equals ???????
1010 = 1:32768 -->equals ???????
1011 = 1:65536 -->equals 268 seconds
Please me a good answer to this question.
Best Regars |
|
|
Guest_7068 Guest
|
|
Posted: Wed Mar 19, 2008 4:49 am |
|
|
You must note that this version of the chip has 2 scalers.
Option_Reg : This is a standard pre-scaler that allows scaling of the WDT from 1:1 to 1:128
WDTCON : This register allows additional pre-scaling of the WDT from 1:32 to 1:65536
The WDT runs off a 31 Khz Internal Oscillator, so the lowest WDT period value you get is 31 Khz /32 ~= 1ms
The default value (RESET value) is
Option_Reg = 1:1
WDTCON = 1:512
This will give you a rate: 31 Khz / 512 = 16ms
Now, understanding the CCS options is a little tricky as they have to keep the old chip and new chip options compatible. so they use the following method:
Code: |
SETUP_WDT(WDT_18MS | WDT_DIV_16);
|
WDT_18MS --> This is the old constant which sets up the chips which have only 1 prescaler
WDT_DIV_16 --> This will mean that 18 ms DIV by 16 ~= 1ms
Now, if you want to setup the defult value of 16 ms, you will use:
Code: |
SETUP_WDT (WDT_18MS | WDT_TIMES_1); // 18 ms * 1 --> This is logically close to 16 ms
|
Similarly, if you want to set the highest timeout period of 268 seconds you will use
Code: |
SETUP_WDT(WDT_2304MS | WDT_TIMES_128); // This will actually mean 2304 * 128 = 292 seconds which is logically close to 268 seconds
|
So, depending on the period you want, you can do a simple math like WDT_xxMS | WDT_TIMES_X (or WDT_DIV_X), which will give you a number close to the actual value. |
|
|
Guest
|
|
Posted: Wed Mar 19, 2008 5:15 am |
|
|
Hi, thanks for your response,
I configure the WDTCON = 0x10, for the pre-escaler 1/8192 this watchdog time period is big aprox. 8seg or more. I think that the time period for 1/65536 correspond the 268sec, and 1/4096 the 1sec. I would like to know how calculate these values.
Code: | #include <16F688.h>
#device ADC=10
#fuses INTRC_IO,WDT,NOMCLR,NOPROTECT, BROWNOUT,NOPUT
#use delay(clock=4000000)
#use STANDARD_IO(C)
#BYTE OSCCON = 0x8F //endereço do OSCCON register
#BYTE WDTCON = 0x18 //endereço do WDTCON
void main(void) {
float VPS,VBAT;
OSCCON=0x61; //Configuração do registo OSCCON 4MHZ, 71->8MHZ
WDTCON = 0x10; //Configuração do wdt para preescales 1:8192 >
// setup_adc_ports(3);
// setup_adc(ADC_CLOCK_DIV_16);
setup_adc_ports(3);
setup_adc(ADC_CLOCK_DIV_16); //4us por amostra
delay_ms(1000); //1s
delay_ms(1000); //1s
delay_ms(1000); //1s
output_high(PIN_A5);//
while (true)
{
restart_wdt();
.................
}}
|
Best Regards |
|
|
|
|
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
|