Understanding and using Timer/Counter peripheral chip
Counter or Timer is the third IO or peripheral chip we are interfacing to the
CPU. The other two IO chips we already interfaced are general purpose IO
chip and serial communication chip. These three IO chips are very basic
and fundamental chips. Every embedded hardware certainly will have these
chips. But now a days, embedded hardware contains many more IO interface
chips. Some of these chips are listed in the previous article, while
discussing various interface or communication protocols.
Counter/Timer as Counter
The Counter/Timer chip is essentially a counter. It counts the clock pulses
that received on the input clock pin. Every counter/timer chip will have
a counter register in it. Whenever a pulse is received on the input pin,
the value in the counter will be incremented. Basically thats all a counter
will do. Program running on the CPU can read this counter register and can
find, how many pulses are received so far. We can connect this input pin to
a push button. Whenever user pushes and releases the button a pulse is
generated, and counter increments by one. This may not be very interesting
use of the counter, let us see the more interesting applications of counter.
If you observe, electricity or energy meter in your home, it keeps producing
pulses. You will observe an led is blinking. Led blinks when certain
amount of energy is consumed. By counting these pulses, the embedded
hardware can maintain the amount of electricity consumed. In fact the
embedded hardware present in the energy meter will do the same thing.
Similarly there are water or liquid flow meters. Whenever certain amount
of liquid is passed through this meter it will produce a pulse. By counting
these pulses we can measure the quantity of liquid.
It is possible to connect a pulse generating sensor to a rotating wheel of
a car or auto. For each revolution of a wheel, the sensor will produce fixed
number of pulses. By counting these pulses, we can find the distance travelled.
By counting the pulses in every second, the speed of auto can be found.
We can setup an infrared sensor and infrared light source in the path
of moving items. For example, items are moving on a conveyor built in a
production industry. Whenever item obstructs the light for certain interval,
a pulse is generated by the infrared sensor. By counting these pulses we can
find the number of items passed across the light source.
Now i hope, you are convinced that there is a need for counting the pulses.
And the counter chip is just made for this purpose. Also note that, without
using any counter chip, we can also measure the pulses by using a digital
input line. But in this case CPU has to continuously monitor the line,
and CPU wastes its precious time for this simple counting. So it is better to
use counter chip instead of wasting CPU time.
Counter/Timer as Timer
We can use counter as timer also. In this case, we will connect a fixed, known
frequency clock pulses to the input pin of counter. For example if we
connect 1 MHz clock source to the input of counter, the counter will increment
by one in every micro second. So by reading the counter at two events,
we can find the time difference between these two events. If we wish
to glow LED for 100 milli seconds, we can switch on the led and start the
counter. When counter value reaches 100,000, switch off the led.
Interfacing to CPU
The following figure shows how timer/counter chip is interfaced to the CPU.
Note that for the lack of space, we are showing only timer chip in the figure.
One should assume that all the three peripheral chips (GPIO, Serial, and Timer)
are attached to the CPU bus. In the figure only timer chip is shown.
Timer chip will have chip select pin, read pin, write pin, data pins and
address pins. These pins are connected to the CPU's bus. CPU can read and write
to the registers of this chip.
Interfacing to devices
For interfacing to the external world, the timer chip has two pins. One is
clock input pin, through which counter receives the pulses. In counter
application this pin is connected to the external sevice like energy meter or
water meter. To use this as timer, this pin is connected to the on-board
The second pin is timer output pin. This pin can be used to generate
output pulses, based on the timer events. For example a pulse will be
generated on this pin, whenever timer receives 1000 input clock pulses.
So assuming timer clock is 1 MHz, a output pulse is generated once in every
millisecond. Instead of generating periodic pulses, we can generate a
single pulse of known width. In this case, the pin will go to high state
when timer is started. When timer reaches specified count, the pin will
go to low state, producing a single output pulse of given width. This pulse
may be used to open the water tap for a particular duration. Or to open
a lift door for a certain duration.
This chip has got the following three registers. Each of these register is
having unique address, to access by the CPU.
- Counter Register
- Match Register
- Status and control register
By writing to control register, we can start and stop the counter from
counting. With control register, we can also control the behaviour of
timer and timer output pin. Using the status bits we can find whether
counter is reached specified value or not. We can write the maximum count
value to count, in the match register. When counter reaches this maximum
value, one of the folliwing things can happen.
- On reaching match register value, stop the counter. And also set the
status bit in the status register, indicating counter has finished counting.
- On reaching match register value, start the counter from 0 onwards.
Also set the status bit in the status register, indicating that counter has
reached the maximum value.
- In addtion to one of the first two, change the state of output pin to low
- In addtion to one of the first two, change the state of output pin to high
- In addtion to one of the first two, toggle the state of output pin
Which of the above will happen is controlled through the control register.