[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.
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.
STATE PB2 PB0 LED's
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!
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.
[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.
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.
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.
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”→
If you need a very thin, low power display that doesn’t use a whole bunch of pins on your microcontroller, [bobricius] has just the thing for you. His entry to the Hackaday Prize this year is a Charlieplexed LED display. With this board, you can drive 110 LEDs using only 11 GPIO pins.
Charlieplexing is a bit of a dark art around these parts. That’s not to say the theory is difficult; it’s really just sourcing or sinking current from a GPIO pin and arranging LEDs unparallel to each other. The theory is one thing, implementation is another. To build a Charlieplexed LED matrix, you need to go a bit crazy with the PCB layout, and god help you if you’re doing this point-to-point on a perf board.
Somehow, [bobricius] managed to fit 110 LEDs on a PCB, all while managing to break out those signal wires to a sensible set of pads on one side of the board. Only eleven pins are required to drive all these LEDs, making this project a great foundation for some very cool wearables or other projects that require a bright, low-res display.
Since [bobricius] can put 110 LEDs on a small board, he can obviously take LEDs away from that board. That’s what he did with his cut down version designed to be a clock. Both are great little boards, and the perfect solution for tiny displays for low-pin-count micros.
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.