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, not symmetrical)
* 10 РЭС15 minirelays, one IV9 display tube and 59 D9K (germanium diodes)
* Decodes 4 bits, from 0 to F
* Input impedance : one relay coil per bit

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
  • D9K 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.

The logs explain the methods I've invented to keep the parts count low. Some optimisations are pretty neat !

Ideally, like the #DYPLED, I should be able to design and build individual modules for my own use 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". Who would not want to play with the buttons ?

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 less preliminary layout
10. A little idea to revive...
11. Another mistake
12. Second valid prototype
13. A new ROM layout generation script
14. Beyond the prototypes
15. PCB
16. The demonstrator goes portable !


Updated script that generates the final ROM configuration (swapping 5 and 6)

HyperText Markup Language (HTML) - 2.74 kB - 10/30/2017 at 17:20



A script that searches which input permutation saves the most diodes

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


  • The demonstrator goes portable !

    Yann Guidon / YGDES11/29/2017 at 13:29 0 comments

    I'm currently traveling in France and showing the module to other hackers and others !

    However I've always used the demo board with my lab PSU so I need a cordless, portable power supply. I designed the module to accommodate 6V, or 4× alcaline cells, instead of 2×3.3V.

    Just before leaving, I had a bad surprise : the circuit draws so much that AA batteries simply can't supply enough current. The device almost shuts down when buttons are pressed. With the lab PSU, I saw that it wouldn't work well at 5.9 or 5.8V and the AA batteries are too weak...

    I arrived in Toulouse to visit @VDagrain, who loves that kind of hack, so I bought four C-type batteries, and visited "Le comptoir du Languedoc" to buy a suitable holder. Then, we visited the Artilect hacklab to solder that together.

    (thanks Alexis !)

    There was a bad contact in the battery holder but now it works nicely ! It's more bulky but the stunned gaze of people is really worth it :-D

    Thank you Wanda ;-)


  • PCB

    Yann Guidon / YGDES11/06/2017 at 02:02 0 comments

    The layout looks great ! I'm preparing it for fabrication, but I want to add some extras in the batch, for a side-project...

  • Beyond the prototypes

    Yann Guidon / YGDES11/02/2017 at 15:08 0 comments

    Now that the principles are working and well understood, it's time to make a PCB.

    The diode ROM uses a bit more space than I initially thought but I managed to keep it pretty compact. However the issue occurs in the other dimension: the diodes add about 3mm of thickness to the stack.

    The IV9's diameter is 10.5mm while the RES15 is 11mm. Add the diodes, the PCB thickness and the unavoidable clearance to prevent shorting the diodes' leads to the next board's RES15 metallic can, and the board pitch is 18mm. So each IV9 is separated by a 8mm gap...

    Anyway I've decided to move forward and try to run a first layout through @oshpark  (Thanks guys !) before I build a few dozens of modules. I might have to buy a few more thousands of diodes though :-D

    The PCB is just a bit larger than 8cm and a little over 7cm high. Enjoy the view !

    The approach is a bit modified : either the module is used "standalone", or the outputs can be broken out to a more conventional display panel (with a smaller pitch for a nice aspect). The connector shapes are temporary but should work nicely for the first attemps.

    I am excited to receive the first purple boards :-D Notice however that I have routed the board as if I had to etch it myself or with DIY, lousy resolution, processes. Just like "in the old good days" of perchlo baths with dubious concentration and temperature. I'm ashamed to ask @oshpark to build these because I wanted to use their high quality process... But I couldn't wait this time.

  • A new ROM layout generation script

    Yann Guidon / YGDES10/30/2017 at 17:28 0 comments

    I have just uploaded convo7seg_09.html which computes the ROM configuration from the updated digits.

    As I wrote in a previous log, the lines 5 and 6 must be swapped, or the output is totally messy. The swap must be integrated in the initial array, not at the line drivers level. This new script confirms the configuration that is implemented in the 2nd prototype.

    Here is the output :

    ...v^v.v.....v  0/8
    ......^..v^.^.  X4
    ..............  1/9  <- empty line :-)
    ^.^.....^..v..  X2
    .....v....^.^.  2/A
    .v..^..v.....v  X4
    ......^..v....  3/b
    ...........v..  4/C
    .v^v..^.....^.  X4
    ^....v.v.....v  5(6)/E
    ....^....v....  X2
    .v.v..^v^.^...  6(5)/d
    ^............v  X4
    ..^........v^.  7/F
    Total: 45 diodes

  • Second valid prototype

    Yann Guidon / YGDES10/26/2017 at 01:30 0 comments

    Prototype #2 works !

    Time to learn French ;-)

    Please note that this is a "demonstration unit" that uses a slightly different driving topology because the LED require higher voltages. The LED are only intended to show off (aesthetics matter !) and the series units will use the intended "dumb" germanium diodes.

    The design of the diode array is now "right", the concept is validated and CAD should begin... "soonish".

  • Another mistake

    Yann Guidon / YGDES10/24/2017 at 23:52 2 comments

    Do you remember this picture from the last log ?

    OK and now, let's think again about how the diode matrix was optimised.
    The short version is : the digits 5, 6, D and E are bork.

    This means that my carefully optimised diode matrix is invalid. I have to swap 6 and 5 before optimising to preserve coherence...

    The swapped array:
    ^ ^v^v^v^v^v^v (0, 8)
    ^ ^   ^ ^v^v^  (1, 9)
    ^v^ ^v v^ ^v^v (2, A)
    ^v^ ^ ^v^v v v (3, B)
     v^v^ ^  v v^  (4, C)
    ^v^v^v^v v  ^v (6, E) \ swap !
    ^v v^ ^v^v^  v (5, D) /
    ^ ^ ^    v v^v (7, F)
    The new optimised array :
       v^v v     v (0, 8)
          ^  v^ ^     X4
    ^ ^     ^  v      X2
         v    ^ ^  (2, A)
     v  ^  v     v    X4
          ^  v     (3, B)
               v   (4, C)   (2 ^ to remove)*
     v^v  ^     ^     X4   (2 ^ to add on A and F)
    ^    v v     v (6, E)  (1 v to add and 2 ^ to remove, swap with 5)
        ^    v        X2    (unchanged)
     v v  ^v^ ^    (5, D)  (1 v to remove and 2 ^ to add)
    ^            v    X4 (2 ^ to remove)
      ^        v^  (7, F)   (2 ^ to add, reusing those of 4)

    So I have to rewire quite a few diodes... Half of them in fact ! Well, not really, because some of the changes are rather symmetrical. For example, the X2 line is not changed and instead of removing LEDs from line 4,  the LEDs can be rewired to line 7.

    This gives you an idea of the rework that awaits me:

  • 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).

