0% found this document useful (0 votes)
20 views15 pages

Atmega32A DataSheet Complete DS40002072A 7

Uploaded by

Mohammad amin
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
20 views15 pages

Atmega32A DataSheet Complete DS40002072A 7

Uploaded by

Mohammad amin
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 15

ATmega32A

Each half period of the external clock applied must be longer than one system clock cycle to ensure correct sam-
pling. The external clock must be ensured to have less than half the system clock frequency (fExtClk < fclk_I/O/2) given
a 50/50% duty cycle. Since the edge detector uses sampling, the maximum frequency of an external clock it can
detect is half the sampling frequency (Nyquist sampling theorem). However, due to variation of the system clock
frequency and duty cycle caused by Oscillator source (crystal, resonator, and capacitors) tolerances, it is recom-
mended that maximum frequency of an external clock source is less than fclk_I/O/2.5.
An external clock source can not be prescaled.

Figure 16-2. Prescaler for Timer/Counter0 and Timer/Counter1(1)


clk I/O
Clear

PSR10

T0
Synchronization

T1
Synchronization

clkT1 clkT0

Note: 1. The synchronization logic on the input pins (T1/T0) is shown in Figure 16-1.

 2018 Microchip Technology Inc. Data Sheet Complete DS40002072A-page 91


ATmega32A

16.5 Register Description

16.5.1 SFIOR – Special Function IO Register

Bit 7 6 5 4 3 2 1 0
ADTS2 ADTS1 ADTS0 – ACME PUD PSR2 PSR10 SFIOR
Read/Write R/W R/W R/W R R/W R/W R/W R/W
Initial Value 0 0 0 0 0 0 0 0

• Bit 0 – PSR10: Prescaler Reset Timer/Counter1 and Timer/Counter0


When this bit is written to one, the Timer/Counter1 and Timer/Counter0 prescaler will be reset. The bit will be
cleared by hardware after the operation is performed. Writing a zero to this bit will have no effect. Note that
Timer/Counter1 and Timer/Counter0 share the same prescaler and a reset of this prescaler will affect both timers.
This bit will always be read as zero.

 2018 Microchip Technology Inc. Data Sheet Complete DS40002072A-page 92


ATmega32A

17. 16-bit Timer/Counter1

17.1 Features
• True 16-bit Design (that is, allows 16-bit PWM)
• Two Independent Output Compare Units
• Double Buffered Output Compare Registers
• One Input Capture Unit
• Input Capture Noise Canceler
• Clear Timer on Compare Match (Auto Reload)
• Glitch-free, Phase Correct Pulse Width Modulator (PWM)
• Variable PWM Period
• Frequency Generator
• External Event Counter
• Four Independent Interrupt Sources (TOV1, OCF1A, OCF1B, and ICF1)

17.2 Overview
The 16-bit Timer/Counter unit allows accurate program execution timing (event management), wave generation,
and signal timing measurement. Most register and bit references in this section are written in general form. A lower
case "n" replaces the Timer/Counter number, and a lower case "x" replaces the output compare unit. However,
when using the register or bit defines in a program, the precise form must be used, that is, TCNT1 for accessing
Timer/Counter1 counter value and so on.
A simplified block diagram of the 16-bit Timer/Counter is shown in Figure 17-1. For the actual placement of I/O
pins, refer to Figure 1-1 on page 10. CPU accessible I/O Registers, including I/O bits and I/O pins, are shown in
bold. The device-specific I/O Register and bit locations are listed in the “Register Description” on page 112.

 2018 Microchip Technology Inc. Data Sheet Complete DS40002072A-page 93


ATmega32A

Figure 17-1. 16-bit Timer/Counter Block Diagram(1)


Count TOVn
Clear (Int.Req.)
Control Logic
Direction clkTn Clock Select

Edge
Tn
Detector

TOP BOTTOM

( From Prescaler )
Timer/Counter
TCNTn
= =0
OCnA
(Int.Req.)

Waveform
= Generation
OCnA

OCRnA

Fixed OCnB
TOP (Int.Req.)
DATABUS

Values
Waveform
= Generation
OCnB

OCRnB ( From Analog


Comparator Ouput )
ICFn (Int.Req.)

Edge Noise
ICRn
Detector Canceler
ICPn

TCCRnA TCCRnB

Note: 1. Refer to Figure 1-1 on page 10, Table 13-6 on page 64, and Table 13-12 on page 68 for Timer/Counter1 pin place-
ment and description.

17.2.1 Registers
The Timer/Counter (TCNT1), Output Compare Registers (OCR1A/B), and Input Capture Register (ICR1) are all
16-bit registers. Special procedures must be followed when accessing the 16-bit registers. These procedures are
described in the section “Accessing 16-bit Registers” on page 95. The Timer/Counter Control Registers
(TCCR1A/B) are 8-bit registers and have no CPU access restrictions. Interrupt requests (abbreviated to Int.Req. in
the figure) signals are all visible in the Timer Interrupt Flag Register (TIFR). All interrupts are individually masked
with the Timer Interrupt Mask Register (TIMSK). TIFR and TIMSK are not shown in the figure since these registers
are shared by other timer units.
The Timer/Counter can be clocked internally, via the prescaler, or by an external clock source on the T1 pin. The
Clock Select logic block controls which clock source and edge the Timer/Counter uses to increment (or decrement)
its value. The Timer/Counter is inactive when no clock source is selected. The output from the clock select logic is
referred to as the timer clock (clkT1).
The double buffered Output Compare Registers (OCR1A/B) are compared with the Timer/Counter value at all time.
The result of the compare can be used by the Waveform Generator to generate a PWM or variable frequency out-
put on the Output Compare pin (OC1A/B). Refer to “Output Compare Units” on page 101. The compare match
event will also set the Compare Match Flag (OCF1A/B) which can be used to generate an output compare interrupt
request.

 2018 Microchip Technology Inc. Data Sheet Complete DS40002072A-page 94


ATmega32A

The Input Capture Register can capture the Timer/Counter value at a given external (edge triggered) event on
either the Input Capture Pin (ICP1) or on the Analog Comparator pins (See “Analog Comparator” on page 198.)
The Input Capture unit includes a digital filtering unit (Noise Canceler) for reducing the chance of capturing noise
spikes.
The TOP value, or maximum Timer/Counter value, can in some modes of operation be defined by either the
OCR1A Register, the ICR1 Register, or by a set of fixed values. When using OCR1A as TOP value in a PWM
mode, the OCR1A Register can not be used for generating a PWM output. However, the TOP value will in this
case be double buffered allowing the TOP value to be changed in run time. If a fixed TOP value is required, the
ICR1 Register can be used as an alternative, freeing the OCR1A to be used as PWM output.

17.2.2 Definitions
The following definitions are used extensively throughout the document:

Table 17-1. Definitions


BOTTOM The counter reaches the BOTTOM when it becomes 0x0000.

MAX The counter reaches its MAXimum when it becomes 0xFFFF (decimal 65535).

The counter reaches the TOP when it becomes equal to the highest value in the count
sequence. The TOP value can be assigned to be one of the fixed values: 0x00FF,
TOP
0x01FF, or 0x03FF, or to the value stored in the OCR1A or ICR1 Register. The assign-
ment is dependent of the mode of operation.

17.2.3 Compatibility
The 16-bit Timer/Counter has been updated and improved from previous versions of the 16-bit AVR Timer/Coun-
ter. This 16-bit Timer/Counter is fully compatible with the earlier version regarding:
• All 16-bit Timer/Counter related I/O Register address locations, including Timer Interrupt Registers.
• Bit locations inside all 16-bit Timer/Counter Registers, including Timer Interrupt Registers.
• Interrupt Vectors.
The following control bits have changed name, but have same functionality and register location:
• PWM10 is changed to WGM10.
• PWM11 is changed to WGM11.
• CTC1 is changed to WGM12.
The following bits are added to the 16-bit Timer/Counter Control Registers:
• FOC1A and FOC1B are added to TCCR1A.
• WGM13 is added to TCCR1B.
The 16-bit Timer/Counter has improvements that will affect the compatibility in some special cases.

17.3 Accessing 16-bit Registers


The TCNT1, OCR1A/B, and ICR1 are 16-bit registers that can be accessed by the AVR CPU via the 8-bit data bus.
The 16-bit register must be byte accessed using two read or write operations. Each 16-bit timer has a single 8-bit
register for temporary storing of the high byte of the 16-bit access. The same temporary register is shared between
all 16-bit registers within each 16-bit timer. Accessing the low byte triggers the 16-bit read or write operation. When
the low byte of a 16-bit register is written by the CPU, the high byte stored in the temporary register, and the low
byte written are both copied into the 16-bit register in the same clock cycle. When the low byte of a 16-bit register is
read by the CPU, the high byte of the 16-bit register is copied into the temporary register in the same clock cycle as
the low byte is read.

 2018 Microchip Technology Inc. Data Sheet Complete DS40002072A-page 95


ATmega32A

Not all 16-bit accesses uses the temporary register for the high byte. Reading the OCR1A/B 16-bit registers does
not involve using the temporary register.
To do a 16-bit write, the high byte must be written before the low byte. For a 16-bit read, the low byte must be read
before the high byte.
The following code examples show how to access the 16-bit Timer Registers assuming that no interrupts updates
the temporary register. The same principle can be used directly for accessing the OCR1A/B and ICR1 Registers.
Note that when using “C”, the compiler handles the 16-bit access.

Assembly Code Example(1)


:.
; Set TCNT1 to 0x01FF
ldi r17,0x01
ldi r16,0xFF
out TCNT1H,r17
out TCNT1L,r16
; Read TCNT1 into r17:r16
in r16,TCNT1L
in r17,TCNT1H
:.
C Code Example(1)
unsigned int i;
:.
/* Set TCNT1 to 0x01FF */
TCNT1 = 0x1FF;
/* Read TCNT1 into i */
i = TCNT1;
:.

Note: 1. See “About Code Examples” on page 14.


The assembly code example returns the TCNT1 value in the r17:r16 register pair.
It is important to notice that accessing 16-bit registers are atomic operations. If an interrupt occurs between the two
instructions accessing the 16-bit register, and the interrupt code updates the temporary register by accessing the
same or any other of the 16-bit Timer Registers, then the result of the access outside the interrupt will be corrupted.
Therefore, when both the main code and the interrupt code update the temporary register, the main code must dis-
able the interrupts during the 16-bit access.

 2018 Microchip Technology Inc. Data Sheet Complete DS40002072A-page 96


ATmega32A

The following code examples show how to do an atomic read of the TCNT1 Register contents. Reading any of the
OCR1A/B or ICR1 Registers can be done by using the same principle.

Assembly Code Example(1)


TIM16_ReadTCNT1:
; Save global interrupt flag
in r18,SREG
; Disable interrupts
cli
; Read TCNT1 into r17:r16
in r16,TCNT1L
in r17,TCNT1H
; Restore global interrupt flag
out SREG,r18
ret
C Code Example(1)
unsigned int TIM16_ReadTCNT1( void )
{
unsigned char sreg;
unsigned int i;
/* Save global interrupt flag */
sreg = SREG;
/* Disable interrupts */
_CLI();
/* Read TCNT1 into i */
i = TCNT1;
/* Restore global interrupt flag */
SREG = sreg;
return i;
}

Note: 1. See “About Code Examples” on page 14.


The assembly code example returns the TCNT1 value in the r17:r16 register pair.

 2018 Microchip Technology Inc. Data Sheet Complete DS40002072A-page 97


ATmega32A

The following code examples show how to do an atomic write of the TCNT1 Register contents. Writing any of the
OCR1A/B or ICR1 Registers can be done by using the same principle.
Assembly Code Example(1)
TIM16_WriteTCNT1:
; Save global interrupt flag
in r18,SREG
; Disable interrupts
cli
; Set TCNT1 to r17:r16
out TCNT1H,r17
out TCNT1L,r16
; Restore global interrupt flag
out SREG,r18
ret
C Code Example(1)
void TIM16_WriteTCNT1 ( unsigned int i )
{
unsigned char sreg;
unsigned int i;
/* Save global interrupt flag */
sreg = SREG;
/* Disable interrupts */
_CLI();
/* Set TCNT1 to i */
TCNT1 = i;
/* Restore global interrupt flag */
SREG = sreg;
}

Note: 1. See “About Code Examples” on page 14.


The assembly code example requires that the r17:r16 register pair contains the value to be written to TCNT1.

17.3.1 Reusing the Temporary High Byte Register


If writing to more than one 16-bit register where the high byte is the same for all registers written, then the high byte
only needs to be written once. However, note that the same rule of atomic operation described previously also
applies in this case.

17.4 Timer/Counter Clock Sources


The Timer/Counter can be clocked by an internal or an external clock source. The clock source is selected by the
Clock Select logic which is controlled by the Clock Select (CS12:0) bits located in the Timer/Counter Control Reg-
ister B (TCCR1B). For details on clock sources and prescaler, see “Timer/Counter0 and Timer/Counter1
Prescalers” on page 90.

17.5 Counter Unit


The main part of the 16-bit Timer/Counter is the programmable 16-bit bi-directional counter unit. Figure 17-2 shows
a block diagram of the counter and its surroundings.

 2018 Microchip Technology Inc. Data Sheet Complete DS40002072A-page 98


ATmega32A

Figure 17-2. Counter Unit Block Diagram


DATA BUS (8-bit)
TOVn
(Int.Req.)

TEMP (8-bit)
Clock Select
Count Edge
Tn
TCNTnH (8-bit) TCNTnL (8-bit) Clear clkTn Detector
Control Logic
Direction
TCNTn (16-bit Counter)
( From Prescaler )

TOP BOTTOM

Signal description (internal signals):


Count Increment or decrement TCNT1 by 1.
Direction Select between increment and decrement.
Clear Clear TCNT1 (set all bits to zero).
clkT1 Timer/Counter clock.
TOP Signalize that TCNT1 has reached maximum value.
BOTTOM Signalize that TCNT1 has reached minimum value (zero).
The 16-bit counter is mapped into two 8-bit I/O memory locations: Counter High (TCNT1H) containing the upper
eight bits of the counter, and Counter Low (TCNT1L) containing the lower 8 bits. The TCNT1H Register can only
be indirectly accessed by the CPU. When the CPU does an access to the TCNT1H I/O location, the CPU accesses
the high byte temporary register (TEMP). The temporary register is updated with the TCNT1H value when the
TCNT1L is read, and TCNT1H is updated with the temporary register value when TCNT1L is written. This allows
the CPU to read or write the entire 16-bit counter value within one clock cycle via the 8-bit data bus. It is important
to notice that there are special cases of writing to the TCNT1 Register when the counter is counting that will give
unpredictable results. The special cases are described in the sections where they are of importance.
Depending on the mode of operation used, the counter is cleared, incremented, or decremented at each timer
clock (clkT1). The clkT1 can be generated from an external or internal clock source, selected by the Clock Select bits
(CS12:0). When no clock source is selected (CS12:0 = 0) the timer is stopped. However, the TCNT1 value can be
accessed by the CPU, independent of whether clkT1 is present or not. A CPU write overrides (has priority over) all
counter clear or count operations.
The counting sequence is determined by the setting of the Waveform Generation Mode bits (WGM13:0) located in
the Timer/Counter Control Registers A and B (TCCR1A and TCCR1B). There are close connections between how
the counter behaves (counts) and how waveforms are generated on the Output Compare outputs OC1x. For more
details about advanced counting sequences and waveform generation, see “Modes of Operation” on page 104.
The Timer/Counter Overflow (TOV1) Flag is set according to the mode of operation selected by the WGM13:0 bits.
TOV1 can be used for generating a CPU interrupt.

17.6 Input Capture Unit


The Timer/Counter incorporates an Input Capture unit that can capture external events and give them a time-
stamp indicating time of occurrence. The external signal indicating an event, or multiple events, can be applied via
the ICP1 pin or alternatively, via the Analog Comparator unit. The time-stamps can then be used to calculate fre-
quency, duty-cycle, and other features of the signal applied. Alternatively the time-stamps can be used for creating
a log of the events.

 2018 Microchip Technology Inc. Data Sheet Complete DS40002072A-page 99


ATmega32A

The Input Capture unit is illustrated by the block diagram shown in Figure 17-3. The elements of the block diagram
that are not directly a part of the Input Capture unit are gray shaded. The small “n” in register and bit names indi-
cates the Timer/Counter number.

Figure 17-3. Input Capture Unit Block Diagram

DATA BUS (8-bit)

TEMP (8-bit)

ICRnH (8-bit) ICRnL (8-bit) TCNTnH (8-bit) TCNTnL (8-bit)

WRITE ICRn (16-bit Register) TCNTn (16-bit Counter)

ACO* ACIC* ICNC ICES

Analog
Comparator Noise Edge
ICFn (Int.Req.)
Canceler Detector
ICPn

When a change of the logic level (an event) occurs on the Input Capture pin (ICP1), alternatively on the Analog
Comparator output (ACO), and this change confirms to the setting of the edge detector, a capture will be triggered.
When a capture is triggered, the 16-bit value of the counter (TCNT1) is written to the Input Capture Register
(ICR1). The Input Capture Flag (ICF1) is set at the same system clock as the TCNT1 value is copied into ICR1
Register. If enabled (TICIE1 = 1), the Input Capture Flag generates an Input Capture interrupt. The ICF1 Flag is
automatically cleared when the interrupt is executed. Alternatively the ICF1 Flag can be cleared by software by
writing a logical one to its I/O bit location.
Reading the 16-bit value in the Input Capture Register (ICR1) is done by first reading the low byte (ICR1L) and
then the high byte (ICR1H). When the low byte is read the high byte is copied into the high byte temporary register
(TEMP). When the CPU reads the ICR1H I/O location it will access the TEMP Register.
The ICR1 Register can only be written when using a Waveform Generation mode that utilizes the ICR1 Register for
defining the counter’s TOP value. In these cases the Waveform Generation mode (WGM1[3:0]) bits must be set
before the TOP value can be written to the ICR1 Register. When writing the ICR1 Register the high byte must be
written to the ICR1H I/O location before the low byte is written to ICR1L.
For more information on how to access the 16-bit registers refer to “Accessing 16-bit Registers” on page 95.

17.6.1 Input Capture Pin Source


The main trigger source for the Input Capture unit is the Input Capture pin (ICP1). Timer/Counter1 can alternatively
use the Analog Comparator output as trigger source for the Input Capture unit. The Analog Comparator is selected
as trigger source by setting the Analog Comparator Input Capture (ACIC) bit in the Analog Comparator Control and
Status Register (ACSR). Be aware that changing trigger source can trigger a capture. The Input Capture Flag must
therefore be cleared after the change.

 2018 Microchip Technology Inc. Data Sheet Complete DS40002072A-page 100


ATmega32A

Both the Input Capture pin (ICP1) and the Analog Comparator output (ACO) inputs are sampled using the same
technique as for the T1 pin (Figure 16-1 on page 90). The edge detector is also identical. However, when the noise
canceler is enabled, additional logic is inserted before the edge detector, which increases the delay by four system
clock cycles. Note that the input of the noise canceler and edge detector is always enabled unless the Timer/Coun-
ter is set in a waveform generation mode that uses ICR1 to define TOP.
An Input Capture can be triggered by software by controlling the port of the ICP1 pin.

17.6.2 Noise Canceler


The noise canceler improves noise immunity by using a simple digital filtering scheme. The noise canceler input is
monitored over four samples, and all four must be equal for changing the output that in turn is used by the edge
detector.
The noise canceler is enabled by setting the Input Capture Noise Canceler (ICNC1) bit in Timer/Counter Control
Register B (TCCR1B). When enabled the noise canceler introduces additional four system clock cycles of delay
from a change applied to the input, to the update of the ICR1 Register. The noise canceler uses the system clock
and is therefore not affected by the prescaler.

17.6.3 Using the Input Capture Unit


The main challenge when using the Input Capture unit is to assign enough processor capacity for handling the
incoming events. The time between two events is critical. If the processor has not read the captured value in the
ICR1 Register before the next event occurs, the ICR1 will be overwritten with a new value. In this case the result of
the capture will be incorrect.
When using the Input Capture interrupt, the ICR1 Register should be read as early in the interrupt handler routine
as possible. Even though the Input Capture interrupt has relatively high priority, the maximum interrupt response
time is dependent on the maximum number of clock cycles it takes to handle any of the other interrupt requests.
Using the Input Capture unit in any mode of operation when the TOP value (resolution) is actively changed during
operation, is not recommended.
Measurement of an external signal’s duty cycle requires that the trigger edge is changed after each capture.
Changing the edge sensing must be done as early as possible after the ICR1 Register has been read. After a
change of the edge, the Input Capture Flag (ICF1) must be cleared by software (writing a logical one to the I/O bit
location). For measuring frequency only, the clearing of the ICF1 Flag is not required (if an interrupt handler is
used).

17.6.4 Output Compare Units


The 16-bit comparator continuously compares TCNT1 with the Output Compare Register (OCR1x). If TCNT equals
OCR1x the comparator signals a match. A match will set the Output Compare Flag (OCF1x) at the next timer clock
cycle. If enabled (OCIE1x = 1), the Output Compare Flag generates an output compare interrupt. The OCF1x Flag
is automatically cleared when the interrupt is executed. Alternatively the OCF1x Flag can be cleared by software
by writing a logical one to its I/O bit location. The Waveform Generator uses the match signal to generate an output
according to operating mode set by the Waveform Generation mode (WGM13:0) bits and Compare Output mode
(COM1x1:0) bits. The TOP and BOTTOM signals are used by the Waveform Generator for handling the special
cases of the extreme values in some modes of operation (refer to “Modes of Operation” on page 104.)
A special feature of output compare unit A allows it to define the Timer/Counter TOP value (that is, counter resolu-
tion). In addition to the counter resolution, the TOP value defines the period time for waveforms generated by the
Waveform Generator.
Figure 17-4 shows a block diagram of the output compare unit. The small “n” in the register and bit names indicates
the device number (n = 1 for Timer/Counter1), and the “x” indicates output compare unit (A/B). The elements of the
block diagram that are not directly a part of the output compare unit are gray shaded.

 2018 Microchip Technology Inc. Data Sheet Complete DS40002072A-page 101


ATmega32A

Figure 17-4. Output Compare Unit, Block Diagram


DATA BUS (8-bit)

TEMP (8-bit)

OCRnxH Buf. (8-bit) OCRnxL Buf. (8-bit) TCNTnH (8-bit) TCNTnL (8-bit)

OCRnx Buffer (16-bit Register) TCNTn (16-bit Counter)

OCRnxH (8-bit) OCRnxL (8-bit)

OCRnx (16-bit Register)

= (16-bit Comparator )
OCFnx (Int.Req.)

TOP
Waveform Generator OCnx
BOTTOM

WGMn3:0 COMnx1:0

The OCR1x Register is double buffered when using any of the twelve Pulse Width Modulation (PWM) modes. For
the normal and Clear Timer on Compare (CTC) modes of operation, the double buffering is disabled. The double
buffering synchronizes the update of the OCR1x Compare Register to either TOP or BOTTOM of the counting
sequence. The synchronization prevents the occurrence of odd-length, non-symmetrical PWM pulses, thereby
making the output glitch-free.
The OCR1x Register access may seem complex, but this is not case. When the double buffering is enabled, the
CPU has access to the OCR1x Buffer Register, and if double buffering is disabled the CPU will access the OCR1x
directly. The content of the OCR1x (Buffer or Compare) Register is only changed by a write operation (the
Timer/Counter does not update this register automatically as the TCNT1 and ICR1 Register). Therefore OCR1x is
not read via the high byte temporary register (TEMP). However, it is a good practice to read the low byte first as
when accessing other 16-bit registers. Writing the OCR1x Registers must be done via the TEMP Register since the
compare of all 16 bits is done continuously. The high byte (OCR1xH) has to be written first. When the high byte I/O
location is written by the CPU, the TEMP Register will be updated by the value written. Then when the low byte
(OCR1xL) is written to the lower eight bits, the high byte will be copied into the upper 8-bits of either the OCR1x
buffer or OCR1x Compare Register in the same system clock cycle.
For more information of how to access the 16-bit registers refer to “Accessing 16-bit Registers” on page 95.

17.6.5 Force Output Compare


In non-PWM Waveform Generation modes, the match output of the comparator can be forced by writing a one to
the Force Output Compare (FOC1x) bit. Forcing compare match will not set the OCF1x Flag or reload/clear the
timer, but the OC1x pin will be updated as if a real compare match had occurred (the COM1x1:0 bits settings
define whether the OC1x pin is set, cleared or toggled).

17.6.6 Compare Match Blocking by TCNT1 Write


All CPU writes to the TCNT1 Register will block any compare match that occurs in the next timer clock cycle, even
when the timer is stopped. This feature allows OCR1x to be initialized to the same value as TCNT1 without trigger-
ing an interrupt when the Timer/Counter clock is enabled.

 2018 Microchip Technology Inc. Data Sheet Complete DS40002072A-page 102


ATmega32A

17.6.7 Using the Output Compare Unit


Since writing TCNT1 in any mode of operation will block all compare matches for one timer clock cycle, there are
risks involved when changing TCNT1 when using any of the output compare units, independent of whether the
Timer/Counter is running or not. If the value written to TCNT1 equals the OCR1x value, the compare match will be
missed, resulting in incorrect waveform generation. Do not write the TCNT1 equal to TOP in PWM modes with vari-
able TOP values. The compare match for the TOP will be ignored and the counter will continue to 0xFFFF.
Similarly, do not write the TCNT1 value equal to BOTTOM when the counter is down counting.
The setup of the OC1x should be performed before setting the Data Direction Register for the port pin to output.
The easiest way of setting the OC1x value is to use the force output compare (FOC1x) strobe bits in Normal mode.
The OC1x Register keeps its value even when changing between waveform generation modes.
Be aware that the COM1x1:0 bits are not double buffered together with the compare value. Changing the
COM1x1:0 bits will take effect immediately.

17.7 Compare Match Output Unit


The Compare Output mode (COM1x1:0) bits have two functions. The Waveform Generator uses the COM1x1:0
bits for defining the Output Compare (OC1x) state at the next compare match. Secondly the COM1x1:0 bits control
the OC1x pin output source. Figure 17-5 shows a simplified schematic of the logic affected by the COM1x1:0 bit
setting. The I/O Registers, I/O bits, and I/O pins in the figure are shown in bold. Only the parts of the general I/O
Port Control Registers (DDR and PORT) that are affected by the COM1x1:0 bits are shown. When referring to the
OC1x state, the reference is for the internal OC1x Register, not the OC1x pin. If a System Reset occur, the OC1x
Register is reset to “0”.

Figure 17-5. Compare Match Output Unit, Schematic

COMnx1
COMnx0 Waveform
D Q
FOCnx Generator
1
OCnx
OCnx Pin
0

D Q
DATABUS

PORT

D Q

DDR
clk I/O

The general I/O port function is overridden by the Output Compare (OC1x) from the Waveform Generator if either
of the COM1x1:0 bits are set. However, the OC1x pin direction (input or output) is still controlled by the Data Direc-
tion Register (DDR) for the port pin. The Data Direction Register bit for the OC1x pin (DDR_OC1x) must be set as
output before the OC1x value is visible on the pin. The port override function is generally independent of the Wave-
form Generation mode, but there are some exceptions. Refer to Table 17-2, Table 17-3 and Table 17-4 for details.

 2018 Microchip Technology Inc. Data Sheet Complete DS40002072A-page 103


ATmega32A

The design of the output compare pin logic allows initialization of the OC1x state before the output is enabled. Note
that some COM1x1:0 bit settings are reserved for certain modes of operation. Refer to “Register Description” on
page 112.
The COM1x1:0 bits have no effect on the Input Capture unit.

17.7.1 Compare Output Mode and Waveform Generation


The Waveform Generator uses the COM1x1:0 bits differently in normal, CTC, and PWM modes. For all modes,
setting the COM1x1:0 = 0 tells the Waveform Generator that no action on the OC1x Register is to be performed on
the next compare match. For compare output actions in the non-PWM modes refer to Table 17-2 on page 113. For
fast PWM mode refer to Table 17-3 on page 113, and for phase correct and phase and frequency correct PWM
refer to Table 17-4 on page 114.
A change of the COM1x1:0 bits state will have effect at the first compare match after the bits are written. For non-
PWM modes, the action can be forced to have immediate effect by using the FOC1x strobe bits.

17.8 Modes of Operation


The mode of operation, that is, the behavior of the Timer/Counter and the output compare pins, is defined by the
combination of the Waveform Generation mode (WGM13:0) and Compare Output mode (COM1x1:0) bits. The
Compare Output mode bits do not affect the counting sequence, while the Waveform Generation mode bits do.
The COM1x1:0 bits control whether the PWM output generated should be inverted or not (inverted or non-inverted
PWM). For non-PWM modes the COM1x1:0 bits control whether the output should be set, cleared or toggle at a
compare match. Refer to “Compare Match Output Unit” on page 103.
For detailed timing information, refer to “Timer/Counter Timing Diagrams” on page 111.

17.8.1 Normal Mode


