I would like to drive three sixteen-segment displays (https://www.sparkfun.com/products/retired/9934) using an Arduino Micro. These displays would output an alphabetic character that a user would scroll through using rotary encoders, and constitute a subsystem of a larger project where the user enters a "combination" made from the three letters to "unlock" functionality in the larger device.

The best option, if it could be called that, is this retired product from SparkFun: https://www.sparkfun.com/products/retired/10103 that would allow me to drive the displays without a huge wiring mess, and spares me a lot of pins on the Micro to use on the rotary encoder. Unfortunately, the product is retired because the A6282 IC it was based on reached end of life, so even the schematics available on the product page aren't much use to me.

I am aware that four-character 16-segment displays are available, but for "aesthetic" reasons I am constraining myself to using single-character 16-segment displays. I do wonder how possible it would be to run three or four individual 16-seg displays from one of those LCD backpacks, but I don't think that would be trivial to do (I'd need to, probably, fabricate some sort of printed circuit board that spaced each display as far out as I need them to be, hook the pins of each display into a key matrix, and then at that point it'd be substantially easier to just get a MAX6954 (https://www.maximintegrated.com/en/app-notes/index.mvp/id/3212) and try to figure that out). It would be very clumsy to prototype.

So, I'm looking for a solid method of prototyping this "combination entry" subsystem and its 16 segment displays without needing to put each dial and alphanumeric display on its own AVR or something.

  • 2
    You mean like with a shift register or LED driver IC? – Ignacio Vazquez-Abrams Jul 1 '16 at 19:19
  • 1
    I sell these. Could be what you want - wire it direct to a common-anode display and communicate with it over I2C. UP to 14 of them can be chained together. – Majenko Jul 1 '16 at 20:12
  • I'd prefer to use some sort of driver IC like the discontinued model I refer to as being formerly available from SparkFun. I feel like if I have to go to shift registers, then what will inevitably happen is that I either have to assign a small AVR to each character display and rotary encoder, then feed all of these into another microcontroller that will assemble all of that into a coherent combination. I'm willing to do that, but it will mean that this little subassembly will cost over $60, which hurts the larger project's reproducability. – Bradley Evans Jul 1 '16 at 20:13
  • @Majenko That actually looks like it would be perfectly suitable. Thank you. – Bradley Evans Jul 1 '16 at 20:43

If you need additional IO lines, a typical “LCD backpack” supplies at most eight additional lines of IO; 16-channel TLC59116 LED Driver Board as mentioned by Majenko would be more elegant than using several backpacks.

You might try an approach like the following to see if it works well enough.

Use 16 IO lines to pull down 16 segment lines. Use three IO lines to drive three digit-select PNP or PFET transistors for digit multiplexing. Use pin-change interrupts on two IO lines to read rotary encoder (RE) data. Use one input to read the RE pushbutton. Use one IO line to notify the bigger unit of success. Total 23 IO lines.

In operation, your code will need to implement a state machine that frequently refreshes the multiplexed digits while keeping track of digit values, selected digit, etc. Each time you click the RE have your sketch go on to the next digit. To tell the user which digit is working, blink the selected digit a couple of times after the RE press. Each time that selection wraps around to the first digit, check if the combination is correct.

If you feel it's necessary to have three different digit-setting knobs, vs clicking through to each digit, you could use one less IO line by using three pots instead of one RE. The pots would be read in analog. A6 and A7, IIRC not usable for output lines, could be used as analog inputs for two of the pots.

| improve this answer | |

The other answers give great suggestions, but to add to them you could consider the MAX7219 driver chip. I have a page about using it. It can drive a 8x8 pixel display (like one alphanumeric character) or 8 x 7-segments displays (a 7-segment display usually has a decimal place so that is really an 8-LED display).

Example of 64-pixel display:

64 pixel display

Example of 8 x 7-segment displays:

8 x 7-segment display

Those displays come as a unit (2 x 4 digits) but there is nothing stopping you running wires to individual 1-digit displays if you want to.

Here is a possible schematic:

MAX7219 schematic

If you are running to individual displays you just parallel-up the anodes (A to G, plus DP) and run a "digit" line to the cathode of each display.

That will only take 3 signals from your processor (MOSI, SCK, SS) plus power and ground.

I notice you are talking about 16-segment displays and not 8-segment displays, but the chip allows any bit patterns to be sent out, so you could consider a 16-segment display to be the same as 2 x 8-segment displays. You would just have to make up a suitable bit-pattern to show each digit.

The MAX7219 also handles the requirement for constant-current driving of the LEDs.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.