Circuit Negma

C++, C, VB.NET, PCB, Electronics, Circuit Design

How to Increment the nominal value of the Watchdog timer of PIC16F8xx

Posted by Circuit Negma on February 22, 2008


The most obvious reason of increasing the nominal value of WDT is to accommodate the complete code execution of your firmware including the use of Interrupt service subroutines.

The WDT has a nominal time-out value of 18ms. That is, the PIC will reset/restart the firmware execution from beginning (origin) every 18ms.

The purpose of WDT is to restart the microprocessor operations incase the microprocessor stop executing instructions due to internal hardware conflicts or infinite loop within the Firmware code.

To increment the nominal value of the WDT, one must assign the prescaler of TMRO (timer zero) to WDT. This is done be setting bit 0 of OPTION_REG register (aka. PSA bit) to 1.

PSA = 1;

Next, you need to set bits 0, 1, 2 of the OPTION_REG register (aka. PS0, PS1, and PS2). To do so, you need to look at the POSTSCALER rate select bits table in the PIC manual.

Ex: In this example I am going to assign TMR0 postscaler to WDT with a ration of 1:128.

PSA = 1; // assign prescaler to WDT

PS0 = 1; // select 1:128 scaler

PS1 = 1; // select 1:128 scaler

PS2 = 1; // select 1:128 scaler

WDT output result:

WDT timer-out = nominal value * prescaler

WDT time-out = 18ms * 128

WDT time-out = 2304 ms

WDT time-out ~= 2.3 sec

Thus, the PIC will reset every 2.3 sec.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: