Nixie Clock With Vacuum-tube Power Supply – Part 2

In Part 1 I covered the genesis of this project and my first stab at a vacuum tube power supply.

One of the things I wanted to do was provide all of the power for the clock from the transformer. My regular clock circuit only needs 5V, so I figured I could get this from the 6V3 filament winding using a bridge rectifier and a 5V voltage regulator. This is only really possible because the 6CA4 rectifier tube uses an indirectly heated cathode. That is to say, the heater is not connected to the output pins, so it can be at any potential with respect to the output voltage. In particular, it means we can tie one side of the heater to the common ‘ground’ or 0V rail. The HV ‘ground’ is the center tap of the secondary:

Circuit, showing heater

Some of you may have figured that that is cutting it a bit too fine. A bridge rectifier using regular diodes could drop around 1.4V to 2V depending on the current draw. The voltage regulator would drop another 2V, so it needs a steady 7V in. So if the smoothing were perfectly efficient, we would go from 8.9V (6.3*1.414) to possibly less than 7V. Simulation with LTSpice shows this is optimistic.

Another alternative would be to use Schottky diodes for the bridge, and simulation show this would probably work. However, I decided to use a simple voltage multiplier on the 6V3 AC which gives me better smoothing for fewer components. So the whole circuit now looks like this:

Circuit with 5V section

You’ll note that this diagram is slightly different. I have cut the direct connection between pin 4 of T1 and the 0V rail of the HV section. Instead I have explicitly shown each section (the voltage doubler, HV and 5V sections) with a separate connection to ground. This is because, as it is, I am only using one half of the voltage doubler. This is just one diode drop, rather than two (as with the a full-wave bridge), so the voltage is enough for the 7805 regulator. If I wanted to use the full doubled voltage, I could just move the voltage-doubler ground to the point labelled A instead.

This is all very well, but it turns out to have a couple of draw-backs, as will become apparent later.

Current Limiter

The HV power supply is unregulated – which is to say, as you draw more current, the voltage starts to sag. This is because the forward voltage drop of a rectifier tube increases as the current increases. To get around this I decided I would use a small constant-current circuit to drive my Nixie tubes, in place of the usual current-limiting resistor. This basically works by connecting the source of a PMOS transistor to HV via a resistor (Rset) and then biasing the gate a fixed voltage below HV (Vgs) like so:

This is the equation for the resistor, given the desired current (Id):

Rset=VgsVgs(on)Id

Where Vgs(on) is the voltage drop between the source and the gate, which you can get from the transfer characteristics chart of the data sheet. A rough estimate would the typical gate threshold voltage.

Of course, the trick is to keep Vgs constant, even though HV is varying. To this end, I used a small isolated DC-DC converter to boost 5V to 12V and then attach it to the circuit as shown above. The gate takes virtually no current, so the boost converter can be very small. Using a voltage divider let’s us get to 10V and using a small potentiometer in one leg of the voltage divider allows us to adjust the voltage to get precisely the current we want.

Following some advice I received on the Neonixie google group, the actual circuit is a little more complicated, to provide some protection to the MOSFET. I designed some boards to act as sockets for the nixie tubes that included all this circuitry:

At this point I had decided I would ultimately want to use all of this to build a clock that would feature the large NL7037 tubes I had been collecting. I had been meaning to build a clock with an industrial feel to it to match the look of these tubes, and I felt that this would be the one. Finally here is a shot of a test I made using one of the tubes and adapters:

Nixie Clock With Vacuum-tube Power Supply – Part 1

About 7 months ago, I watched a video by glasslinger about adding a nixie tube display to a vintage radio. This was something I had wanted to do for a while, but I didn’t know how to read the tuned frequency from the radio. There were many interesting parts to the video (I recommend you watch it), but one of the things I learned was that vacuum tube radios that had tranformers, actually generated voltages with those transformers that were high enough to drive Nixies.

