Skip to main content

1. Introduction to AVR Timers

1.1. Overview

The ATmega328P is a widely popular 8-bit microcontroller, serving as the "brain" for many embedded systems, most notably the Arduino Uno. Among its most critical peripherals are the Timers. These components allow the microcontroller to perform time-sensitive tasks without stalling the CPU, such as measuring time intervals, generating PWM (Pulse Width Modulation) signals, or triggering specific events at precise moments.

The ATmega328P is equipped with three internal timers:

  • Timer0: 8-bit timer (counts from 0 to 255).
  • Timer1: 16-bit timer (counts from 0 to 65,535).
  • Timer2: 8-bit timer (counts from 0 to 255).

Note: This module only covers Timer0 and Timer1. If you want to know more about Timer2, you can read the ATMega328p Documentation.

1.2. Technical Specifications Overview

image

While all three timers share similar logic, they differ in resolution and specific features.

Timer Resolution Common Use Case Pins
Timer0 8-bit Basic time-slicing for multitasking, polling loops, and simple hardware PWM. PD6 (OC0A), PD5 (OC0B)
Timer1 16-bit High-resolution input capture (measuring pulse width), precise frequency generation, and 16-bit event counting. PB1 (OC1A), PB2 (OC1B)
Timer2 8-bit Asynchronous clocking (using a 32kHz crystal on TOSC1/2), real-time counters, and PWM. PB3 (OC2A), PD3 (OC2B)