View all 16 project logs

Enjoy this project?



Artem Kashkanov wrote 01/22/2018 at 07:48 point

Wow! So cool indicator, but I couldn't find enough number of them with acceptable price :(  So have to use VF ones.

Interesting schema of BitToSeg encoder - you used two-polar power supply to reduce number of parts?

  Are you sure? yes | no

Yann Guidon / YGDES wrote 01/22/2018 at 07:58 point

Hi ! eBay prices for Numitrons range in the 3-4 USD per piece. Yes it's a bit expensive, more than VFD, but VFD is more complicated due to high voltages.

I have used a symmetrical power supply (2×3.3V) because it's already available in the system I build. I have also made one version with +6V single supply and that uses one more relay to reverse the polarity.

What would you like to do with them ?

  Are you sure? yes | no

Artem Kashkanov wrote 01/22/2018 at 08:08 point

Same as with IV6 - use them for showing current data/address bus states, instruction retired count, etc.

Yeah, +48V requires some additional adjustment logic for controlling them. And you also need 1.2V for heating...

As for the price - I got dekatrons 5USD each... and IV6 for free, so I have no choice but to use VFD ;)

  Are you sure? yes | no

Just4Fun wrote 10/30/2017 at 17:50 point


  Are you sure? yes | no

Yann Guidon / YGDES wrote 11/01/2017 at 21:44 point

And it's only the beginning :-)

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

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