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 |