Many programmers delight in producing code and sub-routines that require the
minimum number of lines or the minimum number of cycles. This type of code is
it can take an hour or more to realise how it works! I have pondered over three
lines of code, for three hours! - before realising how it worked!
There are other passions.
One is to use the minimum number of outputs for a particular application.
This article shows how to use the minimum number outputs to drive a LED display.
The first project we will look at is a LED Dice project. A simple version can
be found in the Projects section: LED
Dice. The circuit uses two chips ( a 555
and a 4017) to illuminate a single dice. It has a tumbling feature to shake-up
the dice and display the result on a set of LEDs. The circuit is very
impressive for a 2-chip design but with the advent of microcontrollers, we can
produce a more-spectacular 2-dice effect, with a single 8-pin chip.
In this discussion we will look at how to interface a set of 14 LEDs to the
output of a PIC12c508A microcontroller.
The animation shows the effect we require:
14 LEDs are driven to produce separate displays of 1,
2, 3, 4, 5, and 6 on the face of a pair of dice.
The smallest microcontroller capable of doing this is the
There are the 4 parameters you have to work with:
1. The PIC12C508A has 5 outputs.
2.Each output is capable of delivering 25mA.
3. A maximum of two LEDs can be placed (in series) on each output.
4. Outputs can be multiplexed (12mA per LED).
These parameters can be expanded by adding driver transistors and gating
components and these options will be investigated.
Other microcontrollers have more output lines but the CURRENT capability is the same. The PIC12C508A is the cheapest
microcontroller for the job.
The first thing to note is the drive capability:
The output of each line will SOURCE 25mA and SINK 25mA.
An output SOURCES a current when it is HIGH.
An output SINKS a current when it is LOW.
The following diagrams show 6 different arrangements for driving one or two LEDs
from a single output.
Resistors are needed to limit the current to 25mA. In circuits 5 and 6, either
the red or green LEDs are on. Both colours cannot be on or off at the same
time. This is one
of the limitations.
Driving LEDs via a single output
Using the above information we can create a two-dice display. The
diagram below shows two sets of 7 LEDs. The LEDs in grey are not in the
display. They have been included for a different purpose, as explained in a
As we have explained above, the LED Dice project has a display showing two separate dice. The
displays "tumble over" and show the numbers 1, 2, 3, 4, 5 or 6. To
drive this number of LEDs would normally take from 8 to 14 outputs. But with a little bit of preliminary
simplification the LEDs can be driven by 4 outputs. Each row contains two LEDs.
The first row contains one LED that is not in the display. It has been included
in the output so that the circuit works properly. We will explain why in a
Firstly we have to explain how the circuit works. It's very simple. When an
output goes HIGH, the two lower LEDs are illuminated. When it goes LOW, the top
two LEDs are illuminated.
When a output is changed to an input, it has a high impedance and none of the
LEDs are illuminated.
When the display is "static" none of the LEDs will illuminate because
the voltage across each LED must be 1.7v for the LED to illuminate. The voltage
required across 4 LEDs is 6.8v But the supply voltage is only 5v, and
thus none of the LEDs will illuminate.
This is the first trick we have used.
The second trick is the addition of an extra LED in the first column so that
the same reasoning will apply.
The LEDs merely prevent the centre LEDs in the display illuminating when
the project is at rest.
Now, for the third trick.
It is easy to see that the top LEDs will come on when the outputs are LOW, and
the lower LEDs will illuminate when the outputs are HIGH.
So, how do you create different numbers on the two faces AT THE SAME TIME!
The answer is called MULTIPLEXING.
It's very easy to understand.
When the output is HIGH, some of the outputs are turned on to produce the
number "6." When the outputs are made LOW, some of the lines are
made inputs, and thus some of the LEDs are not activated.
This sequence is repeated very quickly and the result is two different numbers
on the dice.
All the tumbling action and the display-time is created by the program in the
chip and the result is a project with more appeal than the LED Dice design,
but requiring fewer components!
Gating is another word for CONTROLLING. In the next example we show how to
individually activate 9 LEDs in a display, using 5 lines. The project
using this display is Noughts and Crosses and is one of our future
projects. The animation below shows how each LED is activated. To turn on
a LED, one of the drive lines is taken HIGH and the corresponding sinking
transistor is turned on. This applies to the first two rows.
The third row needs some attention as the two PNP transistors are turned on
when the base of each transistor is LOW. This only occurs when the first two
rows are not activated.
When the first or second row is activate, one of the PNP transistors will be
turned on but the third column of LEDs require BOTH PNP transistors to be
turned on and this means the first two rows need to be off. Study the animation carefully and you will se exactly what is
The activation of the display in the Noughts and Crosses project is taken one step further, as shown in the
animation below. All the LEDs cannot be turned on at the same time because the
outputs of the micro are not capable of delivering sufficient current, plus the
arrangement of the circuit will not allow them to be activated at the
The LEDs are turned on one column at a time. This is called SCANNING and
the direction of the scan is shown on the diagram.
Any or all the LEDs in the first column can be turned on by making the
corresponding output HIGH, then turning on the first transistor. The micro then
turns off the first column and turns on the second column. Finally, the third
column is turned on and off.
Each output is capable of delivering 25mA, and if each LED is turned on for 33%
of the time, the average current is 8mA. This arrangement is called
multiplexing and a LED receiving 8mA in a rapid succession of pulses will
result in a brightness very nearly equal to a LED receiving a constant
The diagram below shows the display being scanned and you should be able to see
the letter X being displayed:
More on this topic in future pages.