Numitron Hexadecimal display module

Another hexadecimal display, this one is sans transistor for the extra vintage touch, and uses only Soviet-era parts

Similar projects worth following
This is another spin-off from the relay-based YGREC project that needs a hexadecimal display.
I first thought about using the pretty cool DYPLED module but the sophisticated and cheap module would be out of place.
I've chosen Numitron tubes for hexadecimal display for their incredible vintage look and ease of driving.
The hard part is to make a minimal module for decoding a 4-bits bus into the 7-segments display everybody knows and loves...

* Supply : 0V, 3.3V, 6.6V (up to 0.45A)
* 10 РЭС15 minirelays, one IV9 and plenty of diodes
* Decodes 4 bits, from 0 to F
* Input impedance : one relay coil

Digital data display is a recurring and nagging problem when designing DIY systems !

In the case of #YGREC-РЭС15-bis the constraint is to avoid using transistors. This all-Russian neovintage module uses

  • РЭС15 minirelays
  • IV-9 Numitron tubes
  • Soviet germanium diodes

This project is also a continuation of the log 20. Display technology again (yes, another fork !) and I'll move the relevant discussions here.

Ideally, like the #DYPLED, I should be able to design and build individual modules for my own usage and for eventual #Hackaday TTLers fellows  :-) This would be a step even further than the NUMI-311 (TIL311 module replacement) because  of the increased power draw and the increased room. However it will be warmer (both sentimentally and thermally) and you could show a kid the inside "for educational purposes"

One design constraint is to keep the input impedance identical and low for all the data bits, to ease integration with other YGREC devices.

Power supplies are derived from experience with the #YGREC-РЭС15-bis so we're playing with 0V, 3V and 6V (or more precisely -3.3V, 0V and 3.3V). Using a single power supply would be too much of a hassle and increase the complexity and the Numitron draws little compared to the relays...


1. Prior art
2. References
3. Physical configuration
4. Circuit and schematics
5. First prototype and first setback
6. More diodes !
7. Diode optimisation
8. Going further
9. A little idea to revive...


A script that searches which input permutation saves the most diodes

