Low-Resistance Meter

This project is a simple low-resistance meter. I used to call it a milliohmmeter but in fact it is good for measuring at best hundredths of ohms, and I'm not sure what you call that. I've seen it called a "low ohms meter" elsewhere. It's not as accurate as a commercial unit but should be adequate for hobby use. I used an AVR ATMega168, mainly because of its built-in 1.1 volt A/D reference. The LEDs are ancient MAN6740s from my junkbox; try to use something more modern that is brighter. Then you should be able to increase R9 from 100 to perhaps 470 ohms or more.

A LM317 is used as a 250 mA constant current source (U3). This is passed through Rx, the unknown resistance, and the voltage dropped across Rx is sampled by the AVR's A/D converter, using the internal 1.1 volt reference. Diodes D3, D4 and D5 are used to clamp the A/D input to around 2 volts, to prevent the AVR from seeing overvoltage when no resistor is connected.

The AVR program samples the input and calculates the resistance of Rx. The result is displayed as a 4 digit number.

There are a number of issues regarding accuracy. The problem is that very small resistors produce very small voltage drops across them, unless the current is high. At first I wanted to use a 1 amp current source, but heat in the power supply was a problem, and I ended up using 250 mA. This is a compromise which limits the lower end of the resistance scale that can be measured. Because of the small voltages presented to the A/D, resolution is a problem, and although the readout resolves to the millivolt, the lowest order digit is not reliable. To illustrate the problem, a count of 1 difference from the A/D may calculate to 5 or more milliOhms, so you can't use this as a milliohmmeter.

Other problems are the resistance of the wiring and binding posts used in construction, and noise in the circuits. The former problem is addressed with the "zero" button. Place a very heavy short across the Rx terminals. A reading of around 30 mOhms may be displayed. Press the zero button and the display should become 0. Then the unit is ready for measurments. The correction factor is saved in eeprom, so should not require repitition too often. I deal with noise (which apppears as jitter on the display) by the use of a digital filter, which provides the median of the last 15 A/D samples. Consider that we're trying to divide the 1.1 volt reference into 1024 steps, which is close to 1 mV per step.

The code has two defines that should be updated for your hardware. CURRENT_MA can be measured by placing your digital ammeter across the unknown resistance terminals (Rx). It should read close to 250 mA. The current is a function of resistor R8. Next there is VREF_MV. The 1.1 volt internal reference of the microprocessor is used, and can be measured by an accurate digital voltmeter at pin 21 (Aref) of the ATmega168.

Download C source code for the meter

Back to VE3LNY's AVR Project Page