I spent a little while trying to find a radio with an input transformer like that, and in the meantime, I started researching vacuum tube power-supply design. That was when I finally realized that these things were still being made for guitar (and HiFi, but especially guitar) amplifiers. So you could actually buy new transformers and new vacuum tubes and new chokes that you could use in a new power supply. That is when I got really serious about this.

At this point, two sites influenced my initial design. The first was ‘Fun With Tubes’, which had several simple designs. The second was ‘DIY Audio Projects’. which went in to much greater depth about tube selection and circuit calculations. In particular, the latter had a nice chart showing the voltage drop that different vacuum rectifier tubes had. Some of them were quite startling – for example the 5Y3, used by the first site, had a voltage drop of almost 45 volts for a plate current of 100mA, compared with only 15V for the 6CA4. What’s more, the 6CA4 is still in production.

The DIY Audio projects site showed a long series of manual calculations to determine properties of that simple un-regulated power supply. I entered these in a spreadsheet to make life easier, however, I later found a little application called psud2 (power supply designer 2) that did the same thing using a simulator and a few values from the data sheets. The important thing being that the maximum 6CA4 plate current (which is on a cold start) does not exceed the maximum allowed plate current on the data sheet.

Taking a hint from the DIY Audio Projects page, I decided to go with a one-stage choke filter to smooth the output of the rectifier tube. Confusingly (for me) everyone refers to this as the ‘input filter’. I guess because it is the input to whatever comes after this stage – usually an amplifier. So this is what I ended up with (from dsud2):

Unregulated vacuum tube power supply

Obviously(?) this is just the output stage. On the input side is 125V 60Hz, a 1A slow blow fuse in the hot line and a neon indicator across hot and neutral, so I could tell when it was on.

Something I omitted was a resistor to drain the capacitors when power was removed. Those capacitors can hold a charge for a long time. I soon added one. Experience is wonderful thing.

Here is a chart from psud2 showing the expected output:

Power supply simulation

The next stage was to select some actual components and bread-board it. I ended up going with a 269BX transformer from Hammond, a 156R choke (also from Hammond) and a new 6CA4 from JJ Electronics. All the rest are just suitably spec’d parts from DigiKey and a bunch of terminal strips, screws, fuses, switches, fuse holders etc. from my local electronics store.

I would show you a picture of the breadboard, but I will save that for part 2, when I discuss how to deal with the potential for voltage sag.

ESP32: A solution looking for a problem?

The ESP32 was released a few years ago, and was immediately touted as an ‘ESP8266 killer’. What happened?

I’ve been using the ESP8285 in my clocks for a while now. It is an ESP8266 with 1M flash built-in. This not only means you have everything you need on one chip, but it also frees up a couple of GPIOs. I’ve been very happy with it and with the Arduino core that is implemented on top of it. It has done everything I have asked of it. I find it odd that it is virtually impossible to find any commercial boards that use it.

So the ESP32, with dual cores, higher speed and more GPIOs should be better right? Well the Espressif code, which is layered on top of FreeRTOS, is still fairly unstable. The Arduino core, just got to 1.0.

However, I figured it was time to seriously start playing with it and I chose the ESP32 Pico dev kit, because, like the ESP8285, it has flash on-chip.

The first thing I did was try and play sounds on it – I wanted to use the I2S interface, which seems like a big distinguishing feature of this chip. After a while I managed to find a good library that works on the Arduino core, and includes support for the ESP32 – ESP8266Audio (by the way, that guy is prolific, check out his other projects). It worked very well.

Next I wanted to add a WiFi Manager to manage setting up a captive portal. It turns out that the one I use on the ESP8285 (AsyncWiFiManager) is also just about the only one that really supports the ESP32.

When I tried to connect my iPhone to the AP, the ESP32 kept crashing. It turns out that this was a problem in esp-idf, which was recently fixed, but the fix wasn’t included in the Arduino core 1.0.1. A few days after I submitted a bug report, it was included in master, so I switched to using master.

Playing sounds is great, but of course, it all starts to fall apart as I try to do more with the platform. I wanted to move beyond just playing sounds so I dove right in and created several FreeRTOS tasks to do things asynchronously.

