Progammable Decade Resistor: Intro

In 2021/2022 I designed a DC electronic load that would be more capable, but also much more complex than the usual DIY solutions. However, after building a working breadboard prototype of the analog circuitry with 12 ICs including multiple precision and dual opamps, I thought that it might be better to start with a smaller project that would allow me to gain a lot of experience and write much of the non-application specific code that I could use later on for the digital part.

And this is how I started working on a programmable decade resistor, a pretty specialized tool for niche applications. At the time of this post the project is maybe 70% completed, so I think it’s reasonable to start writing about it.


A programmable resistor is a electronic device whose electrical resistance can be adjusted typically through digital signals. Programmable resistors are available in form of integrated circuits (often referred to as digital potentiometers) as well as stand-alone devices/expansion cards. There are many different applications, each with their own set of requirements e. g.:

  • programmable gain amplifiers
  • sensor emulation, e. g. for integration tests with hardware-in-the-loop simulators
  • automated testing
  • calibrators
  • prototyping

This diy project shall provide a general-purpose stand-alone device for use in a (home) electronics lab that can replace or complement resistor decade boxes for low power applications. The following table could be seen as a starting point for the design.

Rangeshort circuit, \(1\Omega\) … \(999.999 \textrm{ k}\Omega\), open circuit
Resolution\(1 \Omega\)
Accuracy*\(<<\pm 0.5\% \textrm{ of value} + 0.3 \Omega\)
Thermal drift\(<<50 \textrm{ ppm/K}\)
Power Rating**\(0.5 \textrm{ W}\)
Switchingmake-before-break, break-before-make
User interfaceNum pad and rotary encoder
InterfaceUSB (SCPI), two digital inputs (trigger etc.)
Overview of requirements. *) Can be improved for higher resistance values through calibration, **) See discussion in separate section

The programmable resistor closely follows the main prinicple of resistor decade boxes: connecting multiple devices (“decades”) in series, with each of the devices having a settable resistance of \(0 \Omega\), \(1 \cdot 10^n \Omega\), \(2 \cdot 10^n \Omega\), …, \(9 \cdot 10^n \Omega\) where \(n\) specifies the decade in question.

A manually operated Siemens B2086 Decade Resistor

Those devices are simple resistor networks complemented by one (multi-throw) or more (single- or multi-throw) switches. While the actual topology and resistor values vary vastly, the switch(es) will always either short out or connect certain resistors or simply tap certain nodes of the resistor network. A simple implementation uses a 10-throw rotary switch to tap the nodes of a series resistor network of nine resistors.

Decade resistor consisting of 9 resistors of the same resistance \(R\) and a 10-throw rotary switch

In the next post I’ll discuss two different topologies and the reasoning behind my choice.




WordPress Cookie Notice by Real Cookie Banner