Skip to main content

Charlieplexing: Controlling 6 LEDs with 3 Pins

If you've heard of Arduino, you've heard of LED cubes. Apart from the appealing looks of the LED cubes, a very simple technique has been put to use in order to control a huge number of LEDs using limited pins on the Arduino.

Charlieplexing is the simple technique we are talking of in this article that helps you control a considerable number of LEDs using negligible number of pins.  It was first proposed in early 1995 by Charlie Allen at Maxim Integrated Products for driving a multiplexed display.

Using this method you can control n2−n LEDs using n pins on the Arduino, In other words you can control 6 LEDs using just 3 Pins.

This trick exploits the fact that LEDs are diodes and conduct electricity only in one direction.

Let's go through this in steps, understanding it as clearly as possible.

So lets say you've got 2 LEDs connected this way-

Port A and B are nothing but two digital pins on the Arduino, for instance digitalPins 3 and 4. Now, as you can see when Port A is HIGH and Port B is LOW, the upper LED lights up, while the LED below stays off (because LED's afte all are diodes that allow current to pass only in one direction).
So this way we can control 2 LEDs. 
NOW, lets introduce one more digital pin, say, Port C.
Just like what we did above, we can add two LED's between Port C and Port B
You already know how to turn on each of them.  
What are we achieving by doing so?
Lets connect the two pictures to get the holistic idea.
Great, we are now controlling four LEDs using 3 Pins. 

Wait a second. 
If we are setting one Pin HIGH and another pin LOW, the corresponding LED between them seems to light up, but what do we do with the third pin? 
We set the remaining pin not in use as an input (for eg- pinMode(pin5, INPUT); ). This makes makes the pin as good as it doesn't exist or in other words makes the pin act as an open connection hanging off the air.

Back to work, notice that we can add another two LEDs between Ports A and C?
This is it. You are now controlling 6 LEDs using just 3 pins.
Similarly you can go on adding more Ports to control more LEDs.
Now lets have a quick look at a code snippet-
Suppose, we want to turn on the the top most LED in the above schematic given that ports A,B and C are digital pins 3, 4 and 5 respectively on the Arduino-

pinMode(4, INPUT); // pin 4 has no use in turning on the LED that we want.

pinMode(3, OUTPUT); //Set pin 3 as OUTPUT
digitalWrite(3, LOW); // Use pin 3 as Ground

pinMode(5, OUTPUT); //Set pin 5 as OUTPUT
digitalWrite(5, HIGH); // Use pin5 as a 5V pin

That's the basic idea of Charlieplexing.
But, how do we turn on all the LEDs together?
Simple, make each LED blink with a short delay that will be almost as good as they are constantly on.

If you've understood everything up to here, you can set out to build projects involving multiple LEDs with fewer ports- However, you must rememberto add current limiting resistors!




Popular posts from this blog

5 Effective Online Tools that will Spice up your Arduino Projects!

Arduino has made electronics projects easier than ever. The question now is- Can we make the process of building projects faster and more enjoyable? Let's have a look at some of the interesting softwares/online tools developed for the Maker Community to make tinkering more effective and documenting projects easier!

1. TinkerCad

TinkerCAD's recently created circuit simulator allows you to arrange your Arduino/Attiny circuits in an easy 'drag and drop' environment and test them virtually without having to make them. This can be really helpful, for testing projects that use components which you are yet to buy. And after all, who doesn't like tinkering?

Try out Tinkercad-Circuits here!

But that's not what Tinkercad is famous for. It offers an amazingly easy to use 3D design tool for Makers, once again in a simple 'Drag and Drop' interface! You can directly download the CAD file, once you're done designing. If you've ever thought of making your own uniqu…

TV Remote Controlled Servo Motor-Using Arduino!

We use our TV remotes to control the functions of the TV's, but when the TV is not in use, they're absolutely useless. Today, we are going to learn how to add more functionality to ordinary IR based remotes, in this one we shall see how to control servo motors. There are so many (SO MANY) different applications of this project that one can think of. Using the following tutorial, you can make one yourself!

1. Watch the video tutorial-

2. Things you will need-

Note that you may use a different IR receiver other than TSOP1738, if it isn't available. Usually you can find this on websites like amazon and ebay.
3. The circuit diagram!

4. The IR Remote Library
5. The Arduino Code- Just copy paste this code into your Arduino IDE

// Written by Siddharth Kothari, Enjoy your journey Exploring Arduino!#include <IRremote.h>#include <IRremoteInt.h>#include <Servo.h>intRECV_PIN=11;//IR receiver pinintgndIR=10;/…

NetBeans Java project- TIC TAC TOE (AI) - logic explained

This article covers the basic concept of how you can implement basic AI in you game, i.e allow the computer to compete with you, giving it equal chances of winning. It's worth a thought what makes the computer invincible in a human vs computer chess game?

A common notion is that programmers code for every single possibility in the game considering all permutations and combinations etc. However this is far from reality. We can instead make the computer go by the 'Human thought process ' for every move. Lets consider a simpler approach to the popular TIC-TAC-TOE game.

Try out TIC TAC TOE here. (500 Kb executable .jar file)

Coming to the TIC-TAC-TOE GAME. This project is a great exercise for beginners to get a hang of basic logic used in games and other applications.
The logic behind the computer's moves is simpler than you think. To begin with, lets see the logical flow of code before getting into the 'code'.
Here's how the code works-

After every move yo…