# Series of illuminating LEDs…sort of

So here's my idea:

Two rings of 36 LEDs (so 72 total). Starting at the bottom of the first ring, I want to have the first LED illuminate and stay lit, and so on, until the entire ring is lit. Then, the second ring should do the same while the first ring stays lit. Once the second ring is completely lit, they should both turn off and start the illuminating process all over. One complete illumination cycle should take about 5 seconds.

Also, I want the same LEDs to be able come on all at once and blink at a rate of about 2/sec. triggered by a separate input. All 72 LEDs to be all-on, all-off, all-on at a rate of 2 per second.

This is for a 12v DC application.

I hope I was specific enough. I'm good at the idea and building parts of these kinds of things, but not so good at the designing aspect. Any help is greatly appreciated.

• Please see if you can restructure the question to a specific query or set of queries, that this community could then answer. As it stands, it appears you are asking someone to design a microcontroller based LED driver circuit for you. – Anindo Ghosh Mar 7 '13 at 19:20
• The 1st paragraph is clear enough, but the 2nd is unclear. Can you explain with more words. ie when you say "I want the same LEDs to come on ..." do you mean that you want 36 or 72 LEDs to be all-off, all-on, all off ... at a 2 per second rate ? – Russell McMahon Mar 7 '13 at 19:24
• @RussellMcMahon All 72 LEDs to be all-on, all-off, all-on at 2 per second. – Josh Mar 8 '13 at 4:50
• @AnindoGhosh I don't even know where to start is the problem. I only have fundamental electronics knowledge. While it'd be ideal for someone to design the whole thing, even just being pointed in the right direction would be a big help. – Josh Mar 8 '13 at 4:53
• @Josh I've provided a detailed, yet strictly "Where to start" type answer, rather than a complete design. Leaves you with something to learn, rather than handing you a solution on a platter. :-) – Anindo Ghosh Mar 8 '13 at 6:52

Here are two of many possible approaches to the problem, one using a microcontroller, one without. The microcontroller approach is simpler to implement, the second option is merely included for completeness.

At the outset:

• The physical layout (two concentric circles, et cetera) is irrelevant to the electronic design aspect, except when it comes to PCB layout
• The 12 Volt requirement is not clear, so assuming it simply specifies an available power supply voltage, not the required LED module driving voltage
• Assumption: The LEDs to be used can be driven by currents of up to 30 mA (not high-power LEDs)

Approach 1: Microcontroller based.

Select a multichannel, serially controlled LED driver IC, such as the AMS AS1119 144 channel LED driver ($4.90 each), and control it through any microcontroller that supports I2C (or, for other drivers, SPI) protocol. An Arduino is a good beginner's microcontroller development board for this purpose, while the TI MSP430 Launchpad is a cheaper ($4.30 including international shipping) but less well-supported such board.

The microcontroller will need to be programmed to send out serial commands to the LED Driver for the specific LED patterns and timings desired. An added advantage is that every individual LED can be set to a variable brightness level, using either externally supplied (from the microcontroller) or internal (within the driver IC) PWM signals.

Thus, your rings of LEDs could actually be designed to fade individually up to full brightness, if desired.

The "two rings" are not relevant here, simply treat them as 72 discrete LEDs, to be driven in a pattern of 0, 0+1, 0+1+2, .. 0+1+...+36 .. pause .. 0+1+...+37 .. 0+1+..+72.

If your requirement can be reduced to 32 x 2 = 64 LEDs, then an even cheaper and much more ubiquitously supported LED driver can be used, the Maxim MAX7219. Although this IC is marketed as an 8-digit numeric display driver, it can equally be used for 7-segment numeric LED displays of up to 8 digits, bar-graph displays, or 64 individual LEDs (from the datasheet).

Key advantages of using the MAX7219 are:

1. There are publicly available libraries for the MAX7219 for almost every common microcontroller platform, including the Arduino and the MSP430 Launchpad.
2. The IC is also available in a DIP package, in case you need to hand-solder or wire it up deadbug style.

Key advantage of using the AS1119 is:

1. The IC contains an integrated charge pump, for driving LEDs with forward voltage higher than the available supply, such as for blue or white LED strings.

The selected LED driver IC will need to be configured for the per-LED current desired. This is achieved either through serial commands or using a current setting resistor, depending on the driver chosen.

Approach 2: No microcontroller used

While this approach is not really worthwhile given today's inexpensive and easily programmed microcontroller development boards, this is how I built my first LED display very similar to what you describe, about 25 years ago. This is useful for those with microcontroller-phobia even today.

Select a bar/dot LED driver IC, such as the National LM3914 IC. Each of these supports 10 LEDs or segments, so you will need 8 of them for a 72-LED cascade.

The LM7914 is Expandable to Displays of 100 Steps, but becomes rather touchy in cascades of 8 or more (more than 70 LEDs), in practice.

The cascaded implementation schematic is provided in the datasheet. All you need now is a sawtooth voltage generator to feed into the cascaded arrangement. This can be built using 555 timer ICs and additional components.

There will be no option for brightness control of the LEDs, just a fixed current per LED again set using an external resistor on each LM3914 IC. Also, the blink pattern in the original question is not very simple to generate using this mechanism.

Is this approach advisable? Not at all, but it's been done, so no harm knowing about it.

• Thank you for the very solid starting point! I am a little intimidated at the thought of going the Arduino route, but the versatility is too good to pass up. Thanks again! – Josh Mar 8 '13 at 17:43
• I found a kit through Jameco that uses the MAX7219 and is used to control a 8x8 matrix. I think combining that with a Arduino, I can eventually work the program to do what I want. – Josh Mar 9 '13 at 20:07
• @Josh Yes, that should work fine, for two rings of 32 LEDs each. – Anindo Ghosh Mar 10 '13 at 3:29

Maybe, try Googling 'LED power calculator'. That might give you some ideas for how to include the LEDs plus resistors into a circuit that can be driven by 12V.

But then you need to figure out how to control them in the ways you describe. Maybe look at shift registers (eg, 74HC164, 74HC194, 74HC299, 74HC595, 74HC597) to name a few, although there might be ones better suited for this specific scenario. Arduinos are inexpensive and should be capable of this with the right arrangement of shift registers.