Attiny84 sleepet interruption

Bonjour à tous,

J’aurais besoin de vos connaissances.
J’ai actuellement un programme qui tourne sur Attiny84 qui récupere la temperature d’un ds18b20, récuperer l’etat de la batterie ainsi qu’un ILS.

La lecture du DS18B20 ainsi que de la batterie fonctionne sans probleme.
Mon soucis est du côté de l’ILs l’information de ce dernier est envoyer via la detection d’un changement d’état ( attachPinChangeInterrupt ).
Mon programme se met en “sleep” une fois les données du ds18b20 et de la batterie transmise.
Le changement d’etat de l’ILs devrait le faire sortir du mode “sleep” mais cela ne se produit pas.
Je vous joins mon code si quelqu’un a une idée.

#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h> 


#define adc_enable(){ bitClear(PRR, PRADC); ADCSRA |= bit(ADEN); }// Turns on ADC in order to read analog values
#define adc_disable(){ ADCSRA &= ~ bit(ADEN); bitSet(PRR, PRADC); }// disable Analog convertor
#define ac_disable()  (ACSR  |= _BV(ACD)) // disable Analog comparator



void watchdogSetup() {

  //WDP3 - WDP2 - WPD1 - WDP0 - time
  // 0      0      0      0      16 ms
  // 0      0      0      1      32 ms
  // 0      0      1      0      64 ms
  // 0      0      1      1      0.125 s
  // 0      1      0      0      0.25 s
  // 0      1      0      1      0.5 s
  // 0      1      1      0      1.0 s
  // 0      1      1      1      2.0 s
  // 1      0      0      0      4.0 s
  // 1      0      0      1      8.0 s


  // Reset the watchdog reset flag
  bitClear(MCUSR, WDRF);
  // Start timed sequence
  bitSet(WDTCSR, WDCE); //Watchdog Change Enable to clear WD
  bitSet(WDTCSR, WDE); //Enable WD

  // Set new watchdog timeout value to 1 second
  bitSet(WDTCSR, WDP2);
  bitSet(WDTCSR, WDP1); 
  // Enable interrupts instead of reset
  bitSet(WDTCSR, WDIE);

}

ISR(WDT_vect) {
  // Don't do anything here but we must include this
  // block of code otherwise the interrupt calls an
  // uninitialized interrupt handler.
}

void goSleep() {
  watchdogSetup(); //enable watchDog
  power_timer0_disable(); //disable Timer 0
  power_timer1_disable(); //disable Timer 1
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_mode();
  //disable watchdog after sleep
  wdt_disable();
  power_timer0_enable(); //enable Timer 0
  power_timer1_enable(); //enable Timer 1
}


void waitSleep(int millisec) {
  while (millisec) {
    goSleep();
    millisec--;
  }
}

boolean ILSdetectchange = false;

void InterruptILS()
{
    ILSdetectchange = true;
}

void SendILS()
{
    if (ILSdetectchange)
    {
        SendDataRF24(5, 1 * 100, 1, other_node); // fonction d'envoie du changement d'etat même fonction utilisé pour readvcc et gettemp
        ILSdetectchange = false;
    }
}

void setup() {
  attachPinChangeInterrupt(digitalPinToPCINT(2),InterruptILS,FALLING); 
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Power down everything, will only wake up from WDT
  sleep_enable();                      // Enable sleep
}



void loop() {  
  readVcc();  // function de recuperation de la batterie
  getTemp(0); // Recupere la temperature
  SendILS(); // Si changement d'etat de l'ILS 
  waitSleep(257); // 103 = 2 minutes //  267 = 5 minutes
}

Bonjour

juste une remarque.
si l’on en reste à ce ce qu’on peut lire içi en commentaire seul le chien de garde réveille le microcontrolleur

set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Power down everything, will only wake up from WDT

Je ne connais pas les particularités du sommeil pour cette puce.
Jeut être existe-t-il un mode de sommeil moins profond que SLEEP_MODE_PWR_DOWN qui permettrait le réveil par interriuption externe ?