Well, here we are again, the MAX6955 went down in flames as it will only work on LEDs. So we have to start over.
The Analysis: The NCD is comprised of 4 groups: Display, Keyboard, Rotary Switches, and Thumb Wheel Switches. The Display is comprised of 4 16-segment and 13 7-segment PinLite lamps, and two LEDs. The keyboard is comprised of a 10 key number pad and 4 special keys, it also encodes A-Z. There are two rotary switches, and two thumbwheel switches as well. I also found a user guide, TM-1-1520-238-10 pages 3-34 through 3-46 on the web. (this can be found here)
This blog will only concern ourselves with the display sub-system. I can't use a shifter C59 method as I need the display to be addressable. So this is what a came up with.
| Display Type | Ic per Segment | Ic per Device | Devices | Total Ic |
|---|---|---|---|---|
| 16 Segments | 15ma +/- 2ma | 240ma | 4 | 960ma |
| 7 Segments | 15ma +/- 2ma | 105ma | 13 | 1365ma |
| " | " | " | 7 | 735ma |
So first off an Arduino I/O will not handle that much current even the 15ma is pushing it. So what to do? Now, remember I want dimming and a lamp test function. If I buffer the drive lines with a 74HC244 non-inverting tri-state buffer, which will drive a MOSFET which will act as a drain, with the load (lamp) to power. Sounds good. Let's move on. The 7-segment lamps will be driven from CD4511B BCD to 7-segment decoder. After the decoder, I will use the same scheme and use a 74HC244 followed by our friendy MOSFET. As there are thirteen (13) 7segment displays, I will brake them into two strings on eight (6) displays while the other string has seven (7).
Now the multiplexer. There are 4 + 13 or 17. Now I really don't want to wire 17 more leads, so we will to it the easy way 17 == 11 hex or 5 more pins. (see table on the right) So I need a 5:23 decoder the 74HC138 is very cool as it is only a 3:8 decoder but has 3 enables, 2 low active and one high active. So I can only need 3 decoders (see the schematic below) and no external gate(s).
| Quantity | Type | Drive Lines | Select lines |
|---|---|---|---|
| 4 | 16-segment | 16 | 4 |
| 8 | 7-segment | 7 | 8 |
| 7 | 7-segment | 7 | 7 |
| 23 | TOTALS | 30 | 1 |
| #D | #H | 2A | D | C | B | A | E1! | E2! | E3 |
| 00 | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
| 01 | 01 | 0 | 0 | 0 | 0 | 1 | x | x | x |
| 02 | 02 | 0 | 0 | 0 | 1 | 0 | x | x | x |
| 03 | 03 | 0 | 0 | 0 | 1 | 1 | x | x | x |
| 04 | 04 | 0 | 0 | 1 | 0 | 0 | x | x | x |
| 05 | 05 | 0 | 0 | 1 | 0 | 1 | x | x | x |
| 06 | 06 | 0 | 0 | 1 | 1 | 0 | x | x | x |
| 07 | 07 | 0 | 0 | 1 | 1 | 1 | x | x | x |
| 08 | 08 | 0 | 1 | 0 | 0 | 0 | x | x | x |
| 09 | 09 | 0 | 1 | 0 | 0 | 1 | x | x | x |
| 10 | 0A | 0 | 1 | 0 | 1 | 0 | x | x | x |
| 11 | 0B | 0 | 1 | 0 | 0 | 1 | x | x | x |
| 12 | 0C | 0 | 1 | 1 | 0 | 0 | x | x | x |
| 13 | 0D | 0 | 1 | 1 | 0 | 1 | x | x | x |
| 14 | 0E | 0 | 1 | 1 | 1 | 0 | x | x | x |
| 15 | 0F | 0 | 1 | 1 | 1 | 1 | x | x | x |
| 16 | 10 | 1 | 0 | 0 | 0 | 0 | x | x | x |
| 17 | 11 | 1 | 0 | 0 | 0 | 1 | x | x | x |
| 18 | 12 | 1 | 0 | 0 | 1 | 0 | x | x | x |
| 19 | 13 | 1 | 0 | 0 | 1 | 1 | x | x | x |
| 20 | 14 | 1 | 0 | 1 | 0 | 0 | x | x | x |
| 21 | 15 | 1 | 0 | 1 | 0 | 1 | x | x | x |
| 22 | 16 | 1 | 0 | 1 | 1 | 0 | x | x | x |
| 23 | 17 | 1 | 0 | 1 | 1 | 1 | x | x | x |
The seventeen outputs, from the multiplexer, are connected to a BJT with the +4vdc on the high side, while the load connects to the common connection on the displays. The control for the dimmer is a PWM signal from the Arduino feeds into the three 74HC244 tri-state enable inputs. PWM signals duty cycle determines how much each segment drive is in the 'ON' state vs its 'OFF' state.
![]() |
| 5 to 21 decoder |
