non-inverted PWM and an inverted PWM output can be generated by setting the
COMnx1:0 to three (See Table 81 on page 159). The actual OCnx value will only be vis-
ible on the port pin if the data direction for the port pin is set as output (DDR_OCnx). The
PWM waveform is generated by setting (or clearing) the OCnx Register at the compare
match between OCRnx and TCNTn when the counter increments, and clearing (or set-
ting) the OCnx Register at compare match between OCRnx and TCNTn when the
counter decrements. The PWM frequency for the output when using phase and fre-
quency correct PWM can be calculated by the following equation:
f
clk_I/O
f
= ---------------------------
OCnxPFCPWM
2 ⋅ N ⋅ TOP
The N variable represents the prescaler divider (1, 8, 64, 256, or 1024).
The extreme values for the OCRnx Register represents special cases when generating
a PWM waveform output in the phase correct PWM mode. If the OCRnx is set equal to
BOTTOM the output will be continuously low and if set equal to TOP the output will be
set to high for non-inverted PWM mode. For inverted PWM the output will have the
opposite logic values. If OCR1A is used to define the TOP value (WGM13:0 = 9) and
COM1A1:0 = 1, the OC1A output will toggle with a 50ꢀ duty cycle.
Timer/Counter Timing
Diagrams
The Timer/Counter is a synchronous design and the timer clock (clkTn) is therefore
shown as a clock enable signal in the following figures. The figures include information
on when Interrupt Flags are set, and when the OCRnx Register is updated with the
OCRnx buffer value (only for modes utilizing double buffering). Figure 58 shows a timing
diagram for the setting of OCFnx.
Figure 58. Timer/Counter Timing Diagram, Setting of OCFnx, no Prescaling
clkI/O
clkTn
(clkI/O/1)
TCNTn
OCRnx
OCFnx
OCRnx - 1
OCRnx
OCRnx + 1
OCRnx + 2
OCRnx Value
Figure 59 shows the same timing data, but with the prescaler enabled.
154
ATmega640/1280/1281/2560/2561
2549A–AVR–03/05