A quick aside: The arduino core is implemented on top of FreeRTOS tasks. So for example, loop() is in its own task.

Naturally the audio playback instantly started glitching, so I moved everything back into loop() and played around a little. I have a sound effect playing and I have AsyncWifiManager also checking for AP access. As soon as I access the AP, the sound starts to glitch. Basically, the library I am using needs to take over full time to feed I2S.

OK, so we have two cores. By default the arduino core runs on core 1 and the RF stack runs on core 0. So I switch AsyncWifiManager to core 0 and leave the sound player on core 1. But it still glitches whenever I access the AP. Why? Who knows? Probably there are lower-level components that are making assumptions about which core they should be running on.

Now I am sure that I could write a sound library, that has input and output queues, that cause a task to yield if they are full and that are drained under interrupts. Maybe there are even some hardware modules I could use that have built-in queues so I don’t have to worry about timing on the ESP32. But at that point, why bother? I’m not doing this to improve sounds streaming on the ESP32. I just want to play some sounds on my clocks.

Is the ESP32 a case of a solution looking for a problem? Did they just throw everything they thought might be fun at it? Capacitive touch? You got it. I2S? You got it. Dual core? You got it. Why does the software support seem like so much of an afterthought? Kudos to me-no-dev and the Arduino core implemented on top if esp-idf, but Espressif really need to be more on top of this.

Divergence Meter Battery Mod

The divergence meter I built can be powered by an internal 9V battery. However, a regular 9V battery doesn’t last very long (between 10 and 45 minutes). LiPo 9V batteries last much longer – over 3 hours, though they aren’t really 9V as they are actually two regular LiPo batteries in series – so the actual voltage is at most 8V, dropping to 6V just before the power runs out.

However, that still means that you have to open the clock up to change the battery when it is out of power. A better alternative would be to include a power-sharing charger inside the case, so that the LiPo will charge up when the clock is plugged back into the power. A quick(ish) search of the internet turned up this 9V LiPo charger module, which is small enough to fit inside the case along with the battery. So that gave me the charger, but I needed to add the load-sharing part. A load-sharing charger will use some of the input power (input from the wall adapter) to charge up the battery, while the clock runs off the rest. It also needs to disconnect the battery from the clock as long as the clock is plugged in to the wall adapter, but instantly connect the battery to the clock as soon as it is unplugged from the wall adapter. This is actually pretty easy, and my circuit is basically the one described here.

Here is the basic circuit:

Load Sharing Charger

The load-sharing part is inside the dashed box. Here is what my implementation of this looks like. I used a surface-mount MOSFET, because I happened to have one already:

Load Sharer

This works as follows:

  1. As long as there is power on Vin, the P-channel MOSFET (Q1) will be turned off, preventing any power from being discharged from the battery and also preventing any power from Vin being directly applied to the positive terminal of the battery. Power from Vin will flow to V+ through the Schottky diode (D1).
  2. While there is power on Vin, the TP5100 module will also be able to charge the battery, if necessary.
  3. As soon as power is removed from Vin, the 100K resistor (R1) will pull Vin to ground, which will turn on the MOSFET allowing current to flow from the battery to V+.
  4. This is why the Schottky diode (D1) is needed. It stops the gate of the MOSFET being pulled high again by the battery, which would turn it off, etc. The only reason that D1 is a Schottky diode, is to minimize the voltage drop from Vin to V+.
  5. The LED (D2) shows when the battery is being charged.

I checked it all out before stuffing it into the case:

Load Sharing Charger

To integrate this with the clock, you have to cut the track from the Vin pin on the barrel connector (power in), then wire that to the Vin connector on the battery charger. Then wire V+ from the load-sharing board to the other side of the track that you cut – just find an easy place on the board to do that.

To re-use the existing switch, remove the optional diode (if you installed it) and just wire the switch up as shown in the circuit diagram above.

Finally, if you choose to use the charging indicator LED, you will have to drill a hole in the case somewhere to install it.

Here it is in the case:

Charger in the Case

View Showing LED Placement

I took a time-lapse video of the clock running off battery. As you can see, it lasts a little over three hours:

Complete Divergence Meter

I’ve been building a Divergence Meter, as featured in Steins;Gate, using Tom Titor’s excellent design.

Perfboard

If you’ve read any of my other posts about this project, you’ll know that I hit some obstacles. First I blew up the HV power supply and the PIC chip, then the perfboard I had, had logos printed on both sides. Well I replaced both the power supply and the PIC chip. As for the perfboard, I couldn’t find any that was the right size, the right color and logo-free. In the end I followed a suggestion and spray-painted it. Here’s a before and after shot:

Before and after spray painting

That particular piece wasn’t cut very well, so I used it for practice. To cut the perfboard, I used a technique recommended by a carpenter friend. If you use a saw it is hard to get a clean edge, so I used a router instead. Here is the setup I used:

Router Jig

Case

And that is pretty much where I stopped for a while – I still hadn’t figured out how I was going to build the case. I played around with prototypes made out styrene sheet, and while I was doing that I realized that the hex standoffs used to hold the top to the case screwed easily into the plastruct rod I was using to brace the corners – it has a round hollow core:

Plastruct rod test 1

And then it suddenly occurred to me that I could drill pilot holes in the rod, and use self-tapping screws to fix the sides of the case to the rod. I tested it on some aluminum sheet I had, and it worked really well. So now all I had to do was CAD it up and get it made by Big Blue Saw. Here is a shot of the end result:

Case from the back

Drilled plastruct and some of the case parts.

I had also decided that the PCBs inside the case needed some good support, so I used 11/16″ plastic standoffs to mount the main board to the case. It needs to be this length to accommodate a 9V battery. By my calculations that meant I also had to increase the height of the case slightly, so I did.

Construction

Now I knew everything would go together I could get on with the rest of the construction. Here are a few progress shots:

Gluing the dummy components

Soldering in the tubes

For some extra veracity, I used a busted 7441 chip and a busted К155ИД1 chip for the dummy ICs:

ITT 7441 dummy IC

К155ИД1 dummy IC

I discovered that the gloopy super glue I was using (aka CA Adhesive), really didn’t want to cure. Tom had mentioned that it would be useful to have some accelerant, and I guess it is. Googling CA glue accelerator shows it is just a mild alkaline solution that neutralizes the acid used in the glue, to slow down curing. I found this article about how to make your own, so I did and it worked great.

Software

The programmer in me couldn’t leave the code alone, so I modified it a little. There are two main changes:

  1. The wordline modes will automatically go on to the next wordline after about 9s, unless a button is pressed.
  2. In clock mode, it will display a random world line twice an hour.

I uploaded the source and a hex file to GitHub.

Finished Clock

Finally, here’s a shot of the finished clock:

World Line Display

Divergence Meter Setbacks

Firstly, I only ordered one push-button instead of two. Annoying, but not a big deal.

Secondly, the perfboard had logos printed all over it. No chemical would get them off. Sanding didn’t get them off. When I used a dremel, I discovered the pigment went deep into the substrate. I figured that maybe this was just the particular supplier that DigiKey was using, so I ordered some straight from the public BOM on Mouser. It is exactly the same. So I am down $34 on perfboard I can’t use.

Perfboard
Perfboard + Logos

I have ordered yet another perfboard for $23 from DigiKey from a different manufacturer. Hopefully this one won’t be covered in logos. So $57 on perfboard alone. So far!

Thirdly, I missed that the boards on OSH Park need an additional diode near the battery switch. Fortunately I had a suitable Schottky diode lying around.

Fourthly, when I was adjusting the HV it mysteriously stopped working, and the PIC started to get hot. I guess I shorted the HV to the PIC, though I don’t recall doing so. So I am down the HV and the PIC. The HV part is $14. The shipping is $10. So I am now down an extra $60 with little to show for it. Plus I had to unsolder the HV. Fun times!

Since there is little else I can do at this point, I built a prototype case with the styrene sheet. This is so I can test the positioning of the openings on the case before I get some metal ones fabbed.

Anyway, here are the boards, with a gaping hole where the power supply should be 🙁

Divergence Meter

Divergence Meter Kickoff

Its time to actually start building this divergence meter:

Divergence Meter Kickoff

I ordered the parts from Digikey, which have arrived. I chose to program the PIC16F628A myself, by which I mean upload the hex file from Tom Titor. Partly this is because I figure I might modify the program at some point. So I bought a cheap pickit 3 copy off ebay.

I’ve also been re-familiarizing myself with SolidEdge 2D as I would like to get the case pieces fabricated, so I will need an accurate CAD model, and I have used SolidEdge in previous projects.

In addition I have been mulling over how to actually build the case. Ideally I would like to make my own posts with a square cross-section and tap them for screws – I really don’t like the idea of gluing things together – however that is way beyond me at the moment. I also toyed with the idea of using styrene sheets  that are used in modelling. So in the end I bought samples of various materials and practiced gluing things together:

Practice pieces for the case

The top sheet is aluminum. The bottom sheet is steel. The left hand blob of glue is JB Kwik, the right hand blob is JB Putty. I glued some aluminum rod to the sheets with an overhang so I could try and pull them off. I roughed up everything with a dremel tool before hand and cleaned it all up with Isopropyl alcohol. In the end I was surprised how strong the bond made by the JB Kwik was, so I am reasonably confident that I can glue standoffs to cut sheets to make the case.

I also glued square rod to the styrene sheets. The bond here was actually pretty good, but they peeled off if I flexed the sheet. When I examined the styrene, it had been softened by the cement. I will probably use the styrene sheets to make some prototypes from my drawings to check that I got all the measurements right.

Now I need to start some soldering.

Controlling an ITS1A Thyratron

In an earlier post, I explored how to light up an ITS1A Thyratron – this is an old seven-segment display device from the former USSR:

Glowing ITS1A

It requires some exotic voltages: -250V, +40V, +100V and logic-level signals for segment control. A high logic level can be anything between +0.4V and +4V, so a +3.3V device is perfect. The other voltages can be obtained from a 50V boost converter driven with a +5V input. I used Cockroft-Walton ladders to get +100V and -250V and a voltage divider to get the 40V. These are the pins on the tube:

Physical pin descriptions of the ITS1A

This is a description of the pins:

ITS1A pin descriptions

What I didn’t manage to do at the time was figure out how to select which segments get displayed. In my tests, they all lit up. Basically, if the segments are pulled to zero volts, they will be on. If the are raised above +0.4V, they will be off. But only if the other pins are held at the right voltages in the right sequence. Later on I found that I could set the segment voltages, then pull anode one and anode two low for a short period, then high again, then the displayed segments would latch on according to their voltages at the time the anodes were pulled low. The segments will stay that way, regardless of what is done to them, until the anodes are briefly pulled low again.

I suspected that grid two also played a role here, but I was unable to figure it out. Then I came across this archive, which had a circuit diagram and some PIC assembler. In that circuit, the +40V is obtained with a zener which is just connected to ground, with no pull up to keep the voltage at the zener voltage.

The function of the second grid was revealed looking at the assembler source code. Basically, to set a display you start with the anodes at their set voltages and the second grid at zero volts. Then you briefly pull the anodes to 0V. Then you set the voltages of the segments, then you briefly pull the second grid up above +0.4V:

Signal sequence for setting the segments of an ITS1A

When the 2nd anode is at 100V, current also flows into the 1st anode (the 40V one) and the zener clamps the voltage to 40V. When the 2nd anode is pulled to 0V, current direction of the 1st anode is reversed, and so it is pulled to 0V too. This is what the datasheet says:

The current of the grids and the 1st anode in the non-conducting state has a positive direction, in the conducting state the direction of the current is changed.

So here is a circuit diagram:

Multiplexed operation of two ITS1A tubes

The tubes are multiplexed by setting the value of the 2nd grid individually for each tube. If the second grid on a specific tube is not pulled above +0.4V, it’s display won’t change. Note that the reset pulse only has to happen once, then you can set the display of all the tubes, one at a time by setting the segment voltages and toggling the 2nd grid on the tube(s) you want to change. Repeat the sequence the next time the display changes.

At first I was slightly annoyed that I had ITS1A tubes, which have a maximum logic level of +4.0V, v. The ITS1B tube has a maximum logic level of +5V. But it is actually a good match for modern controllers, with a +3.3V logic level. I used the trusty Wemos D1 mini Pro to test out the circuit above.

Divergence Meter

Divergence Meter

I recently acquired some PCBs for building a Divergence Meter as described on Tom Titor’s site. I’ve been meaning to build one of these for a long time.

I struggled for quite a while trying to figure out how to build the case. I didn’t like the idea of using glue as a structural element, and I thought it ought to be possible to source something other than hex standoffs to form the corner posts. I did manage to find a source for square standoffs – though not in small quantities, but that still left the problem of using glue. Ideally I wanted to use actual screws, but that would have meant tapping some small metal rods. I was getting nowhere, so I went to visit my local model shop and chatted with them about various options. I came away with some styrene sheet, some square plastruct rod and some plastruct angle. I figured I could prototype a case and see if anything came to me. I also bought some steel sheet and some aluminum sheet to see how good the glue approach was.

As I messed around with prototypes, I discovered that #4 screws (such as the screw part of the hex standoffs used on the perfboard) screw into the plastruct rod perfectly, so I went to my local hardware store and picked up the smallest self-tapping screws they had – some #2 – 1/4″ screws, drilled pilot holes in the plastruct rod and tried fixing them to some of the metal sheet I had bought. It gripped really well, so I decided that I would CAD up some parts for a case and get them made at Big Blue Saw.

I also decided that I would support the PCBs on plastic hex standoffs, they needed to be well fixed to the case. 11/16″ standoffs work for the main board, with 10mm standoffs between the main board and the display board. For the screws that screw into the bottom of the plastruct rod, I used #4-40X1/8. I have node idea where I bought them – I can’t find them in my ebay, DigiKey or Mouser orders. They need to be short to clear the self-tapping screws.

I have just finished putting together a case using the parts made by Big Blue Saw, and it works great. I had 10 sets made as each set is then a lot cheaper, so I have many left over I currently have two left that I would be willing to sell for $59 + shipping.

Divergence Meter case design

The following pictures show the case in various stages of construction. This first one shows the plastruct rods and angles. The pilot holes in the rods are 1/16″, the holes in the angle are 7/64″, and not shown – but the holes for the hex standoffs in the perfboard are at least 1/8″.

Drilled plastruct and some of the case parts.

Big Blue Saw offer several finishes. The one below is raw. The edges are very rough, and there are marks left over from the water cutter, so I ordered the rest in basic finish instead.

All the case parts in raw finish

Corner detail, showing how it all fits together

In the photograph below, I have yet to paint the plastruct angle – I was just checking that everything went together.

Front view

Back view

Bottom view

The stencil that Tom provides is slightly different for this case. The holes for the hex standoffs are back where they were with his build #1. In the PDF below I also show cutouts for the tubes with a diameter of 14mm. This is a standard size for things like Forstner bits and it gives you some room for error in drilling these holes!

Perfboard Stencil

Trials and Tribulations

This was supposed to be a quick build of one of my one-tube-clocks, with a few tweaks to try and improve some of the features. This is what an earlier version looked like:

All my other builds had taken around 3 hours, and the worst that went wrong was a few dry joints. This build was very different:

  1. I had three attempts at getting the solder paste applied – that is three complete wipes and restarts.  It kept smudging, or leaking onto adjacent pads. This was an omen.
  2. Finally I had something I could work with, but I had to touch up some teeny tiny pads on the CP2102N footprint – a QFN28. They were right next to a trace I had cut. I got solder-paste in the cut. I had to get it out, otherwise it would short the two halves of the trace back together. Cue some very fiddly cleaning using a magnifier.
  3. Finally got everything in place, and transferred the board to my hotplate. It was almost cooked and I realized I had forgotten a component, so I had to take it off and let it cool and then add the missing component.
  4. When transferring the board back to the hotplate, I spilled the whole lot on the floor! Fortunately most stayed put, but I had to spend quite a bit of time inspecting things to make sure it was OK, moving some items back into place, and replacing others that had vanished into the carpet.
  5. Second cooking. Looking good.
  6. First test: Plug it into a USB port on my computer. No beeping sound. Nada. I check voltages on the board in a few places, they are all fine, what is going on? I decide to try another device in the same USB port. Nothing. Now this is worrying: had I blown the port? Then I remembered I had the laptop connected to bluetooth audio. The receiver was switched off. So I disconnected bluetooth and plugged my second device into the USB port to check the port, nice noise, port was fine. Now I’m thinking that my new board is probably fine too. Plug that in, no noise. Nada. So, check the soldering. Looks fine, but I touch up the pins on the USB/UART chip that handle the USB connections and now I get the happy sounds from the laptop, so I solder on some indicator LEDs and some connectors.
  7. Next test: Program the ESP8285 on the board. No go. Laptop can’t talk to the ESP8285. I spent quite a while trying to trouble-shoot this. I touched up the pins on the USB/UART chip that interface to the ESP8285. No difference. I wondered if maybe the second cooking had broken the ESP. It looked like there was a blister on it. However I figured I should check some of the signals on the ESP, so I start counting clockwise from pin 1. When I got to the pin that should have been GPIO0, something didn’t seem right. It shouldn’t have been on that side of the board. Then I realized: I had soldered the chip on the wrong way! Arghhhhhh. I was resigned to just salvaging what components I could on the board and throwing it away, but I was tempted to heat the board back up again, pull the ESP and solder a new one on. To do that I would have to unsolder those connectors and LEDs. Not a trivial task. Then it occurred to me: I have a heat gun (not one specific to PCB work, just a regular old heatgun like you might use for stripping paint). I figured I might as well see if I could use it to de-solder the ESP, and amazingly it worked. I fitted a new chip in the right orientation and used the heat gun to solder it. I tried to program it again, and it worked! I can connect to my web server running on the ESP and mess with the controls.
  8. So I plug in a Nixie tube adapter and nothing. Oh come on! I start checking voltages and there is no 5V. 5V is used for two things on this board: Lighting up the LEDs and driving the HV switch. I quickly narrow it down to a dry joint on a diode from the USB power line to my 5V circuit.
  9. OK. Plug in the nixie adapter again and it lights up. We are in business! Wait, though. The LEDs on the adapter aren’t lighting up. This is getting ridiculous (maybe that should be more ridiculous). These aren’t just regular LEDs, they are NeoPixels. I just checked the power above, so I look at the signal lines. They go through a 3V3 to 5V level converter. The signal was non-existant. It was 0V on the 3V3 side and weirdly it was 5V on the 5V side. This is not an inverting level converter, so it should have been 0V too. Except it shouldn’t be 0V at all, it should have a PWM signal on it. I check the connections from the ESP to the level converter, it is all good. There is a pull-up resistor in that line, so something was driving it to zero. All the signals to the HV chip go through the same level converter, and they were working just fine. Finally, though, I decide it has to be the level converter, because 0V should not become 5V. Time to de-solder that chip (another QFN-type package) and replace it.
  10. Plug in the Nixie adapter again, and now I have LEDs. But now the Nixie tube is blank! It has to be the level converter again, so I start tracing signals and yes, I have a dry(ish) joint on one of the pins. I touch that up, plug in the adapter and, finally, everything works.

So, eight hours later and I’m actually quite please that I managed to trouble-shoot this. Plus I learned how to do re-work using a hot air gun (BTW, the gun does have various temperature and ‘ferocity’ settings).

I have yet to clean up though: