Interruptions PCINT


bonjour à tous.
j'ai lu le tuto sur les interruptions et pour me familiarisé, j'ai fait le programme suivant

code: [select]
// arduino uno

volatile int commande_led = 0;

void setup()
{
  // port de sortie
  ddrb |=(1<<ddb5); // pb5 high en sortie : broche 13
  portb &= ~(1<<portb5); // pb5 low : broche 13

  nointerrupts(); // interruption non autorisées
  //interruption broche 8
  ddrb &=~(1<<ddb0); // pin en entrée = 0
  portb |=(1<<portb0); // pin high : pullup activée
  pcicr |=(1<<pcie0); // sélection du port 0 = b, c = 1, d = 2
  pcmsk0 |=(1<<pcint0); //
  interrupts(); // interruption autorisées
}
//**************************************************************
isr (pcint0_vect) // interruption sur changement d'état
{
  commande_led = 1;
}
//******************************************************************
void loop()
{
  if(commande_led == 1)
  {
    portb |= (1<<portb5); // pin 13 high
    delay(500);
    commande_led = 0;
    portb &= ~(1<<portb5); // pin 13 low
  }
}


l'interruption sur la broche 8 fonctionne correctement, j'ai voulu utiliser la broche 9 suivant le programme suivant mais sans succès

code: [select]
// arduino uno

volatile int commande_led = 0;

void setup()
{
  // port de sortie
  ddrb |=(1<<ddb5); // pb5 high en sortie : broche 13
  portb &= ~(1<<portb5); // pb5 low : broche 13

  nointerrupts(); // interruption non autorisées
  //interruption broche 9
  ddrb &=~(1<<ddb1); // pin en entrée = 0
  portb |=(1<<portb1); // pin high : pullup activée
  pcicr |=(1<<pcie0); // sélection du port 0 = b, c = 1, d = 2
  pcmsk0 |=(1<<pcint1); //
  interrupts(); // interruption autorisées
}
//**************************************************************
isr (pcint1_vect) // interruption sur changement d'état
{
  commande_led = 1;
}
//******************************************************************
void loop()
{
  if(commande_led == 1)
  {
    portb |= (1<<portb5); // pin 13 high
    delay(500);
    commande_led = 0;
    portb &= ~(1<<portb5); // pin 13 low
  }
}


l'un d'entre vous peux-t-il me dire ou est mon erreur.
cordialement.
marc.

hello
dans ton 2ème prg, il faut aussi

isr (pcint0_vect) // interruption sur changement d'état
{
  commande_led = 1;
}

la doc atmel porte à confusion

il n'y pas un vecteur d'interruption par bit mais par port.
le port b, c'est le vecteur 0


Arduino Forum > International > Français (Moderators: jfs, Snootlab) > Interruptions PCINT


arduino

Comments

Popular posts from this blog

Error compiling for board Arduino/Genuino Uno.

Installation database is corrupt

esp8266 (nodemcu 0.9) client.write très lent ???