timsk timers temporizador register ocr1a atmega328p atmega328 atmega168 328p timer arduino interrupt atmega

timers - timer 1 atmega328p



¿Por qué Arduino utiliza interrupción cada 1.024ms en la función millis? (1)

Estoy implementando un contador de tiempo en mi atmega 328p. Miré la implementación de la función arduino millis y estoy un poco confundido, por qué usan Timer Overflow Interrupt que se ejecuta cada 1.024 ms (freg = 16MHz, 64 precalibrado), cuando podían usar Output Compare Match Interrupt que se puede configurar para disparar exactamente cada 1 ms (OCR0A = 249). ¿Hay alguna ventaja en utilizar Intervalo de desbordamiento del temporizador y hacer algunas correcciones al ms contado en Intervalo de comparación de salida intercalada que se ejecuta exactamente cada 1 ms? ¿O por qué lo están usando?


El valor de contador TCNT se usa para el cálculo de microsegundos más allá de la interrupción. El uso de la coincidencia de comparación para definir el valor TOP generaría una interrupción exacta pero complicaría el cálculo de micros más fino a medida que se restablece TCNT. El uso de la coincidencia de comparación para el valor que no sea TOP (para la generación de PWM) no genera interrupciones periódicas de 1 ms.

Personalmente estoy usando como segundo temporizador para muestrear el valor TOP definido por el registro OCRxA.