🛠 Programmer aux registres : interruption Timer/Counter1

Arduino Leonardo — Ficha de placa · avance · Schéma : IMG-leonardo-avance-7-leonardo-registres-avr-interruption-timer.svg — Broche PB7 (D13) de l'ATmega32u4 basculée par l'ISR du Timer1 en mode CTC, registre TCCR1B/OCR1A et signal créneau à 1 Hz

Objetivos

Salir de la API de Arduino para controlar el ATmega32u4 « a pelo »: configurar el Timer/Counter1 en modo CTC (Clear Timer on Compare Match) con un divisor de 1024, activar una interrupción de hardware a 1 Hz y alternar el LED del pin 13 (PB7) directamente en el registro PINB. Comprenderás la ruta completa: reloj de 16 MHz, prescaler, OCR1A, vector de interrupción y por qué una ISR debe ser mínima.

Material

Código completo

// Clignotement 0,5 Hz par interruption Timer/Counter1 en mode CTC
// 16 MHz / 1024 (prescaler) / 15625 = 1 Hz d'increment compare

volatile uint8_t clignotements = 0;

void setup {
  DDRB |= (1 << DDB7);          // PB7 (Arduino D13) en sortie
  noInterrupts;
  TCCR1A = 0;
  TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS10); // mode CTC, prescaler 1024
  TCNT1  = 0;
  OCR1A  = 15624;               // 16e6 / 1024 / (15624+1) = 1 Hz
  TIMSK1 |= (1 << OCIE1A);      // autorise l'interruption Compare Match A
  interrupts;
}

ISR(TIMER1_COMPA_vect) {
  PINB = (1 << PINB7);          // ecriture de 1 dans PINB = bascule la broche
  clignotements++;
}

void loop {
  // Le travail se fait dans l'ISR ; la boucle principale reste libre.
  // Exemple : Serial toutes les 2 bascules (0,5 Hz) si besoin.
}

Verificación esperada

El LED parpadea a 0,5 Hz (un cambio de estado por segundo, por lo tanto, un apagado/encendido cada 2 s). Verifica la precisión comparando 60 parpadeos con un reloj: el error proviene únicamente de la tolerancia del cristal de 16 MHz. Suspende el loop con delay: el parpadeo continúa, lo que demuestra que es el temporizador y una interrupción los que controlan el pin.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales