Using Timer/Counter
(ATmega16)
Dipl.- Inf. Dirk Wilking
Lehrstuhl Informatik XI
RWTH Aachen
[email protected] WS 06/07
Timer Ù Counter
Timer
- Counts clock signal (measures time)
- Clock divider can be used (for longer time intervals)
- Example: switch an LED every second
Counter
- Counts external events
- Example: switch an LED after 20 external events
Usually every Timer can also be used as Counter and vice
versa
Folie 2
1
Atmega16´s Timer/Counter
Timer/Counter0:
- 8bit
Timer/Counter1:
- 16bit
Timer/Counter2:
- 8bit
All three units can
- use prescaler (up to 1024)
- create PWM signals
- create interrupts (overflow, compare event)
Folie 3
ATmega16 – Timer/Counter0
Control Register
Timer
Overflow IR
Counter Register
Compare Register
Folie 4
2
ATmega16 – Timer/Counter0
Control Register
Counter
Overflow IR
Counter Register
Compare Register
Folie 5
Timer/Counter
The according registers can be accessed like I/O ports
More information about the function in the following
example and in the ATmega16data sheet
Timer/Counter can also generate Interrupts. Find more in
the slides Using Interrupts.
Folie 6
3
Example Timer0
//blinks LEDs at PORTA with 22,888Hz (6MHz system clock)
#include <avr/io.h>
int main (void)
{
outp(0xFF,DDRA); //PORTA is output
outp(0x00,TCNT0); //Counter Register = 0
outp(0x05,TCCR0); //start Timer0 with prescaler = 1024
//counter is running from now on until it is stopped
//counter restarts with 0x00 after 0xFF has been reached
while(1)
{
if(TCNT0 < 100) //read and compare Counter Register
{
PORTA = 0xFF; //LEDs PORTA off
}
else
{
PORTA = 0x00; //LEDs PORTA on
}
}
}
Folie 7