atmel 328 si incanta con il watchdog

Ho provato con Arduino lo sleep associato al watchdog.
Mi potrebbe essere molto utile per allungare la durata della batteria di una stazioncina meteo.
Con Arduino non fa una piega ma con il 328 da solo si incanta e non riesco a riprenderlo se non caricandogli di nuovo il bootloader.

Ho provato il watchdog di questo articolo:
http://www.gammon.com.au/interrupts
ma dice che power_all_disable() non è dichiarata a quello scopo

Avevete qualche suggerimento?
Grazie sin da ora!

Inserisco il codice che funziona su Arduino ma non sul chip 328 da solo. Si sveglia dopo 8s o collegando il pin2 con grd. Modificando il delay “dopo digitalWrite(LED_BUILTIN, LOW);” si capisce come funziona.

#include <avr/wdt.h>
#include <avr/sleep.h>
int wakePin = 2;                 // pin used for waking up
int sleepStatus = 0;             // variable to store a request for sleep
int count = 0;                   // counter
void wakeUpNow()   {delay(500); }
void sleepNow()   {      // here we put the arduino to sleep
   set_sleep_mode(SLEEP_MODE_PWR_DOWN);   // sleep mode is set here
   sleep_enable();          // enables the sleep bit in the mcucr register
   // svegliare arduino con un LOW sul pin2
   attachInterrupt(0,wakeUpNow, LOW); // use interrupt 0 (pin 2) and run function wakeUpNow when pin 2 gets LOW 
   sleep_mode();            // here the device is actually put to sleep!! THE PROGRAM CONTINUES FROM HERE AFTER WAKING UP
   sleep_disable();         // first thing after waking from sleep: disable sleep...
   detachInterrupt(0);      // disables interrupt 0 on pin 2 so the wakeUpNow code will not be executed during normal running time. 
                  } //fine void sleepnow

///se si usa solo il chip 328 sbrocca e bisogna rimettere il bootloader
void setup()          {
//attivo il watchdog e lo imposto
//per una soglia di tempo di 8 Secondi
wdt_enable(WDTO_8S);
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(9600);    }

void loop()       {
Serial.println("sveglio");
digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(12000); //non ARRIVA A 12 secondi perchè il watchdog resetta dopo 8 sec
delay(100);sleepNow(); delay(100);
  wdt_reset();//resetto il watchdog e quindi non si resetta la cpu
  Serial.println("ancora sveglio");//se il watchdog resetta prima la cpu questo non verrà mai eseguito
                  }
[\code]

Ho installato optiboot nell'ide 1.6.13 seguendo le istruzioni:

quando clicco su scrivi bootloader:
***failed;
avrdude: WARNING: invalid value for unused bits in fuse "efuse", should be set to 1 according to datasheet
This behaviour is deprecated and will result in an error in future version
You probably want to use 0xfd instead of 0x05 (double check with your datasheet first).

Però il boot loader viene caricato lo stesso. Del resto lo stesso comportamento si presenta con il bootloader descritto qui:

Una vola caricato il boot loader optiboot, quando cerco di caricare unaìo sketch risponde:

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_initialize(): failed
avrdude: initialization failed, rc=-1
Double check connections and try again, or use -F to override

Facile che è una libreria poco recente e il compilatore non capisce la configurazione dei fuses.