7 LED’s, 2 Pins – beat that, Charlieplexing

[Tim]’s Dice10 is an exercise in minimalism. Building an electronic dice using an ATtiny10 with code that fits within 1kB is not too difficult. Charlieplexing the LED’s would have used three of the four available GPIO pins. [Tim] upped the game by using just two GPIO pins to drive the seven LED’s for the dice. A third GPIO is used as a touch button input. Besides the ATtiny and the LED’s, the only other component used is a capacitor across the supply inputs.

2 GPIO for 7 LED's
2 GPIO for 7 LED’s

The LED’s are grouped in three pairs of two LED’s and a single centre LED. Usually, Charlieplexed LED’s are connected across pairs of GPIO pins. But his scheme includes connections to the 5V and GND terminals, besides the two GPIO pins. Building a truth table makes it easy to figure out what’s going on.

1     Z   Z   --
2     L   Z   LED 1/2
3     H   Z   LED 3/4
4     Z   L   LED 5/6
5     Z   H   --
6     H   L   LED9
7     L   H   --
8     H   H   --
9     L   L   --

Only the logic states used are listed in the table. It’s possible to add two more LED’s between PB0 and GND and one more anti-parallel with LED9, making a total of 10 LED’s driven by two pins. That’s quite a hack. The important thing here is to have two LED’s in series in the arms that connect to either 5V or GND.

[Tim] has posted  the code and hardware source files on his Github repo, and his blog post has some additional details on how he solved the problem.

If you’re looking for more inspirations on minimal dice designs, check this “PIC powered pair of electronic dice” which uses a PIC 12F629 with five outputs driving a pair of 7 pips to make a dual dice.


If you have a cool project in mind, there is still plenty of time to enter the 1 kB Challenge! Deadline is January 5, so check it out and fire up your assemblers!

Another way to look at Charlieplexing

Charlieplexing is a technique that allows you to drive a larger number of LEDs than wouldn’t be possible with the same number of I/O pins on a traditional multiplexed matrix. If we lost you there just think of it as lots of blinky lights connected to a small number of pins. It works by leveraging the one-way nature of a diode. Current will only flow through an LED in one direction so if you hook up your display in a clever way you can drive multiple LEDs from one I/O by switching the polarity of that pin between voltage and ground. [M.Rule] recently looked at using Charlieplexing with LED modules. His conceptual approach to the problem is different from those we remember seeing before and it’s worth a look.

Instead of just using the formula to calculate how many LEDs he can drive [M.Rule] is using a table of I/O pins to establish how many and in what order these displays can be connected. Each colored set of blocks represents an LED module. The graphic above shows how 18-pin can be utilized. He even filled in the unused pin combinations with input buttons.

Improve charlieplexing performance with interrupts


[Dmitry] was shopping for LEDs and accidentally pulled the trigger on the wrong type. Since he didn’t want to be wasteful, he figured he should at least take the time to build something with them.

A LED matrix display was the obvious project choice, but he only had a PIC16F688 at his disposal. Since the micro controller only has 11 output pins, charlieplexing was the only way he would be able to light the entire matrix.

While testing his LED array, he found charlieplexing to be a bit disappointing. The fact that the LEDs can get relatively dim, depending on the number of units lit at any particular time struck him as annoying.

In order to improve the performance of his charlieplexed array, he first decided to scan through all of the LEDs rather than just those that needed to be lit. This ensured that all of his LEDs had the same 1/110 duty cycle and were always as bright as possible. He also chose to use interrupts when lighting the LEDs. This meant that his code does not need to take into consideration any specific timing requirements to maintain persistence of vision. He also double-buffers the display to help reduce flicker.

He says that he ran into certain constraints with the PIC chip he chose, so he used a handful of lookup tables to ensure smooth operation of his display. He was quite satisfied with the results, and we think that the interrupt-driven display looks like it works just fine from where we’re standing as well.

Be sure to stick around for a quick video explaining and demonstrating his single-chip LED matrix.

Continue reading “Improve charlieplexing performance with interrupts”

Intro to charlieplexing


[sixerdoodle] sent us this nice firefly project that serves as an intro to charlieplexing. We’ve mentioned charlieplexing before, in our LED Life post and the Breath Controlled LED candles post. This project is quite simple and focues mainly on how to make a charlieplexed circuit work.

The goal was to create a tiny firefly bottle with SMD LEDs and as few wires as possible. In the video, after the break, it is hard to tell just how small this thing is until we see the battery. There are clear directions and fantastic pictures detailing exactly how to set up a charlieplexed circuit with 6 LEDs.

Continue reading “Intro to charlieplexing”

LED Life and Charlieplexing

Yesterday, we featured [Andrew]’s orientation aware camera. We want to highlight another one of his projects: LED Life. It’s a 6×5 LED matrix playing Conway’s Game of Life. He used the low power MSP430 like our e-paper clock. The best part of the writeup is his explanation of how Charlieplexing works. Microcontroller GPIO pins generally have three possible states: output high, output low, and input. This combined with the directional nature LEDs and some creative wiring means you can run a large matrix of individually addressable LEDs with just a few IO pins. Instead of just flipping the IO pins on and off you change their assigned state. Have a look at [Andrew]’s site for some great illustrations of how the system works. A video of his LED Life board is embedded below. Continue reading “LED Life and Charlieplexing”

World’s Smallest LED Cube – Again

There’s a new challenger on the block for the title of the “Worlds Smallest 4x4x4 RGB LED Cube“. At 13x13x36 mm, [nqtronix]’s Cube Pendant is significantly smaller than [HariFun’s] version, which measures in at about 17x17x17 mm just for the cube, plus the external electronics. It took about a year for [nqtronix] to claim this spot, and from reading the comments section, it seems [HariFun] isn’t complaining. The Cube Pendant is small enough to be used as a key fob, and [nqtronix] has managed to really cram a lot of electronics in it.

The LED’s used are 0606 RGB’s which are 1.6mm square, although he did consider using 0404’s before scrubbing the idea. There’s many ways of driving 192 IO’s, but in this case, Charlieplexing seemed like the best solution, requiring 16 IO’s. Unlike [HariFun]’s build, this one is fully integrated, with micro-controller, battery and everything else wrapped up in a case made entirely from PCB — inspired by [Voja Antonic]’s FR4 enclosure technique, and the LED array is embedded in clear resin.

Continue reading “World’s Smallest LED Cube – Again”

Charliplexed 7-Segment Display Takes Advantage of PCB Manufacturers

Cutting out precise shapes requires a steady hand, a laser cutter, or a CNC mill, right? Nope! All you need is PCB design software and a fabrication facility that’ll do the milling for you. That’s the secret sauce in [bobricius]’s very pleasing seven-segment display design.

His Hackaday.io entry doesn’t have much detail beyond the pictures and the board files, but we’re not sure we need that many either. The lowest board in the three-board stack has Charlieplexed LEDs broken out to six control pins. Next up is a custom-routed spacer board — custom routed by the PCB house, that is. And the top board in the stack is another PCB, this one left clear of copper where the light shines out.

We want to see this thing lit up! We’ve played around with using PCB epoxy material as a LED diffuser before ourselves, and it can look really good. The spacers should help even out the illumination within segments, while preventing bleed across them. Next step? A matrix of WS2812s with custom-routed spacers and diffusers. How awesome would that be?