Workshop is closed 01566 334335

utMax – a GUI for uTracer 3 / 6



The main features are

  • Linux and Windows versions
  • Large full screen plots with multiple tabs for different views
  • Characterization using plate, screen and control grid voltages as simultaneous independent variables.
  • Add more plot export formats including “pdf”.
  • Direct generation of SPICE models
  • Cleaner interface
  • Auto setting of sweep parameters based on user selection of valve type
  • Display of pinout to ease setting up of uTracer
  • Open Source
  • User extensible database of valve parameters and pinouts
  • Easy Calibration
  • uTracer6 support
  • Saves calibration data to uTracer processor (firmware upgrade needed)
  • Markers on plot to allow you to read spot values
  • Tab based for multiple plot views
  • High resolution plots up to full screen size
  • utracer6 support from v2.3
  • Fast capture mode
  • Anode and Screen voltage compensation (aka double sampling).
  • Greatly improved accuracy at low currents (firmware upgrade needed)

There are also other goodies like real time readout LCDs while sweeping, a quick test and a triode plot mode that tests a pentode connected as a triode. Testing of dual triodes and dual diodes is now possible.

Has the ability to scale the grid one voltage to allow an attenuator in the grid one circuit to improve the accuracy at low grid voltages.

Also supports an arbitrary higher current range.

uTracer Firmware Upgrade Processor

More information can be found here.

A Pin Switch Matrix Board

Sniffs the comms to automatically configure the pin to function mapping. More information can be found here.

Download and Installation


These are the utMax installation files for Windows and Linux. No further updates to the 32 bit version (2.32) are planned as a 64 bit version is now current.

Current version is 3.07a. Change details are toward the bottom of the page.

uTmax has an installer for Windows. It will create a desktop and a start menu shortcut so you can launch the app from either one. Windows gives a spurious warning about protecting your PC. You can safely ignore this warning and proceed with the installation. It happens as the installer is not signed. The reason it’s not signed it that it requires a rather expensive annual fee for a code signing certificate.

For linux version, unzip the folder retaining the directory structure in your home folder. Execute from the terminal by typing ./uTmax. Hint: if you cannot connect check that your username is added to the dialout group.

Initial Setup

After installation you need to edit a line in the cal.txt file. This can be found in the folder uTmax_files in your home folder. The line “firmware=” should be 100 if you have Roland Dekker’s processor chip or 200 otherwise.

Also set the resistor and maximum grid values for your tracer under utilities->calibration

There is a checkbox under options to enable uTracer6 mode. Status of that feature is ‘alpha’.

If you read nothing further, read this: If you hover the cursor over most items in the GUI, you will get a pop-up explanation of it’s purpose.

Once running, click on utilities->debug to bring up the debug dialog. Use the drop down box to select the COM port for your tracer. Now hit “Ping” to see if communication is working.

Hitting Read ADC will display the current various tracer voltages.

If you lose connection to the port, the GUI will automatically retry it.


Now we have to tell the app about your specific tracer hardware. To do this bring up the calibration dialog (utilities->calibration). Now press “Reset” to bring up the default values.

  • For the RaVal field, enter the value of the anode voltage sensing resistor in ohms.
  • In VaMax enter the maximum voltage of your tracer.
  • IaSense and IsSense put the value of the current sense resistors.
  • Finally, enter the maximum value of your grid voltage and hit “save”.

“Erase” deletes the calibration data stored on the chip.

“Save” saves the data to the chip and the cal.txt file.

“Done” will close the dialog and discard and changes in the edit boxes i.e. Raval and so on.

Now, we are ready to start the calibration proper. Close the window with “X” or hit “Done”.

Calibration dialog

The current and voltage sense resistors. The value of these must be entered into the calibration dialog above.

Start the calibration wizard (utilities->calibration wizard).

Follow the prompts and in no time your tracer will be fully calibrated. If you are using the new firmware, the calibration data will be saved to the chip as well as into a cal.txt file.

The cal.txt file can be found in the C:\users\yourUserName\uTmax_files folder. Also in this folder, you will see the tube library file, data.csv file. You can edit the tube library in a spreadsheet if you wish but you can also manage it from within the uTmax app.

You are now ready to start curve tracing.

Let’s Go Tracing!

You probably have a 12AX7 ( ECC83) handy so try it out.  Pick 12AX7-ECC83 from the Tube Selector drop down. It will display the pin connections to guide you in setting those up.  The sweep parameter boxes will be pre-filled with the settings from the tube library so all you have to do it hit “Start”.   Over a few seconds you will see the green heater progress bar increase to maximum and then the app will wait by the time specified in the “Secs” box for the heaters to reach temperature. Next the sweep begins. The LCD’s will show the measurements as they are made.

If you click on  tab “1” you will have one plot showing the curve in real time. When the sweep is completed you will have something like this.

ecc83 plot1
More and Bigger Plots!

By clicking on the “New” tab you can add another plot. try it and see.  The three drop down boxes at the top left pick the  parameter that is used for the axes: X, Y left and Y right respectively.  So, if you pick Va, Ia(a) and Ia(b) you will have the plot line for both (a) and (b) section anode currents. Flip back to tab “1” and it still shows just Ia(a). Try the different choices to see what you can do.  Some will plot data from the mathematical model that has been fitted to the data. In order to see gm , Ra and mu plots you must first fit a model to the data. There is more about that process later.

Don’t forget you can drag the window size to fit the entire screen if you wish for more detail.

For now, don’t worry about the other controls “Triode Data”, “Select Curve” and Group by Color” as these only have meaning for pentodes or beam tetrodes.

Reading Points on the Plots

You’ve probably already noticed that as you hover over the plot, a marker appears that displays the values along the plot line. Move the mouse parallel to the X axis and the marker will follow.  If you left click on a different line the marker will jump to that line and a right click will freeze or unfreeze the marker.

Fun with Axes

Pointing to an axis with the cursor and holding the left button pans the axis. Rolling the mouse wheel or equivalent motion on a track pad zooms the axis.  Use one of the drop down axis lists to select a different parameter and the scale will be reset.

Saving your Plots

Utilities->Save plot will save all your tabbed plots as image files. If you select “Auto File Number” from the main “controls” tab,  the images will all be saved to the folder file name specified on the main “Controls” tab under “Save”. Otherwise you will be prompted for a folder and file name. The plot tab number is appended to the file name(s).

Pentodes and Beam Tetrodes

Go to the “controls” tab and pick something you have handy from the tube selector drop down, say an EL84. Notice that in the second drop down box an appropriate model is specified in this case “Koren Pentode”. Set up the pin connections and start the sweep as before.  If you watch the LCDs you might notice that the screen and plate voltage are the same for a complete set of grid voltages.  Thus the EL84 is being tested as a triode. This always happens if you select a pentode or beam tetrode mode. Once the triode bit is done the sweep proceeds with a usual plate voltage set followed by the grid voltage set and lastly the screen voltage set.

When you go to the “1” plot tab it will look like this.

EL84 Tab 1

This is rather a busy and confusing plot showing all the pentode curves. You can tidy the plot by selecting “group by color”. This makes all plot lines for a screen voltage have the same color and so makes it much easier to see what is going on.  Another way to tidy the chart is to use the “select curve” counter.  This will restrict the display to just one screen voltage.   “0” means display all screen voltages. Try it and see. You can still group by color if you wish. For example you can make the chart look like this:

EL84-1 Curve 1

Each plot tab can hold a different view of the data.

Now, on the third ( right Y axis) drop down select “Ia Model”. The plate current calculated from the model will be overlaid so you can compare the model with the measured data.  The model allows you to do some useful analysis. Try this. On the Y right select “gm(a)” and for Y left pick “off”.  You will now have a plot of gm over the operating range.

Now, for the next thing to try out, set Y left to Ia(b)/g2 and Y right to Ia(b)/g2 model. You are comparing the measured screen current with the model screen current. This brings us neatly to the next section.

One last thing before we move on, if you check the “Triode Data” box you will see the performance of the tube in triode mode.

Want a Model?

A mathematical model is fitted to the data, but there are several to chose from. The available models are from Norman Koren and Derk Reefman who have both published more details if you want to read more about them, and I advise that you do so.

Switch to the controls tab and change the model from “Koren Pentode” to “Derk Pentode”. See the LCDs are updated with useful tube parameters.  Go back to your plot 1 tab. You will notice that the screen current model is much closer to reality using this model.

You can try “Pentode II” to see if you get a better fit.   You might see a warning message “Info: model fit is poor. Try a different model or change your sweep settings“. This usually just means that the fit didn’t converge within a certain number of attempts.  There is a limit on the number of trials to avoid the process taking too long.   It’s just a warning and is usually is of little consequence. 

EL84-1 pentode II model screen current

Try changing the sweep parameters and tracing a fresh set of curves to see if you can get better convergence. On the controls tab, there is a field for plot power dissipation.  If the tube is dissipating more than the amount specified in this box then that data point is ignored when fitting the model. This might help you produce a better model.

