Estaba luchando con interrupciones de temporizador en mi proyecto. No pude hacerlo funcionar correctamente. Así que decidí escribir un código simple y vi un caso muy interesante.
ISR(TIMER1_COMPB_vect)
{
PORTB ^= (1 << PORTB5);
}
int main(void)
{
cli(); // disable global interrupts
TCCR1A = 0; // set entire TCCR1A register to 0
TCCR1B = 0; // same for TCCR1B
OCR1A = 10000;
OCR1B = 100;
TCCR1B |= (1 << WGM12);
TCCR1B |= (1 << CS10);
TCCR1B |= (1 << CS12);
TIMSK1 |= (1 << OCIE1A);
TIMSK1 |= (1 << OCIE1B);
DDRB= 0xFF;
#define F_CPU 16000000
sei();
while (1)
{
}
}
Aquí está mi código. Cuando cambio el valor de OCR1B, no sucede nada, pero si cambio el valor de OCR1A, el parpadeo se vuelve más rápido. ¿Hay una explicación lógica para esto?