Attivare Interrupt sul pin 0

Sto cercando di attivare l' ISR(PCINT2_vect) che corrisponde al cambio di stato sul pin 0
per farlo faccio

PCMSK2 |= 1;
PCICR  |= 1 << 2;

ma non si attiva, cosa manca?

Guarda, io in una mia applicazione che usa pinChangeInt faccio:

Enable dell'interrupt:

PCICR |=  (1 << PCIE2);    // Enable  pin change int 2
PCIFR |=  (1 << PCIF2);    // Interrupt flag is set for 2
PCMSK2 |= (1<<PCINT16);    // set Pin change interrupt masks for pin PD0

... che disablito al ricevimento di un interrupt (... poi lo riabilito finito il trattamento) con :

PCICR &= ~(1 << PCIE2);    // Disable pin change int 2

Spero possa esserti utile ... ::slight_smile:

Guglielmo

io ho fatto questo test

ISR(PCINT0_vect)
{
    Serial.println("I0");
}

ISR(PCINT1_vect)
{
    Serial.println("I1");
}

ISR(PCINT2_vect)
{
    Serial.println("I2");
}


void setup() {
    Serial.begin(9600);

    uint8_t i;
    for(i = 0; i < 20; ++i)
      pinMode(i, INPUT); 

    cli();
    PCICR = 0x3;
    PCIFR = 0x3;
    PCMSK2 = 0xFF;
    PCMSK1 = 0x7F;
    PCMSK0 = 0xFF;
    sei();
}

void loop() {
  // put your main code here, to run repeatedly:

}

ma il 2 non funzia.... lo 0 e l'1 si.....

che pirla!

PCICR = 0x7;
PCIFR = 0x7;