The simplest mode of operation is the Normal mode (WGM13:0 = 0). In this mode the counting direction is always
up (incrementing), and no counter clear is performed. The counter simply overruns when it passes its maximum
16-bit value (MAX = 0xFFFF) and then restarts from the BOTTOM (0x0000). In normal operation the Timer/Coun-
ter Overflow Flag (TOV1) will be set in the same timer clock cycle as the TCNT1 becomes zero. The TOV1 Flag in
this case behaves like a 17th bit, except that it is only set, not cleared. However, combined with the timer overflow
interrupt that automatically clears the TOV1 Flag, the timer resolution can be increased by software. There are no
special cases to consider in the Normal mode, a new counter value can be written anytime.
The Input Capture unit is easy to use in Normal mode. However, observe that the maximum interval between the
external events must not exceed the resolution of the counter. If the interval between events are too long, the timer
overflow interrupt or the prescaler must be used to extend the resolution for the capture unit.
The output compare units can be used to generate interrupts at some given time. Using the output compare to gen-
erate waveforms in Normal mode is not recommended, since this will occupy too much of the CPU time.

17.8.2 Clear Timer on Compare Match (CTC) Mode


In Clear Timer on Compare or CTC mode (WGM13:0 = 4 or 12), the OCR1A or ICR1 Register are used to manipu-
late the counter resolution. In CTC mode the counter is cleared to zero when the counter value (TCNT1) matches
either the OCR1A (WGM13:0 = 4) or the ICR1 (WGM13:0 = 12). The OCR1A or ICR1 define the top value for the
counter, hence also its resolution. This mode allows greater control of the compare match output frequency. It also
simplifies the operation of counting external events.
The timing diagram for the CTC mode is shown in Figure 17-6. The counter value (TCNT1) increases until a com-
pare match occurs with either OCR1A or ICR1, and then counter (TCNT1) is cleared.

 2018 Microchip Technology Inc. Data Sheet Complete DS40002072A-page 104


ATmega32A

Figure 17-6. CTC Mode, Timing Diagram

OCnA Interrupt Flag Set


or ICFn Interrupt Flag Set
(Interrupt on TOP)

TCNTn

OCnA
(COMnA1:0 = 1)
(Toggle)

Period 1 2 3 4

An interrupt can be generated at each time the counter value reaches the TOP value by either using the OCF1A or
ICF1 Flag according to the register used to define the TOP value. If the interrupt is enabled, the interrupt handler
routine can be used for updating the TOP value. However, changing the TOP to a value close to BOTTOM when
the counter is running with none or a low prescaler value must be done with care since the CTC mode does not
have the double buffering feature. If the new value written to OCR1A or ICR1 is lower than the current value of
TCNT1, the counter will miss the compare match. The counter will then have to count to its maximum value
(0xFFFF) and wrap around starting at 0x0000 before the compare match can occur. In many cases this feature is
not desirable. An alternative will then be to use the fast PWM mode using OCR1A for defining TOP (WGM13:0 =
15) since the OCR1A then will be double buffered.
For generating a waveform output in CTC mode, the OC1A output can be set to toggle its logical level on each
compare match by setting the compare output mode bits to toggle mode (COM1A1:0 = 1). The OC1A value will not
be visible on the port pin unless the data direction for the pin is set to output (DDR_OC1A = 1). The waveform gen-
erated will have a maximum frequency of fOC1A = fclk_I/O/2 when OCR1A is set to zero (0x0000). The waveform
frequency is defined by the following equation:
f clk_I/O
f OCnA = ---------------------------------------------------
2  N   1 + OCRnA 

The N variable represents the prescaler factor (1, 8, 64, 256, or 1024).
As for the Normal mode of operation, the TOV1 Flag is set in the same timer clock cycle that the counter counts
from MAX to 0x0000.

17.8.3 Fast PWM Mode


The fast Pulse Width Modulation or fast PWM mode (WGM13:0 = 5, 6, 7, 14, or 15) provides a high frequency
PWM waveform generation option. The fast PWM differs from the other PWM options by its single-slope operation.
The counter counts from BOTTOM to TOP then restarts from BOTTOM. In non-inverting Compare Output mode,
the Output Compare (OC1x) is cleared on the compare match between TCNT1 and OCR1x, and set at BOTTOM.
In inverting Compare Output mode output is set on compare match and cleared at BOTTOM. Due to the single-
slope operation, the operating frequency of the fast PWM mode can be twice as high as the phase correct and
phase and frequency correct PWM modes that use dual-slope operation. This high frequency makes the fast PWM
mode well suited for power regulation, rectification, and DAC applications. High frequency allows physically small
sized external components (coils, capacitors), hence reduces total system cost.

 2018 Microchip Technology Inc. Data Sheet Complete DS40002072A-page 105

You might also like