I have created a small utility (for Windows, Win32) to find out optimal resistor
values for two common purposes, finding out optimal values for voltage divider
resistors and for finding optimal values for parallel/series resistors for given
target resistance. This was my first real windows application that made sense
written with C++ (using MFC), so excuse me if (read: when) you find any bugs.
The usage should be quite self-explanatory. Just experiment with the inputs
and you'll see the effect. The target division factor is the ratio of the
output voltage to the input voltage, so it must be greater than 0 and less
than 1. The division factor can be given as decimal number (use "." as a
decimal separator) or in form of division, something like "1.25/3". The
division factor can be also calculated with two auxliary calculators,
decibel attenuator or voltage regulator calculator.
Series resistance is like it says, sum of upper and lower resistors. Series
resistance is also the input resistance of the divider. Likewise, parallel
resistance is upper and lower resistors connected in parallel, i.e. output
resistance of the divider. These constraints may be individually enabled
using the checkboxes.
Source resistance is the resistance in series with the voltage source which
feeds the divider, i.e. is in series with the upper resistor. Likewise, load
resistance is the resistance what loads the divider, i.e. is connected in
parallel to the lower resistor. Setting either or both to zero, ignores the
If there are more than 1 resistor selected in divider optimization, then the
connection between them can be chosen, in parallel or in series. Upper or lower
resistor connections can be chosen separately.
Although the program shows SI-prefixes in the outputs and in the resistor
value list, they can't be currently used in the limit inputs. Maybe some time in
Individual resistors can be excluded from the search space by just un-checking
the desired checkboxes in the "Available resistor
values"-box. Finally, the resistor values are loaded from *.ser files.
This makes it possible to add more sets of resistors for specialized
- Fixed a bug with "max number of results", now count correctly reduces instead of showing the old results
- Resistor values are now easier to read due to addition of the SI-prefixes
- Optimization elapsed time is now shown at the end
- Lot of internal restructuring (for the better, I hope)
- Added option to specify load and source resistances when optimizing dividers.
- Added option to optimize series of resistors. Old "Parallel optimizer" tab renamed to "Target resistance optimizer".
- Added multithreading, so it is now possible to abort a long optimization instead of killing the application with task manager etc.
- Added a status bar to show the progress of the optimization process.
- Added possibility to select parallel or series combinations in divider optimization.
- Fixed E96 resistor series, base value of 9.42 is removed and missing value of 1.65 is added. Thanks to Stefano for pointing this out. Sorry for inconvenience caused.
- Added E196 resistor series file.
- Corrected validation of user inputs. This caused user inputs to be accepted only partly and produced incorrect results. Thanks to Tom for pointing this out.
- Increased maximum result count from 100 to 1000.
- Enhanced error field. Now it shows errors less than 0.01% as part per millions and exactly zero errors as "Zero".
- Added result list sorting function. Click on result list headers to sort the result list accordingly.
The optimizer and accompanying resistor series files can be downloaded here (43 KiB). Just extract the files
anywhere you like. There is no installer. The application needs Microsoft Visual C++ 2008 SP1
Redistributable Package (x86) installed.
© Janne Ahonen 2008-