HyperText Markup Language (HTML) - 3.09 kB - 09/24/2017 at 01:35


  • A little idea to revive...

    Yann Guidon / YGDES10/04/2017 at 02:36 4 comments

    While building the 2nd prototype, there comes an opportunity to revive an idea I first imagined a while back, when doing my first 7 segments decoder. In this log, dated 20151024, I entertained this: (a comment there and a link to make me contemplate a version with red LED instead of Schottky. I have many 0603 LED so it can replace SMA/SMB diodes but the output must be "level shifted" because low level would be around 2V)

    Fast forward today, with this stockpile of russian parts, and a better understanding, this idea takes a new life... I think the diode matrix should be replaced by a LED matrix, just like in this video:

    I have the decoder, the matrix structure, the display, and... a small bag of AL102 ! (see this other log)

    The AL102 might be pushed to the limits, both current-wise and their reverse voltage, but this depend on how much I can undervolt the bidirectional Numitron filaments. Let's test...

    Power supply : 5.6V, 15mA - Vnumitron : 2.9V - Vdiode: 0.53V - Vled: 2.13V

    Power supply : 6.6V, 18mA - Vnumitron : 3.83V - Vdiode: 0.55V - Vled: 2.17V

    So despite my fears, it's possible to power the LED array with the same power as the relays, the Numitron takes most of the voltage differential and the current doesn't increase too much. However the voltage is still quite low and the 6.6V power must be totally reversed, I can't use a single -3.3V/0V/+3.3V trick. One more relay is needed.

    That's no big deal because this is only a demo unit, "for educational purposes" :-)

    Driving the relays is not so simple, though. But there are 9 relays if a single 6V supply rail is used :-)

    So there is one less relay compared to the intended version. This is possible because there is no need to adapt the input impendance (only one button is used, it's not connected to a data bus) but this comes at the price of adding series resistors to adapt the string lengths. In this case, since there is only one or two pieces, it's not critical, the actual power is not important (unlike the intended circuit that must be energy saving because there is one or two dozens).

    And this is where I realise I might have made mistakes with the driving circuitry.

    OK so here is the corrected circuitry :

    so outputs 5 and 6 should be swapped, and i remember I had to rewire them in the last prototype. Fortunately it's very easy to do.

    20171007: Damnit, I had unexplainable shorts and now I understand why : the metal case is not insulated !

    I have packed the LEDs close to each others and didn't think they should not touch the neighbours...

  • A less preliminary layout

    Yann Guidon / YGDES09/24/2017 at 21:09 0 comments

    Given the latest progress, I started to sketch some rough diagrams and that's the current state so far :

    I'm not sure yet about the order of the lines or columns but it's getting close, it will depend on the physical dimensions. The only way to know is to make a physical prototype...

    I can also reorganise the lines and columns and use my JS code to recreate the wiring diagram !

    In the above sketch, I have interleaved the lines from both halves but this creates another problem: the diodes can be less densely packed. By construction, there can be at most 2 diodes on a given column and 4 lines, which reduces the density a bit and allows the diodes to be rather evenly spread. But this is broken if the order of lines is changed.

    So I came up with this organisation:

    (sorry if the symbols are not very consistent, it's just faster to draw and closer to the physical view)

    and started wiring it, with slightly different diodes (D9K) :

    The left side is driven from the top and the right side from the bottom.

    It's pretty cool that one line has "disappeared" (two lines have been rewired on the right side) because there are only 13 lines instead of 14, which saves a little bit of room. Even though the number of lines has increased from 8 to 13 anyway :-D

    Another little detail to notice is that all the relays are oriented in the same direction, on both sides of the PCB. This ensures that all the lines are in monotonically increasing order. It's easier to define/find which line is 0

  • Going further

    Yann Guidon / YGDES09/23/2017 at 18:17 3 comments

    The module works as expected but it's not over : I could spare at least 20 to 30 diodes.

    Some diodes appear to be back-to-back and there are 27 such pairs. This could save 27 diodes. However the number pairs differing by 1 go to different rails and can't be easily merged.

    So it seems I must focus on diodes in the same direction. I find 27 pairs of adjacent digits (with distance 2) where the diodes could be in common. But why limit to distance 2 ?

    There could be all sorts of possible permutations. There is no obligation (apart from ease of understanding) to keep the digits in order in the layout. There IS one obligation to split the number in two halves because of the bidir ROM, which reduces the number of permutations. I wanted to analyse the permutations by hand but there are way too many.

    So I must write a program and run binary convolutions...

    Of course there are some places where 4 diodes could be merged into 1 and it's an additional bonus I consider, but the merge-2 is a lower-hanging fruit with higher probability and better yield.

    So first, the permutations are highly reduced because numbers go in pairs. This is due to the bidir diode array, and this constrains things a lot, but also reduces the search space. Numbers can only go with +1, +2, +4 or +8).

    This leaves 8 codependent pairs of numbers to permute. Permutation is easy : just shuffle the wires ! This leaves "only" 2×3×4×5×6×7=5040 permutations, multiplied by 4 because of the 4 possible polarity reversals.

    But there are still a lot of redundancies because the permutation 01234567 is the same as 10325476, or 14 other permutations because numbers go in pairs. This leaves us with 5040/16=315 degenerate combinations. The redundant permutations should be avoided.

    But wait ! there is more ! 01234567 is the same as 67452301 because we only care about the pairings. So it's all about pairings, and how many are there ?

    1 => 0
    2 => 1
    3 => 3
    4 => 3
    5 => 3 shapes × 5 rotations
    6 => 5 shapes (1, 3, 3, 2 and 6 rotations), summing to 15 again

    Too lazy to check for 7 and I go to OEIS to find clues : but I don't find my sequence starting with 0. So I sketch for 7 and I get 0,1,3,3,5,5,35 (=7×5)

    There is a high probability that the next number is 35 again (by construction) but at most, it is 35×8=280. Still better than 315 (and without the ×4 factor). The new number gives us A086116 with a hint in the description: "Numerator of mean deviation of a symmetrical binomial distribution on n elements." I don't see where the "Numerator of mean deviation" comes from but it sure looks like a "symmetrical binomial distribution on n elements".

    Actually it's simpler than that and the only permutation that can work is the permutation of the input wires. Otherwise we'd get random numbers (and another 16×4 bits ROM for translation). This makes 2×3×4=24 permutations. Only. I suspect there could be more but the decoder would become more complex and require more relays.

    There is a probability that several permutations are equally effective so their efficiencies can also be determined with the added constraint of merge-4 (two contiguous merges).

    Here is how I create the recursive permutations:

    function recurse(head, hl, tail) {
      var h1=hl+1;
      var tl=tail.length;
      if (tl > 1) {
        var t2=tail.slice(1);
        for (var i=0; tl > i; i++) {    
          var c=tail[i];
          recurse(head, h1, t2);
    function start() {
      recurse([], 0, ['0', '1', '2', '3']);

     OK. It's not your basic schoolbook example but I had to deal with JS' idiosyncrasies and I like to do stuff "in place".

    Now, because we only test merges of 2 or 4 diodes, there is no need to explore the full tree (it would result in duplicate values). The line "if (tl > 1)" thus becomes "if (tl > 2)" to halve the number of permutations. (I should have...

    Read more »

  • Diode optimisation

    Yann Guidon / YGDES09/19/2017 at 04:02 0 comments

    So far I have managed to keep the relay count pretty low, I fixed a wrong diode and all the phantom segments have disappeared. I'm wiring the rest of the segments and I realise that there is really, really a large number of diodes. This must be reduced...

    And there is a pretty easy way to do it, if only I had thought about this little trick earlier. It's too late for the first proto but the PCB must certainly use it.

    OK here is the trick : for example, for two consecutive digits, if there is a diode for both, then only a single diode is required if a 3rd row signal is provided. This is possible because this system uses SPDT relays, so we can get the desired signal at the input of the last demux, instead of the 2 outputs.

    Some deeper analysis will be required to find the optimal configuration but this is worth doing, if it can save even 1/3 of the diodes (the prototype is getting very crowded).

  • More diodes !

    Yann Guidon / YGDES09/16/2017 at 14:39 3 comments

    I think I've just found a possible solution to the problem I've re-discovered with the first prototype. I approached the problem from the wrong perspective but there is hope to keep the number of relays low, get all the 16 codes, but this involves more diodes. A bridge rectifier or something like that could work ?

    Apparently there is one topology where the phantom segments are much dimmer, at the cost of two diodes per segment. The direct segment path has 2 diode drops, while indirect paths have 6 diode drops. The drop ratio is 1:3, so it's worth trying ! 4 diode drops would be around 2V (depending on current), which is pretty much garanteed to keep the phantom segments from shining. The trick however is to split the paths, two per segment. This would force me to rewire some parts of the diode array, but only that.

    So YES it IS possible to make a hex decoder with only 8 relays (and 2 buffers). It is getting important because not only YGREC16 would need a significant number of displays, but the #YGREC8 also requires hexa displays as well. Octal won't cut it...

    20170918: the first prototype seems to work well :-)

    Segment voltage on : 2-2.1V, off : 0.5-0.6V, not enough to make any visible light.

  • First prototype and first setback

    Yann Guidon / YGDES08/01/2017 at 03:43 0 comments

    I wired some of the diodes, for the digits 0 to 5, and there are "ghost segments".

    My plan of using a bidirectional diode array has failed and the prospect of using much more relays looks bad...

    The 4-bits decoder with 10 relays works great, as shown in the video, but things get dirty with the diode array. The germanium diodes drop about 0.6V, and ghost segments come from loops with other codes. This feeds the filament with another voltage, 0.6V less, not much but enough to be seen.

    One solution is to add diodes in series to increase the drop so the ghosts are much less visible. This doubles the quantity of diodes... Or use Silicon diodes, with little benefit. This increases the power supply voltage... for nothing.

    The other solution is to go "full relays" and that means 15+3=18 relays, double the planned quantity, much more space is used, much more power is used and it's much more expensive! A 4-digits display will use 72 relays !

    Another is to use octal only. That's 9 relays and a 16-bits display uses 5 modules and 9×5 +1=46 relays. But this is not coherent with the front panel  dials (in hexadecimal).

    Yet another possibility is to keep the same 10-relays circuit but replace the LEDs with diode+Glühbirnchen, and one Glühbirnchen per digit is used... This gets us rid of the diode arrays and 7 segments tubes but would lose a lot of the appeal.

    Hexadecimal is hard !

  • Circuit and schematics

    Yann Guidon / YGDES07/23/2017 at 18:48 0 comments

    As mentioned before, the module is not complicated at all :

    1. A decoder translates the binary code into a 1-out-of-16 bus
    2. A diode matrix translates the 16 wires into a 7-wires bus with arbitrary combinations.
    3. A Numitron displays the state of these 7 wires.

    The display and diode matrix are not rocket science anymore. The last log shows the chosen Д9Б diodes use Germanium and we can measure the voltage drop: one segment in series with a conducting diode, all under 3V, draws about 17mA and gives a diode drop of approx. 0.5V (+/-10%) so the segment runs at about 2.5V. Current draw is about 140mA when all 8 segments are on. Luminosity is a bit better at 3.3V.

    This means that the module's supply would be in the 3V-3.3V range. This is pretty convenient :-)

    However, driving these diodes is a different story. I will refer you to the log 18. Instruction display panel where I explore some demultipexing strategies with relays. The big difference between individual diodes and the Numitron is the common pin for all the filaments... so it is not possible to use the X-Y method...

    This means that a 1-to-16 demux will use 15 relays, not counting the 3 buffers, which is out of proportion !

    However it is possible to use another method that reverses the current flow with one relay. One 1-to-8 demux is then needed (7 relays), plus 2 buffers and the inverter : 10 relays is more reasonable.

    An octal decoder uses even fewer relays and half of the diodes so we can start with this case : One polarity selector, then a 1-to-4 demux contains 1+2 relays.

    The polarity selector and the root MUX of the tree use one relay each, that can be directly driven by the input signal. However the 2 branches of the tree need special care. That's the "not so obvious part"...

    • Put the two coils in parallel to preserve the signal voltage : this is simple and the signal voltage is preserved but the impedance is halved and this could lead to further troubles in the driving circuit.
    • Put the coils in series to preserve the driving current and the voltage is doubled, which is another problem.  One solution is to add series resistors to the single coils but this wastes even more energy and the voltage increase might create other kinds of problems for the driving circuit. One alternative to the resistors is to add a second relay to the polarity switch that would allow the module to work with only 3V. This adds one precious and energy-hungry relay...
    • The safer solution is to add one relay as amplifier. It might work in CCPBRL mode, which requires an additional 100µF capacitor... It would be kinder on the power supply rails than hard switching and all the bounces. So it's 5 relays and one capacitor.

    Here is one option with a buffer relay:

    The hexadecimal case is almost exactly like the octal case, but there is a MUX8 instead of a MUX4, with the additional 4 relays. A buffer relay is required to adjust the input impedance... We now use 5+5=10 relays !

    There is however a little "enhancement" to do here :-)

    The RES15 start to conduct at about 2V so 2.2V should do, right ? 2.2V×3=6.6V, which is exactly the voltage between the + and - supply rails. So we can switch 3 coils with one relay. Borrowing from previous research (10. More balanced trees !), a little reorganisation gives use the new diagram...

    With this method, the driver circuits are better balanced !

    However the circuit is missing some protection against spikes across the coils. Diodes and capacitors would be required... CCPBRL woud be a solution.


    I tested the relays and made sure they switch under 2V, so 2.2V is good. Here is the "interface" for the binary input, along with the 4 "front-facing" relays.

    6 more relays to go !

    The decoder works !

    Getting the address bits right was not difficult, I had to swap a few wires. But the video shows the rotary selector functioning with the LED lighting in the correct order.

    Power draw: 

    • Code = 0 => 0A (except for the LED)
    • Code = F => -0.37A, +0.12A

    The buttons...

    Read more »

  • Physical configuration

    Yann Guidon / YGDES07/23/2017 at 17:07 0 comments

    So far the module is pretty simple :

    • 10 relays decode the 4 digits
    • Tens of iodes encode one signal out of 16 into a 7-wires bus
    • The numitron displays the 7 digits.

    I want to display 16 bits as 4 hexadecimal numbers. That makes 40 relays. An octal version would use half the number of diodes and relays, but requires one more digit (plus one semi-decoded digit), 5×5=25 relays instead of 40 is cheaper...

    But what dictates the form factor is the size of the IV9 and the RES15.

    The diameters are both approx. 10mm so the relays can hide behind the Numitron tube.

    The tube's height is approximately twice the RES15's height so we can stack 2 relays to decrease the module's length.

    The problem is the thickness of the diode array... The diodes should be soldered horizontally, which will use several millimeters.

    The other concern is how to solder the tube and relays : a pair of dedicated vertical PCBs will work well but this increases the complexity. The pins can be bent as well and only one PCB is required but shorts could happen between wires...

    One can estimate the size of the diodes array with the prototype I built for the #Discrete YASEP   at 38. My first diode matrix

    16 outputs have a length of 2.56×16=41mm, which is approximately the height of the module. The 7 outputs must fit in the approx. 60mm of the module's length, and the diodes must be soldered horizontally, meaning they use more than 2.54mm.

    For the diodes, I could easily use the 1N4148 that I have amassed lately but... that's not very Russian. Instead I'll pick parts from the #Clockwork germanium  project : D9B and D311 seem to fit the requirements.

    • D311 (Д311) : Russian Germanium Diodes, 30V 40mA
    • D9B (Д9Б): Germanium, 10V 40mA 

    40mA is twice the maximum segment current so even if the ratings are inflated, we're safe :-)

    Д311 is larger and thicker, it requires more leg room so the Д9Б is chosen. I can fit one Д9Б in 10mm, the  Д311 needs 15mm...

    In the end, if we exclude the PCB, all the parts will be Russian :-D


  • References

    Yann Guidon / YGDES07/23/2017 at 15:24 0 comments

    Who doesn't like Numitrons ?

    I discovered them on eBay only recently and I wonder how or why I never heard about them before.

    I saw something like a Nixie display in an old James Bond movie and I wondered what it was but what's the point when you can get bags of LED-based 7-segments displays for pocket money today ?

    Numitrons are now easily available from USA and Eastern Europe thanks to the magic of Globalisation. I have explained why I chose these in another log (20. Display technology again) but never bothered researching them outside of eBay. This page should contain references and pages related to incandescent 7-segments displays :-) contains a short article that appeared in March 1970 issue of Popular Electronics magazine.

    Kenneth's experiments from 2011 at loves them too, as shown by the number of relevant articles :

    Of course you can search for "IV-9" "IV9" "Numitron" on eBay and others but be careful because these often get confused with Nixies and VFDs. loves Numitrons too! Look at all those clocks :-)

    (more links are welcome)



  • Prior art

    Yann Guidon / YGDES07/23/2017 at 14:29 0 comments

    When I started creating this page, I had a good idea of what I wanted to do : a form factor like the vintage Lixie module I found on eBay the other day (now gone)

    So there would be one Numitron standing and the relays behind it. By a strange and fortunate coincidence, the diameter of the RES15 is only slightly larger than the IV9 so the module can be quite thin :-)

    Unfortunately, there would be a quite large diodes array (16×7) and it doesn't fit naturally. So I thought about a vertical PCB for the purpose of encoding.

    The irony of the modern web sites is their suggestion features : just like I found the above Lixie module "by chance" I found a "vintage Nixie module" with almost the same form factor as I thought :

    I had never seen that before, I have no idea where it comes from/what device used it, and it appears just a day after I was considering making myself one (but without integrated circuits). Anyway it helps me illustrate the project, its relevance ("it was done before so I was not totally mistaken") and prior art. It feels like vindication.

    Thanks to the seller toptec2007 from Israel for making these pictures :-)

View all 10 project logs

Enjoy this project?



Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates