Quiero generar una forma de onda con f = 196 Hz usando solo el modo normal. Aquí está el código que utilizo. Cuando el temporizador se desborda, TOV1 se configura y PIND0 se activa. TOV1 se borra después de eso y espero que ocurra otro desbordamiento para que PIND0 vuelva a alternar.
Probé mi código, con PIND0 conectado al LED. Al encenderse, el LED se encendió y apagó poco después, pero no se encendió nuevamente. Debido a que se apagó, significa que el desbordamiento ocurrió, por lo que se activó el PIND, pero no sé por qué no se volvió a encender. Incluso intenté no borrar TOV1 pero obtengo el mismo resultado que TOV1.
#include <avr/io.h>
#define F_CPU 25690112UL
int main(void)
{
TIFR1 |= (1<<TOV1); // clear timer 1 overflown flag
DDRD = 0xFF; // set port D as output
TCCR1B = 0b00000001; // using internal I/O clock with prescaler 1
while(1){
while(TIFR1 & (1<<TOV1)){
PIND ^= (1<<PD0); // toggle bit 0 on port D
TIFR1 |= (1<<TOV1); // clear TOV1 by adding 1 to TOV1
}
}
}
¿Alguien puede ver un error en mi código?