ATtiny2313Timers/Counters
CS-423Dick Steflik
What Do You Use Timers For?
Timing of events (internal or external) Scheduling Events Measuring the width of a pulse Speed control of motors (PWM) Generation of complex waveforms Frequency generation (sounds)
The concept of using a timer/counter
Counters run asynchronously to your code Can be setup to start based on an internal or
external event Can generate interrupts Can signal to a pin
Example
To time a piece of code: Initial the counter to 0, have it interrupt on overflow Interrupt handler should count overflows Start the counter Run your code At end of code read counter and add to number of
overflows to get total time
Example
To time an incoming pulse/event: Setup interrupts on rising and falling edge of pulse
and overflow of counter In handler for rising edge start counter In handler for overflow, count the overflows In handler for falling edge read counter and add
overflows to get time of pulse/event
Example
Motor control: Use counter to generate a pulse train to control
speed of DC motors Full speed = full power (infinitely wide pulse Low speed = narrow pulses with wide down time 50% speed = equal up and down times
Can only control very small motoers directly, must use high power transistors to drive bigger motors
This is came idea as intermittent wipers on a car
2 Timer/Counter Units
8-bit Timer/Counter0 w/PWM 16-bit Timer/Counter1 Timer/Counter1 and Timer/Counter0 prescalers
8-bit Timer/Counter0
Single channel counter Frequency Generator External Event Counter 10-bit clock prescaler
Only used with internal clock Scale by: 1, 8, 64, 256, 1024
8-bit Timer/Counter0
8-bit Timer/Counter0
Sample code can be found at: http://winavr.scienceprog.com/avr-gcc-tutorial/control-avr-8-bit-timer-counter0-using-avr-
gcc.html
16-bit Timer/Counter1
Modes of Operation
Normal Mode – always counts up, no clear, counter just overruns
Clear Timer on Compare match (CTC mode)
Fast PWM Mode
Phase Correct PWM mode
Phase and Frequence Correct PWM mode
16-bit Timer/Counter1
Sample code can be found at: http://winavr.scienceprog.com/avr-gcc-tutorial/program-16-bit-avr-timer-with-
winavr.html
Prescaler