Desbordamiento del contador / temporizador y registro TIFR

1

Recientemente planifiqué usar el temporizador / contador AVR para mis proyectos. He estudiado una serie de documentos sobre cómo configurarlo. Utilizo ATTiny2313A para probarlo y aprender sobre sus características. Encontré un problema al intentar cambiar un pin por cada pocos segundos.

Según la hoja de datos, el TIFR tiene la siguiente disposición de bits:

Como ves, el primer bit se asigna a TOV0 . Cuando se produce un desbordamiento de contador, este bit se establece en 1. Usé este hecho y desarrollé un código como el siguiente:

#include <avr/io.h>

int main(void)
{
uint16_t count=0, M=500;
uint8_t n=0x02;
DDRB=0xff;
TCNT0=0x00;
TCCR0B=(1<<CS00) | (1<<CS02); //use prescaler 1024


   while (1)
   {
       while ((TIFR & n) == 0); // control passes this loop after TIFR sets to n,
                                   // which is when counter overflows

       TCNT0 = 0x00;
       TIFR=n; // clear TIFR
       count++;

       if (count>=M)
       {
           PORTB ^= (1 << PB0);
           count=0;
       }

return (0);
   }

El código funciona como se esperaba. Espero que cuando se produzca un desbordamiento, TIFR cambie a 0x02 cuando TOV0 se establezca en uno. Pero ese no parece ser el único escenario. Si cambio la variable n a algo como n=0x04 y compilo el programa, veo el mismo comportamiento, lo que significa que el LED conectado a PB0 aún alterna con la misma frecuencia que lo hacía anteriormente. El segundo bit en TIFR corresponde a OCF0B . Entonces, si el código quiere trabajar como antes, este bit debe cambiar a 1 cuando se produce un desbordamiento. Pero lo hace? No creo que el indicador de comparación de salida esté habilitado, por lo que OCF0B no puede cambiar.

    
pregunta dirac16

1 respuesta

2

El OCF0B es un indicador de comparación de coincidencia, que se establecerá independientemente de si la interrupción está habilitada o no. Se configurará exactamente una vez por ciclo de desbordamiento, al igual que un reloj roto mostrará la hora correcta dos veces al día. Esta es la razón por la que está obteniendo exactamente el mismo período de tiempo con esta bandera o con la bandera de desbordamiento.

    
respondido por el Eugene Sh.

Lea otras preguntas en las etiquetas