DEV Community

Hedy
Hedy

Posted on

Which register stores the number of clock pulses in atmega328p?

The ATmega328P uses timer/counter registers to store the number of clock pulses, depending on the specific timer being used. These registers are associated with its built-in hardware Timer/Counter units.

Image description

Timer/Counter Registers in ATmega328P

The ATmega328P has three timers:

  1. Timer/Counter0 (8-bit)
  2. Timer/Counter1 (16-bit)
  3. Timer/Counter2 (8-bit)

Each of these has its own register to count the clock pulses:

1.Timer/Counter0 (8-bit):

  • Register: TCNT0
  • Size: 8 bits (counts from 0 to 255)
  • This register holds the current count value for Timer/Counter0.

2.Timer/Counter1 (16-bit):

  • Register: TCNT1H (high byte) and TCNT1L (low byte)
  • Size: 16 bits (counts from 0 to 65,535)
  • Combined 16-bit value: TCNT1 = (TCNT1H << 8) | TCNT1L

3.Timer/Counter2 (8-bit):

  • Register: TCNT2
  • Size: 8 bits (counts from 0 to 255)

How It Works:

These registers increment with every clock tick, depending on the timer's prescaler and mode configuration.
For example:

  • If no prescaler is used, the counter increments at the CPU clock speed (e.g., 16 MHz for Arduino Uno).
  • If a prescaler is set (e.g., 64), the timer increments every 64×clock period.

Example Use:
To read the current count of Timer/Counter0:

c

uint8_t timer0_count = TCNT0;
Enter fullscreen mode Exit fullscreen mode

To reset the counter:

c

TCNT0 = 0;  // Clear Timer/Counter0
Enter fullscreen mode Exit fullscreen mode

Summary

  • The TCNT0, TCNT1H/TCNT1L, and TCNT2 registers store the number of clock pulses for Timer/Counter0, Timer/Counter1, and Timer/Counter2, respectively.
  • The choice of register depends on the timer you are using and its configuration.

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more