The model can be saved in SPICE format, see Utilities->save Spice model

What, more controls?

On the controls tab, under the main sweep settings there is  checkbox Va/g2 = Va1. This forces the screen voltage to follow the plate voltage and is useful for tracing dual diodes, dual triodes or pentodes in triode mode.   There is another group of settings, currently greyed out, that are used for quick tests, checking  “quick test” will enable them.

Quick Test

Quick test settings

The quick test is designed to test a tube against it’s data sheet specifications.  As a tube ages the cathode interface resistance rises and the gm falls. So, testing for low gm is a way of detecting worn tubes.  The measurement is done by wiggling the voltages around the specified center point by the percentage given in the % column to the right of the center column. The gm column specifies the datasheet transconductance.  The % column to the right of gm specifies the allowed tolerance before the tube is considered a failure.  I generally don’t fail tubes if the gm comes out a bit high, only when low.

If the quick test is not selected and a normal comprehensive sweep is done, then these values are used to display the gm calculated from the derived model at the center values given.

The “Bias I” column specifies  the setting at which to measure the current. This is handy for tube matching.

The “Bias V” is used to find the grid one voltage that give the specified anode current, anode and screen voltages.

Shorts Testing

There is an option for shorts testing, currently at the alpha test stage so not generally released.

This checks all combinations of electrodes, first at 50V, then if no issues are found, the test is repeated at 300V. Any current measured that is under 20uA is ignored as spurious. A measurement over 200uA shows red in the LCD’s. The Matrix board is required for this test.

Video of shorts test. A problem is indicated between grid two and the cathode.


The current version is more recent so the following description is a little out of date. From V2.21 was added b-spline smooth curve fitting and tentative support for the uTracer6. I don’t have a uTracer6 so it’s untested. Any feedback you can provide will be appreciated. Click the letter icon at the top for a contact form .

The options dialog allows you to pick the various operating modes.

The Firmware version shows 1.00 for uTracer 3 or 6 (set in cal.txt file). The utmax firmware is read it supply the version info. From V3 you can upgrade the firmware using the “Utilities Menu”.

Tube List Sort Order: The tube database display order can be switched between ‘alphabetic’, ‘most frequently used’ and ‘last used’ making it easier to find the data you want.

Va and Vg Scale are used when you have external dividers on the anode and grid usually for better accuracy at low ranges.

Fast Sweep: The “Fast Sweep” check box caused the samples to be done by changing the anode voltage least frequently. The avoids the slow repeated discharges and can significantly speed up curve tracing.

V Compensation: This causes the tracer to make a first measurement and then do a second one with the voltages adjusted to get closer to the desired sample point. This can be useful at high currents.

Pin Switch: this box enables communication to the Matrix board. Only use if you have a Matrix board installed.

uTracer6: Check if you are using the GUI with a uTracer6

Enable I Ranges: This tells the GUI that you have the mod for switching different current sense resistors installed.

Theme Browser: In the program folder can be found several color themes generally using a css styling scheme call qss. You can make your own using one of the supplies ones as a guide. The syntax is documented here.

Create your own appearance using the customizable themes.

Plot Options

Group by color is the ability to color the plot lines so that every one is different or you can group them by screen grid voltage which is easier to read.

The curves generated by the SPICE models are shown as smooth curves. Note the excellent fit of the SPICE model generated.

From V2.21 you can display B-Spline smoothed plots

Stranger Things

Boost Voltage Drift

Something that must have been happening for years on my uTracer caught my attention the other day whilst doing a calibration. I set a target voltage test of 400V with a hold of twenty seconds or so. I noticed that the voltage would gradually fall over that time by about 2 or 3 volts. What was going on here? I checked the sense voltage on the PIC and it was rock steady so the problem had to be the 470K resistor in the HV sensing network. I had used a carbon film one there simply because I had one to hand.

No resistor is perfect but there are two problems that will affect the accuracy in this situation. One is the thermal co-efficient, this changes the resistance as it heats and is the reason for the effect I was seeing.

The thermal co-efficient of carbon film resistor could be around 500ppm/C so a 10C rise will change the resistance by 0.5%, about what I was seeing. 400V across a 470K resistor is 0.34 watts. In normal operation the measurement the voltage is not at maximum so making the average power dissipation lower so this effect in not likely to be causing a problem. However, the uTracer does produce heat and ambient temperature varies so there is merit on choosing a better resistor. Metal film types are better at about 75ppm/C and metal foil will get you to 1ppm/C.

You can improve the performance of the potential divider network if both resistors have the same thermal coefficient and are at the same temperature. This is hard to to in practice as one heats up much faster than the other so excellent thermal conductivity is required to make it effective

Another issue is the voltage co-efficient which causes the resistance to change with applied voltage. 10ppm/V is not unrealistic for carbon film and for a 400V change this amounts to 0.4%. Not huge but certainly significant. Again metal film and foil will serve you better.

You will a similar error when testing a resistor at high power dissipation. The resistor heats ans the measured current will drop. For example I used a 1K 2W metal film resistor and tested at 400V. With averaging set to 32 the current increased by 1.5% over the course of 20 measurements at the same voltage.

Grid Voltage Errors

From the very early days when I got my uTracer I have noticed that low grid voltages were not very accurate. To this end I added calibration corrections for 1V, 4V as well as 40V and Roland followed me on this approach. The thinking behind this was that the PWM signal was inherently inaccurate due to the waveform distortion from the rise and fall times.

When I added the Calibration Wizard the 0.5V range correction turned out to be rather poor. To figure out the problem three different tracers were compared by plotting the specified grid voltage with the wanted. This was the result.

Actual grid voltage vs desired.

You can see that there are two problems. One is the grid voltage is limited on the low end and the other is that there is a voltage offset that varies between units. The linearity is very good so knocking down the earlier idea.

The offset voltage has many sources.

  • The minimum low output voltage of the PIC,
  • The NE5534 filter chip – – offset and temperature drift (small effect)
  • The 741 opamp – offset and temperature drift
  • The tolerance of the two resistors that sense the cathode voltage.

We can tackle these issues by adding a trimmer to adjust the offset voltage. The 741 has pins dedicated for just the purpose. The trimmer can be soldered directly to the bottom of he PCB on the pins of the chip. The drift is most easily dealt with by using a different low drift opamp. I plan to test some candidates soon and see how they perform. In the meantime the 741 will suffice,

The saturation voltage that is limiting the lowest voltage is a bit harder. I first thought of using a P channel JFET. Turns out they are a dying breed. MOSFETs are a possibility but are surprisingly expensive even for low voltage low current types in a TO92 package plus the gate capacitance might lead to stability problems.

The limiting comes from the saturation voltage of the PNP transistors used on the output of the grid voltage circuit.

Fortunately there is a zero cost solution. What is needed it to feed the emitters of the PNP current mirror (T6 and T7) from a higher voltage. The cathode is about 0.5V lower than the supply due to the drop across the protection diode D11. We can disconnect the emitters from the cathode supply and connect to the main positive supply instead.

Mod to address the minimum grid voltage issue

This understanding of the problem led to a different way of calculating the grid voltage corrections. Previously there were corrections for -0.5V, -1V, -4V and -40V. The 1,4, and 40 ranges worked properly but 0.5V became more inaccurate as the desired voltage was closer to zero. A simple gain and offset correction was the solution and only requires two measurements instead of four during calibration. One nice feature is the approach will fix the below 0.5V range issue even without the modifications just described. But, if you don’t do them, you will still have the minimum voltage issue.

Maximum Grid Voltage Issue

The uTracer3 nominal grid voltage is stated to be 50V. This comes from the 5V logic supply multiplied by the gain of the grid amplifier of 10 i.e. 5v x 10 = 50V. But the supply will not be exactly 5V nor will the gain be always ten. This makes the maximum more like 48.5V for all uTracer3’s.

Increase Grid Voltage Range to -60V

With some simple changes you can increase the grid voltage from -50V to 60V. The drawing below shows the changes. There are four resistors changed and one capacitor added. This changes the gain of that stage from 10 ( 5V in 50V out) to 12 to give a possible 60V out. To allow some margin the practical limit is -57V, Don’t forget to tell uTmax that the range is 60V.

Earlier I mentioned using lower a drift opamp instead of the 741. Since I had some OPA277’s around I replaced the 741 with it. This eliminated the drift but the offset trim needs to me done differently. The result with the offset trim, new opamp, 57V range looks like this:

Low drift grid opamp

-100V Grid Supply

Here is an corrected schematic of the one on Ronald’s site for a 100V grid range. V3.03 firmware will support this. I have my reservations over his choice of FET as it has a breakdown voltage of 100V, which allowing for transient overshoots seems marginal. I was able to get -90V out so it does seem to work but an IRF9640 in a TO220 package might be a better choice. Unless you use an external -85V power supply you will need either our or Roland’s latest firmware.

Faster Discharge

From firmware V3.04k you do have the option of a faster sweep which avoids the repeated discharging of the anode boost capacitor. However you can also make a big difference to the speed by changing the discharge circuit in the following way.

Fast discharge circuit

Switchable Current Ranges

Firmware V3.07 together with uTmax V3.07a introduces a new feature to improve the accuracy on lower currents.

A 600mA uTracer3 plus uses an 8.2 ohm current sense resistor. Low currents, such as you will have with typical preamp tube, will result in very small voltages across that sense resistor. For example 5mA gives 24.6mV. This is amplified by the programmable gain amplifiers to give a voltage big enough for the processor’s 5V range ADC to work with. The problem is this also amplifies the noise so makes for less accurate measurements.

A solution would be to use a bigger sense resistor, say 180 ohm which would give you a 27mA range. But, you still need the higher range sometimes. The switched current range feature adds a control pin to the processor which is used to turn a FET on that add a resistor in parallel with the low current range resistor. Two FETs are needed to control the anode and screen resistors. The picture below shows this arrangement. The FETs should have a low Rds(on) and the ones shown are inexpensive. For my version I used two IRF1404’s that I happened to have to hand. The inexpensive RC4558 opamp uses the +/15V supplies ( not shown ) and is an easy way to give an excellent drive range that will ensure the lowest Rds(on) for a wide selection of FETs and also that the FET will not turn on for large voltages across the current sense resistor. Note the FET source pin is connected to the negative of the boost capacitor, not ground.

There are some extra things that need to be done in uTmax to set things up. First enable the ranges in the options dialog.

The enter the values of the low and high current range resistors in the calibration dialog.

Finally, tell the GUI to use the feature for specific tubes by checking the “Low Range” box.

uTmax GUI Change History

* 3.07a
     * Fix setup command that was using incorrect flag for current range
* 3.07
     *  Adds low/ high current ranges
     *  Improved Matrix update
     *  Fixed missing current limit "off" setting in options dialog dropdown
     *  Fixed heater hold not working
* 3.06
     *  When plotting and Va=Vs, Vs values are now used on the x axis when plotting Ia(b)
     *  Fix warning >50000 steps when Va=Vs
     *  Improved precision in dr_optimization ( used doubles instead of floats)
     *  Changed SPICE model to output in scientific notation for better precision
     * 3.05e
     *  Add calibration defaults for utracer 6
     * 3.05d
     *  Allow 20V heater maximum
     * 3.05c Fix issue with plot scaling and zooming
     *  Fix issue with comments missing from debug log
     *  Fix issue with being unable to turn off the debug log
     *  Added further directions to Calibration Wizard initial prompts
     *  Increase allowed heater range to 20V for fuTracer. This is a temporary work around for the 19V limitation of uTracer3
* 3.05b Calibration dialog will accept any sign for max grid voltage
     * 3.05a Fixed update check for linux
     *       Cal Wiz background colour
     * 3.05
     * 3.04
     *  e:Added pin switch board support
     *    For a quick test the delta grid voltage is constrained to be multiples of PWM LSB's to make
     *    the Gm calculation more accurate.
     *    Shortened  thread timer to make things faster
     *    Changed data save dialog to have an expanding layout.
     *    Added feature to determine grid one volts for given Ia.
     *  f: Added fast capture sweep mode.
     *     Changed min width of plot combo boxes to make text more legible
     *     Fix issue with I(a) model and I(b) model not showing with Vg on x-axis
     *  g: check for equal adjacent control points in spline fit.
     *     fix y1 axis labels
     *     fix model not displaying
     *     add Bias voltge for (b) section of dual triode in quick test
     * h: Auto plot type saved to cal.txt
     *    Fixed current state of fast checkbox incorrect in options dialog
     * i: Fixed issue with Options dialog not expanding as expected
     *    Fixed COM status label not attached to layout
     *    Fixed NONE model Vs=Va not handled
     *    Set thread timer to 150mS
     *    LCD appearance can now be controlled from the stylesheet
     *	  Marks for the point can now be specified  in the stylesheet
     * j: Modified heater progress bar to have 10% increments
     *    Set thread timer to 50mS
     *    Fixed plot scatter mark densisty issue
     *    Added LCD number warning color to styesheet
     * k: Changed the way comms work to make capture faster and reduce timer thread overhead
     *    Added the Bias Vg to the saved data files
     *    Tidied up the saved data
     *    Fixed issue with mismatched data sizes in plot
     *    Changed status messages as they was too busy with the increased speed
     *    Added timer info to status message
     *    Spline curve calculation now handles a smaller number of data points
     * l: Va/ Vs voltage compensation feature added "Double Sample"
     * m: Minor tidy up of LCD readings for pentodes
     *    Added fitting of data for quicktest to improve accuracy
     *    Removed Ra and mu quicktest results for pentodes and triodes
     *    as unreliable due to limitations of tracer hardware.
     * n: Fixed: plot files sometimes created before plots rendered
     *    Added: update availability message
     * o: Removed negative sign from Vg bias LCD display
     * p: Moved FW update command to utilies menu from options dialog
     *    Add Matrix board FW update feature
     *    Slowed down the serial output to support uTracer6
     *    Disabled abort on current limit in quick test bias V determination
     *    Changed heater preheat to 5 seconds
     *   p4: Moved RXCONTINUE earlier in RxData() for efficiency
     *   p5: Fixed ut6 grid overflow
     *       Fixed ut6 positve grid encoding (note positive grid extensoin not yet supported)
     *   p6: CalWizard: Fixed loop on hitting "Next" on the first window
     *       Added orange COM status indication.
     *   p7: Changed utracer character delay to 15mS
     *   p8: Added some tooltips to the debug dialog
     *   p9: Fixed time delay isse Cal wizard
     *  Vg overflow fixed:Vg Pwm code cannot exceed 0xffc else 12 bit mode will fail
     * grid control overflow fixed
     * grid control PWM underflow issue fixed
     * 64 bit version
     *  Change: During plotting the power limit on the controls tab is used.
     *  Fixed: When using Vg on the x-axis, legend entires were duplicated.
     *  Change: The power limit checkbox is now implemented when Vg is on the x-axis
     * Fixed incorrect text items on plot legend
     *  First release with utracer6 support
     *  Fixed legend has y2 axis values even when not using y2 axis
     *  Dual diode quick test LCD display for (b) section currents
     *  plot not being updated while sweeping
     *  Changed "heater"=  option behavior:
     *       If "heater"=0 heater, comms is for the uTracer.
     *       If "heater">0 an Ext Heater check box appears on the options dialog 
     *       and the heater code is linear. It also has the top byte set to "e"
     *       is scaled 1023 * (requested heater voltage)/ "heater"
     * ExtHtr check box is hidden if "heater=0"
* 2.21g
     *  Tube sort order combo box was not updated when opening the option dialog
     *  Added test for nan in KVB estimate
     *  data.csv was being written with an invaled value for Va=Vs check box state.
     * 2.21f
     *  Added Va=Vs column to data.csv
     * 2.21e
     *  Modified way the last segment of a plot line it handled to avoid truncating plots on over current
* 2.21d
     *  Cosmetic tweaks to options dialog
     *  Added a checkbox to plot tabs to allow the points over the power limit to be hidden
     *  Added a column to the results data file to hold the current and power limit status
     * 2.21c
     *  Fixed crash when loading a second tube data file which is different first data file's tube model
     *  Fixed crash in b-spline
     *  Added knots to start and end of b-spline range
     *  Add ignore flag to data pool for over current and over power
     * 2.21b
     *  Option "heater=" is now saved to cal file
     *  For uTracer3 compatibility, if Firmware=100 (or =1) in cal file then the chip is not interrogated for the firmware version
     * 2.21a
     *  User can add heater=n to cal file.
     *   If n=0 (or line is missing) then it utmax or ut3 heater firmware compatible. Otherwise the
     *   10 bit heater field is scaled by n.
     *   e.g. n =10 means that 0x3ff is output when a 10V heater is specified.
* 2.21
     *  uTracer 6 checkbox was not being updated on options dialog
     *  Fixed bug in grid voltage calculation introduced with uTracer6 changes
     *  Invalidate model status when creating optimizer.
     *  Added positive grid voltage handling for uTracer6
     * 2.20g1
     *  Added tests for invalid tube model index to prevent crash
     * 2.20g
     *  Added support for uTracer6
     *  Changed interpolation from cubic spline to B-spline (cubic) smoothing
     * 2.20f
     *  Removed firmware update command for fw 2.99 or lower
     *  Fixed QMessageBox styles as they  were not inheriting the parent style
     *  Changed interpolation from polynomial to cubic spline
     *  Removed firmware update command for fw 2.99 or lower
     *  Fixed QMessageBox styles as they  were not inheriting the parent style
     *  Changed interpolation from polynomial to cubic spline
     * 2.20e
     *  Changed main timer to 250mS to make measurements faster.
     *  Fixed bug in Vs value calculation
     *  Fixed divide by zero in Ra calculation
     *  Added polynomial based curve fitter
     *  Added polynomial order spinbox to plot tabs
     *  Modified labels and layout of plot tab control to make room for the new 'order' spinbox
     *  Modified options dialog layout for polymomial order value to be added (at a later date)
     * 2.20d
     *  Added yaxis2 mouse drag and zoom
     *  Changed LCD overflow from "-" to "OL"
     * 2.20c
     *  Fixed range check issue with Vsupp in cal wiz
     *  Fixed range check issue with Vs in cal wiz
     *  Set focus to measurement entry box in cal wiz
     * 2.20b
     *  Put next step flag for cal wiz into RxData() to avoid heatbeat ping conflict causing wiz lockout.
     * 2.20a
     *  Fixed: on dual triode quick test, gm(b) was shown incorrectly
     *  Changed low screen and anode voltage during cal wiz
     * 2.20
     *  12 bit grid for 2.03+: puts the two LSBs at top of 16 bit command so that new 12 bit firmware
     *  is still compatible with 10 bit commands.
     *  Heater not reset during ping
     *  LCDs increased to four digits
     * 2.19j
     *  Changes order of LCDs for dual triodes
     * 2.19i
     *  Changed: If a port could not be opened on start than processing would go no further.
     *  Made COM status label wide 2.19h
     *  Fixed: LCD current color always red
     *  Cal Dialog: Changed calibration range to 1
     *  Cal Dialog: Changed non-grid cal sliders to have 1/10th range.
     *  Cal wizard: Widened valid range for Va and Vs on the low end
     *  Cal wizard: Fixed failure to retry if Va out of bounds
     *  At end of sweep an Apply command is used to lower the HV voltage. This removes the need for
     *  the HV discharge timeout.
     *  All calibration parameters now use floats
     *  Chip cal parameters are integer analogs of the cal parameters x1000
     *  Changed grid calibration to use offset and slope: A re-calibration is required for this version
     *  Numerous enhancements to COM port handling to detect port closure and auto reopen.
     *  Added port status to front page
     *  Added port rediscovery to debug dialog
     * 2.19g
     *  Cal wizard: fixed bug in Vn and Vsupp
     *  Debug logging now ignores received "<" when expecting calibration data from chip
     * 2.19f
     * 2.19e
     *  Cal wizard: reset all cal corrections after prev or error
     *  Calibration now using round() rather than truncation
     * 2.19d
     *  Fixed missing "next" button after current cal fail
     *  Fixed reset grid corrections after fail
     * 2.19c
     *  Calibration range changed from 0.3 to 0.4.  This means a re-calibration is required for this version
     *  Changed to 10K calibration resistor
     *  Changed valid ranges for calibration.
     *  Used timer for final discharge wait in cal wiz
     * 2.19
     *  Fixed: marker text position wrong when zooming and scrolling axes
     *  Fixed: marker text position wrong when frozen and curve is changed
     *  Tidied options dialog layout
     *  Fixed Cal wiz Va, Vs and sanity checking
     *  Fixed Cal wiz Ia, &  Is calibration
     *  Added Cal wiz previous button
     *  Changed debug enable/disable to suit new firmware
     *  Added firmware version to options dialog
     * 2.17a
     *  Added chip cal data erase
     *  Added outline calibration wizard
     *  Added axis scroll and zoom
     *  Fixed: missing Rx data from debug dialog
     *  Added calibration wizard
     *  Made all dialogs delete on close
     * 2.16a
     *  Fixed incorrect length when sending cal data
     *  Add checksum and checking on chip cal data r/w
     *  Changed scale on IaRsense and IsRsense from x 10 to x100
     * 2.15a
     * 2.14a
     *  Addressed visibly of markers when starting a new plot
     * 2.13a
     *  Added right click to freeze marker
     *  Reverted y axis range to an integer of max current
     *  Fixed tube type and model not updated when reading saved data file
     *  Fixed infinite loop in UpdateTitle()
     * 2.12a
     *  Va X axis range is a multiple of 10
     *  Ia & Is Y axis range is a multiple of 5
     *  Validity checking added to LCDs to prevent "A" and "F" being displayed
     *  Fixed incorrect label on marker text when y2 axis in use
     *  Added limit to curve number spinbox
     * 2.11a
     *  Fixed issue in modelling TriodeInit() where Ia=0 was not handled
     *  Changed marker text position offset to be fixed rather than proportional
     *  Changed Ra(a), Ra(b) and gm axis labels to place units first
     *  Fixed marker text position wrong after a plot setting change e.g. curve number
     * 2.10a
     *  Fixed when clicking "start" the wrong in the tube list was replaced do leading to a missing entry and a duplicate.
     *  Fixed incorrect sort order displayed on startup
     *  Fixed missing entries in legend
     *  Fixed plot not being marked invalid when hitting start after a completed sweep
     *  Fixed markers were still visible when plot changed from valid to invalid.
     * 2.09a
     *  Fixed auto file name on startup
     *  Fixed flickering doubling of length of legend while plotting
     *  Fixed no markers if no model is selected
     * 2.08a
     * Disabled markers if a plot is incomplete
     * Fixed tube list display synchronization with internal database and data.csv file
     * Fixed tube delete of first item in selector
     * 2.07a
     *  Fixed: issues with LCD not displaying when number would not fit specified number of digits
     *  Fixed: missing / incorrect labels on LCDs
     *  Increase discharge time to 45 to reduce timeout messages
     *  Change timeout message to give a better hint for resolution
     *  Added: pre fill tube name for file save for data or spice model
     *  Fixed: tube list sort order reverts to alpha after adding a tube
     *  Removed Vg2 on x axis plot as not very useful
     *  Tube list sort order on startup now matches setting cal.txt
     *  Smooth model lines when Vg on x axis
     *  Fixed: Heater voltage set to max if a positive grid voltage specified
     *  Added: OFF option to left yaxis
     *  Fixed Vg on x axis range
     *  Fixed incorrect marker position when VG on xaxis
     * 2.06a
     *  fixed model results show for pentode section when triode plot selected
     *  fixed crash when model changed to none and yaxis showing model values
     *  fixed incorrect SPICE file output
     *  added auto path for SPICE file save dialog.
     *  crashes when plotting without full dataset
     *  enable all controls after a timeout
     * 2.05a
     *  Changed linearized parameters display for pentodes to show Va, Vs, Vg, gm and Ia.
     *  fixed infinite loop on adding a tube
     *  moved marker to upper layer
     *  tweaked positioning of marker text
     *  on plots with Vg on x-axis fixed limit of 16 colors
     *  on plots with Vg on x-axis fixed legend display show Yaxis2 info
     *  on plots with Vg on x-axis fixed marker text position TBD: y scale is slighly incorrect
     *  Fix crash when switch xaxis type ( Va/Vg2/Vg) and then back again due to invalid showIndexValue
     *  estimates of alpha_s and beta incorrect: reduced size for convergenace and added overrides for DERK_E alpha_a and beta
     *  Data file not saved when editing parameters for existing type
     *  When attaching marker text to lines using yAaxis2, the y axis was scaled incorrectly
     *  X left limit margin for marker text changed to -0.05 from -0.1.
     *  Fixed flickering of legend when loading a theme.
     *  Added smooth curves for model
     *  Fixed incorrect marker text for y2axis
     *  Fixed yaxis2 missing color
     * 2.04a
     *  plotLineWidth added to qss
     *  added group by color feature
     *  LCD digits set to 3
     *  Quick test file format changed to prevent error when trying to load it.
     *  Add auto mu KV/V scale option for pentodes
     * 2.03a
     *  Vg display gets two decimal places
     *  Fix plot line 0 marker not working
     *  Added debug/ pretty print (Off hopefully) to debug log off checkbox
     * 2.02a
     *  fixed greying for dual triode and dual diodes
     *  crash when mouseover on empty plot
     *  I limit setting out by /100
     * 2.01a
     *  Modeller: Fixed typos in TriodeInit() math
     *  Modeller: Handle case where Is=0 for KG2 estimate
     *  moved plot value markers to an overlay layer
     * 2.00a 12 bit Vg?,
     *  calibration data on chip,
     *  plot line colors from qss file:
     *      plotLegendTextColor=#ccc
     *      plotSHowValColor=#ff0
     *      plotLineColor0=#00f up to plotLineColor49
     *  calibration reset,
     *  hardware settings now in gui
     *  MRU, LU, Alpha tube sort options
     *  Read data file auto path
     *  More status messages

32 bit version source code: download You will need to install QT5.

64 bit version source code download. Needs QT6

In the uTmax folder, delete the file (if it exists). In QT creator you will need to define your project builds this is what I use:

QT Creator project settings ( release ).