Atmega328P Watch Dog Timer - Delay Issue
If I read the datasheet (p.54-55) correctly, you have to set the WDCE bit in WDTCSR to be able to change the prescaler. The default setting for the prescaler bits is 000 or about a 16 ms delay.

Also, if you set  both WDE and WDIE, the watchdog works in "Interrupt and System Reset Mode", where the first WD timeout triggers the interrupt, and a second one resets the device, unless the WDIE bit is set again after the interrupt. Or if you only want the interrupt, not the reset, just leave WDE unset.

So paraphrasing the example code, I think you'll want something like this:

cli();
WDTCSR |= (1&lt;&lt;WDCE);  /* enable change */
WDTCSR = (1&lt;&lt;WDIE) | (1&lt;&lt;WDP2) | (1&lt;&lt;WDP0);  /* enable interrupt and set prescaler */
sei();