🛠 Sortir des sentiers : registres AVR et interruption externe

Arduino Micro · avance · Schéma : IMG-micro-avance-1-micro-registres-avr-interruption.svg — Bouton sur la broche 3 d'une Arduino Micro déclenchant une interruption externe, registre EICRA configuré sur front descendant, LED de la broche 13 allumée depuis la routine d'interruption

Objectifs

Programmer le ATmega32U4 au niveau des registres : configurer une interruption externe sur front descendant (registres EICRA et EIMSK), écrire une routine de service (ISR) courte, et comprendre le motif du drapeau volatile plutôt que du travail long en ISR. Sur le Micro, les interruptions externes sont disponibles sur les broches 0, 1, 2, 3 et 7.

Matériel

Code complet

// Interruption externe sur front descendant, a la main (sans attachInterrupt).
// Broche 3 du Micro = INT0. On configure les registres puis on écrit l'ISR.
volatile bool événement = false;   // drapeau partage ISR -> boucle

void setup {
  DDRB  &= ~(1 << DDB0);          // sens entrée de la broche 13 cote port B
  EIMSK &= ~(1 << INT0);          // INT0 desactive pendant la config
  EICRA = (1 << ISC01) | (0 << ISC00);  // INT0 sur front descendant
  EIMSK |= (1 << INT0);           // autoriser INT0
  // Broche 3 : entrée + pull-up (le noyau Arduino gere le pull via PORT)
  pinMode(3, INPUT_PULLUP);
  pinMode(LED_BUILTIN, OUTPUT);
  sei;                          // autorisation globale des interruptions
  Serial.begin(9600);
}

ISR(INT0_vect) {                  // executee sur chaque front descendant
  événement = true;               // travail minimal : lever un drapeau
}

void loop {
  if (événement) {
    événement = false;
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
    Serial.println("INT0 : front descendant detecte");
  }
}

Vérification attendue

Chaque appui (front descendant) bascule la LED 13 et imprime une ligne ; le moniteur reste réactif car seule une bascule de drapeau se produit dans l'ISR. En approchant le doigt du bouton câblé long, on peut voir des déclenchements parasites : c'est réel, d'où le pull-up et l'anti-rebond côté boucle si nécessaire.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels