An updated version of the Millivolt Meter project from May 2016, with dual range selection, calibration selection, improved software, and updated board layout.
After three years, I decided it was time for a refresh of my original Millivolt Meter version 1.51, based on the Scullcom Hobby Electronics Millivolt Meter on Youtube.
The original board was designed to loosely match the original Scullcom Hobby Electronics thru-hole board using a mix of surface mount and thru-hole devices instead. The major changes in version 1.5 were the addition of the Caddock voltage divider in place of the discrete resistors, the Arduino Pro Mini instead of the Nano, and using an I2C connected display instead of the directly connected parallel display.
The Version 1.51 board was featured in a later video by Scullcom Hobby Electronics as the Millivolt Meter MK2, with several other updates.
Paul Versteeg made several modifications to the board such as battery voltage monitoring and refined the software to include filtering, and improved calibration. Paul’s Blog
The new version 2 board is now larger to support the additional components.
One of the first changes was to replace the TO220 voltage regulator with a surface mount low quiescent current / low dropout version. Also added was a PTC fuse on the 9 volt input. The board will now work with a supply down to 5.4 volts which allows the 1.5 volt batteries to be drained all the way to 0.9 volts each.
A MAX14931 digital isolator was added between the digital and analog sections of the board for communications with the LTC2400 ADC, and isolates the SPI bus and relay control.
The ADR4540 voltage reference remains the same, but now has mechanical and thermal isolation slots around it along with additional filtering on the vref out using film capacitors.
The input voltage divider still uses the Caddock precision decade resistor divider, but it is now configured as a 10 meg Ohm 10:1 divider on the 40 volt range. A shielded COTO relay with a 5 volt coil is now included to switch to a 4 volt range, which bypasses the divider still keeping a 9 meg Ohm input resistance.
I added an over-range check in software to automatically switch to the 40 volt range from the 4 volt range if the voltage is greater than 4.01 volts or the ADC sets the over-range bit, along with setting the backlight to violet to warn of the range change.
Some other new items are an input protection board, a ZeptoBit isolated USB-UART adapter, Multi-input I2C LCD display adapter with EEPROM, battery voltage monitor, and back panel calibration selection switch.
To connect the USB isolator to the back panel I used an Adafruit panel mount extension USB Cable — Micro B Male to Micro B Female #3258.
For the calibration switch, I used a C&K MA00L1NZQD rotary switch and pinned it for 5 positions with the fifth position being OFF to prevent accidental calibration from the front panel.
I was originally going to use 4 single calibration points, but ended up using a 2‑point cal for each range at 10% and 90%.
Cal‑A and B are used for the low (0.4096) and high (3.6864) cal for the 4 volt range, with Cal‑C and D used for the low (4.096) and high (36.864) cal on the 40 volt range.
The calibrations for each range must be done with A before B, and C before D, as the high cal for each range uses data from the low cal for it’s calculations.
The 2‑point cal doesn’t use a zero cal, so that front panel switch is currently unused.
I used a 6‑cell AA battery pack for normal operation of the meter, but added an external power jack for testing and burn-in purposes. I kept the unit powered continuously for over 1,000 hours / 45 days to allow the voltage reference drift to settle, before my final calibration.
Overall I am pleased with the updates, but feel that there is still room for improvement especially with the software to reduce some non-linear errors with the ADC.
I would like to utilize the EEPROM on the I2C display board to map out the non-linear errors in the ADC circuit, but that will be a future project.
Eagle CAD board and schematic files Millivolt Meter Version 2.11
OSH Park Millivolt Meter V2.11 project page
Millivolt Meter Ver. 2.11 BOM
Eagle CAD board and schematic files RGB I2C Display with EEPROM
Eagle CAD board and schematic files Input Protection board
Front Panel Designer front and back panel files for Hammond 1455N1601BU box
Arduino sketch files for software version 3.34
Modified Adafruit_RGBLCDShield library for additional input I/O
Hi Greg,
This looks like a very good iteration from your 1.5 version. I was waiting to see if there had been any further developments and am pleased to see that you have incorporated several advances in this design. I like the multipoint calibration mechanism and the board design looks like it has incorporated several advances that, in theory should improve on the previous performance. The changes to the voltage regulator was something I was intending to do if I made the 1.5 version, but the other changes should be very beneficial too.
One of the issues raised with the previous problem seemed to be wide variations and linearity problems at the very low end of the range. Has the range switchover improved this? It seems that you have a strategy for addressing linearity and storing this in EEPROM which sounds like it should be a simple coding issue 😉 rather than a pcb design problem.
Looking at the photos in your blog, I note that there are a couple of post-production ‘additions’. There is a blue wire from pin 5 (INA3) on the isolator heading under the Arduino — not sure if that has been addressed on the latest pcb? There is also a SOT23 daughterboard visible on the ‘top view’ of the open case above — looks like it might be an additional voltage regulator to the Arduino?
I am busy with the MilliOhm meter at the moment but will be following this one closely as it is high on my list of ‘interesting projects’.
As a complete aside, I designed a set of RF H‑Field probes on a 4 layer PCB earlier in the year but never got round to producing them. When I was looking on OshPark for the MilliOhm boards, I came across a similar set you had produced but can’t find any reference to them in your blog. I would be interested to know if you got them to work or if you had any problems with them.
Hi John,
There is some improvement at the low end due to the range switch and the 2‑point calibration, but once the measured voltage is at the middle or extreme high/low end of the range, there are still errors in the hundreds of uV.
The errors are very repeatable and stable, so that is why I am interested in exploring additional calibration methods.
The blue bodge wire was to correct a non-continuous trace for the relay control, which has been corrected in Ver. 2.11
The SOT23 is a Maxim MAX6342 power on reset monitor that I was experimenting with. The display that I was using had a really long startup and would require a system reset 10% of the time when powering up.
I ended up adding some additional capacitance to the existing reset circuit on the Pro-Mini (the blue capacitor) and removing the MAX6342.
The H‑Field probes were designed, but haven’t been ordered yet. Eagle CAD files
Thanks,
Greg (Barbouri)
Hello Greg,
Many thanks to you, and Louis Scully and Paul Versteeg, for making all this information available for hobby electronics enthusiasts.
This Millivolt Meter is an excellent project — I have started ordering parts and am looking forward to the building and testing.
One issue that puzzles me: It seems you have taken a lot of trouble to make sure that the critical front-end circuitry is designed to minimize noise and external interference by use of shielding, and keeping tracks as short as possible.
But you then hang a separate board on the input with large un-shielded protection components. Can you explain why this does not compromise the performance?
Ken.
Hi Ken,
You are correct the separate un-shielded protection board can compromise the performance.
But it is a compromise between blowing out the front end of the system with a surge, or a bit more noise on the input.
Everything in the design of a system is a compromise in performance, cost, safety, ruggedness, etc. It is very hard to have it all at the same time.
With a low noise voltage reference input to the Ver‑2 Millivolt meter and normal averaging, The meter only displays about 1 micro volt of noise on the display on the 4 volt scale with the protection board.
For me this is an excellent compromise. For others that want the lowest noise possible, it is easy to remove the protection board from the signal path and even add shielded cable from the inputs to the shielded box.
That is what I think is great about DIY electronics, you can do it the way you want and pick the compromises that you are comfortable with.
It would not be too hard to also build a shield for the protection board.
The main reason that I did add the shield on the main board was the very close proximity to the Teensy 3.2 board, and it’s digital noise.
Thanks,
Greg (Barbouri)
Hi Greg,
Thanks for reply.
Once built, I’ll play around with the input circuitry to see how it affects noise.
Ken.
Hi Greg, I ordered 3 of the 1.51 pcb last year (thank you very much for making them available) but made a few changes: I use an AD4550 5V reference. The AD8628, LTC2400 & AD4550 are powered by 5.25V. Measuring range is up to 5.2V/52V. I cut the ground trace of the AD8628 and provide ‑0.25V directly to its ground pin. See LM7705 for more information. A „rail-to-rail“ opamp isn‘t rail to rail, when it comes to milli- or microvolts. That‘s where the non-linearity comes from. It’s a deadband, not an offset, so you can’t calibrate it away. My input circuit uses two small signal relays to switch between the 1:10 divider (50V @ 10MOhm) and a direct connection from the input post via a 15kOhm/3W resistor to the input of the opamp (5V @ >1GOhm). The resistor protects against at least 100V in limiting the input current to the opamp to less than 7 mA. I too use a 2‑point calibration, but with arbitrary values for low and high. I enter the correct values (there are four buttons to do this) & the program calculates the coefficients for y = mx + b and stores them to the eeprom. There is also a problem with the float precision of the 8bit arduino. It‘s restricted to less than 7 decimal digits. Rounding errors are almost unavoidable. So I built my second mV-meter using a SamD21 (off the pcb) which provides true double precision. To calm the nervous display I do averaging 1 to 8 measurements before displaying and saving to the buffer. And I use a 2004 LCD. With a bit of averaging or filtering the reading is stable to 1..3uV. Both meters do not differ more than a few digits from 0 to 5V. To each other and a 6 1/2 digit Solartron 7150. This is astounding. The isolation of the digital signals is not necessary. I tried this too, using ADUM1201 magnetic isolators. I couldn‘t find any difference regarding the noise. While the LTC2400 is converting, nothing happens on these lines. I even tried to keep CS low after the first conversion. No obvious change. But a clean supply makes a difference. I use a LT3042 to provide the 5.25V to the analog part. Sorry for so much text 😉
Hi Greg & Henry
I was having a look at the code and note Henry’s comments about the limited Arduino float precision (no double precision floats available) and his choice of a SamD21 board. Had either of you considered using the ‘BigNumber’ library http://www.gammon.com.au/forum/?id=11519 ? This seems to be fairly fast and a simple drop in for the precision simple maths that is required?
BigNumber::begin (); // initialize library
//factorials
BigNumber fact = 1;
for (int i = 2; i <= 200; i++)
{
Serial.print (i);
Serial.print (“! = ”);
fact *= i;
Serial.println (fact);
}
I have just done some tests on a Nano and I am averaging calculating e to 10 decimals in 13ms and to 16 decimals in 25mS. More than sufficient precision and speed, I would think.
I will have a look in more detail at the code. There is a modest memory hit with this library but it doesn’t look too bad and there seemed to be plenty of room.
Won’t the use of an active LM7705 (instead of a passive ground connection) introduce more inaccuracy on the output of the AD8628? (Note: I’m not saying it won’t be much more accurate near zero)
Hi Greg,
I have just received three boards for the Millivolt Meter v2. On both quality and design they look very good, and I’m about to start assembly.
I have another question, regarding separation between the analogue and digital parts of the design. I would have expected the critical Vref and ADC ICs to be connected to analogue ground, but they are in fact connected to digital ground. On the other hand, the signal isolation IC is placed after ADC and Vref, between them and the microprocessor. So I’m not clear on whether the ADC and Vref belong in the analogue or the digital domain.
Can you explain the thinking behind this aspect of the design?
Thanks, Ken.
Hi Ken,
The ADC and VREF are on a separate ground tied to a star ground point which forms ground 2. The isolation IC and relay are tied to ground 3 and are also tied to the star ground point.
My thought was to isolate the current flow paths on the analogue circuit side based on circuit type and limitations of using a 2 VS 4 layer board.
Greg (Barbouri)
Hi Greg,
So there are in effect three ground nets, with ADC and Vref having their own ground region. That makes perfect sense. It is not clear from the schematic, but looking carefully at the pcb layout in Eagle, I can see the the three ground regions.
Thanks for your reply, Ken.
Hi Greg,
Just wonder really — where do you get 36.864 V (Cal D) from please? As always excellent project or rather continuation of the project.
Thanks
Alex
Hi Alex,
I use a Power Designs Inc. Model C500 Precision DC Source.
I have also used my HP 6205C Dual power supply in the past, but it tends to drift over time.
I monitor the supply with a calibrated 6.5 digit meter, and adjust the output as needed.
Power Designs Inc. C500
Greg (Barbouri)
Hi Greg,
I do not have access to such a calibrator. I can only use a decent bench power supply – I think it should be enough.
Another question – I have calibrated the 4V scale, but the voltage is still off by 0.1–0.15V. Also say 2.5V is displayed on 40V scale, but does not displayed on 4V scale (hardware issues?). Do you have a more updated version of your sketch please?
Thanks
Alex
Alex,
Version 3.34 is the most current sketch.
The calibrations for each range must be done with A before B, and C before D, as the high cal for each range uses data from the low cal for it’s calculations.
Greg (Barbouri)
Sorry I previous message got partially deleted.
Greg,
The problem with the LCD screen was that in your Modified Adafruit_RGBLCDShield library, the MCP23017 address has to be corrected to 0x27 (this is what i2c scanner gives me):
#define MCP23017_ADDRESS 0x27
Another issue. I did follow the calib procedure (A before B, and C before D), but no luck. Output 4 (Position A5) is not working on both LCD backpacks (I think this is a software issue) so I moved it to A0 for now. Sadly, the errors are way too high. On the 4V range, on 3.6864V (this is a calib point), I am getting 3.2797V.
The same voltage on the 40V scale gives me 3.500971
This is massively off for both scales.
I thought the problem may be here in the sketch:
float A_CI_1 = 1677312 // Calibration ideal 1 — (0.4096 * 16777216)/ 4.09700 = 1677312 — 10% FS
float B_CI_2 = 15095809; // Calibration ideal 2 — (3.6864 * 16777216)/ 4.09700 = 15095809 — 90% FS
float C_CI_1 = 16773121; // Calibration ideal 1 — (4.0960 * 16777216)/ 4.09700 = 16773121 — 10% FS
float D_CI_2 = 150958089; // Calibration ideal 2 — (36.864 * 16777216)/ 4.09700 = 150958089 — 90% FS
However, it did not make any difference. Any ideas please?
Thanks
Alex
Hi Greg,
I assembled the second board, but still have the same issue with accuracy. I followed your advice on calibration (A before B and C before D), but still no joy. Any suggestions please?
Thanks
Alex
Hi Alex,
Did you enter your actual v_ref in line 111 of the sketch?
“float v_ref — This is your actual voltage measured from the internal ADR4540 IC”
An incorrect v_ref value can cause accuracy errors.
Greg (Barbouri)
Hi Greg,
I found the issue. I think there were several errors contributing to this: (a) I do not have a voltage source able to provide a stable 36.864 V. I am using a power supply and it drifts. (b) I did calibration before Vref IC voltage was stabilised. © I powered a project through Arduino rather than a battery.
It is better now, but not ideal. For example, 10.000000V is giving me 10.0123V i.e. 123mV error.
Now I need to figure out how to obtain a stable 36.864 V to re-calibrate it.
Thanks
Alex
Dear Greg,
From what I understood, the integral nonlinearity curve of the LTC2400 follows a rather predictable parabola. See the datasheet for an example. By adding another calibration point in the middle of the scale you can approximate this function in the microcontroller code. I expect this would substantially improve the accuracy of your ADC readings.
Cheers,
Jacques
P.S.: Love your blog!
This looks like a VERY useful tool for calibrating away the INL errors:
https://mycurvefit.com/
thank you for realy great project. I tried build this … but with some changes.
- i used many ideas mentioned by Henry
— reference ADR4550
— ‑0,25V negatove voltage for OPAMP
— 2 relays for changing range — 1:1 with resistor 51k just in series with OPAMP
— i used esp32
— as a display oled character display 20x2
and result was great, but some nonlinearity apears 🙂 the 1:10 range looks ok but 1:1 not. Strange. Problem was the oscilating OPAMP, i thing. Just touching the input of opamp by multimeter probe (just one end) and nonlinearity goes away. So i added one capacitor 220p between 51k and the relay and groud. And now it is nice 🙂
Hi Michal,
Sounds like a fun, innovative, and challenging build.
Would love to see a picture of it. Twitter @breviceps
Thanks,
Greg (Barbouri)
Hi Barbouri,
yes, so manny hours spend on this 😀
when the front panel comes, i’ll try get everything together and then i’ll make some pictures
Michal
Hi Barbouri,
Can we measure negative voltages?
Hi Bruno,
The Millivolt meter doesn’t measure negative or AC voltages directly.
Because of its single positive rail power supply, you would have to swap the input connections to measure a negative potential.
Greg (Barbouri)
Hello Greg,
Can this meter be used to measure voltages across components in a circuit (differential voltage) like a hand-held meter? This assumes its isolated running off the internal battery. I tried something similar using an ESP8266’s internal (not so great) ADC and running it from a battery but the voltage readings become unstable once I try to float the ground of the ESP8266.
Thank You
Austin
Hi Austin,
Yes
I use mine quite often to measure differential voltages across components.
I have two units on my bench, one is powered by an external isolated power supply and has an internal USB isolator for data.
The other unit is battery only, for when I need maximum isolation and do not need to log data.
Greg (Barbouri)
Thanks for the quick response Greg. The unit with the external isolated power supply and isolated usb can also be used for differential voltages, correct? Because the meter grounds are electrically isolated from DUT ground. Just wanted to be clear in my understanding.
Thanks again Austin
Hi Austin,
Yes, that is correct.
Just need to take extra care in assembly to isolate circuit boards with non-conductive standoffs, including display.
Greg (Barbouri)
Hi Greg,
As a newbie I have been reading everything to do with this project from the main contributors (yourself, Paul and Louis) and getting myself a tad confused!
I have ordered your v2.11 board (from OSH) but I ordered the LCD serial interface (Board Module LCD1602 2004 Display for Arduino) that Paul used.
My first question is as I have your v2.11 board do I require your display42 EEPROM board or can I get away with the one I ordered?
The second question is do I also require the USB isolator and input protection boards as well or are these optional ? I will probably order the USB isolator and I/P protection boards anyway but just wondered if they are mandatory.
Best regards
Richard
Hi Richard,
You can use the LCD1602 module, but will have to rewrite the firmware to use a different display driver and move the switch inputs to the main board.
Also the LCD1602 module is a monochrome (single color) display, so the display will not indicate auto range change, or cal mode, etc.
The current firmware does not utilize the EEPROM on the display42 board, and uses the smaller ATMega328P EEPROM on the Pro-mini, so it can be left unpopulated.
I use the display42 board in several other projects that do require the EEPROM, so it is somewhat a generic module for me.
The USB isolator and input protection boards are optional units and do not require any firmware changes.
Greg (Barbouri)
Hi Greg,
Many thanks for your prompt reply.
I have ordered the RGB I2C Display with EEPROM boards (from OSH after uploading the Eagle file) and I am now creating a BOM from the schematic. I just thought it would be easier to stick with your design in the end. Is it possible you could also upload a photo of a populated I2C (with EEPROM) board? It’s just it is always nice to see if you have ordered a component that looks in the same ballpark (not that I don’t trust my interpretation of the Eagle information).
I have also ordered all your voltage ref project components. I just hope wifey is understanding.
Your projects will be very useful in understanding a slight problem in another (voltmeter/ammeter) LTC2400 based application I am involved in. We use an MCP2210 (USB-SPI), LTC2400, opto-isolator, oscillator and a voltage ref on a small custom board but the stability threshold is only 200mV. We think this is mainly noise/design of the board but this whole world of LTC2400 work and stable voltage refs is very important in understanding where we are going wrong!
Keep up the good work !
Cheers
Richard
ps I am now acquainted with the world of reflow as your boards are quite small and have ordered a small heated plate and air blower!
Hi Richard,
Sounds like you have plenty of fun projects to keep you busy for a while.
I wrote a blog post back in 2018 with information on the display board:
Prototype I2C Display Board with EEPROM
For most of my full board work I use a Presto “Liddle Griddle” and an IR thermometer for the reflow.
Full manual operation, but works great for me.
I am still slowly working on the Programmable Voltage Reference project, and the next version will support 0 to 5.0000 Volts output,
with a better reference, and thermal isolation. Board design is done, but still saving up for the parts.
Greg (Barbouri)
Hi Greg,
I would be definitely interested in a nice 0–5.0000 source!
I will keep an eye out.
Should I hold off on the original (if I can use some of the parts for the new version) or will it be totally different?
Cheers
Richard
Richard,
Quite a few component changes on the new board, and it is still a design prototype, which may require more revisions before completed.
I would recommend building the board using your existing parts, and then decide if you need the extra’s from the new version.
Also, sometimes my projects run on “Elon time”.
Greg (Barbouri)
Thanks for the great description. I’ve built this meter with some minor changes (imported to KiCad and used another voltage regulator).
This was the first time I’m using an Arduino, so it was fun to start learning. But I have some issues adjusting the meter. I built a reference that I adjusted and compared with my Agilent 34401A.
I have v_ref 4.09548V.
Ideal A_CI_1 1677935 (for 0.40960V)
Ideal B_CI_2 15101412 (for 3.68640V)
Actual measured 0.4096V A_CA_1 1679692.125 (higher value by a factor of 1.001047195)
Actual measured 3.6864V B_CA_2 15099172.00 (lower by a factor 0.999851669)
gain_error1 1.000298 (isn’t that a tad high…)
offset_error1 ‑1257.25
When measuring voltages, display shows:
0V = 1.423 mV (40V range is 11 mV, though)
0.40960V = 410.656 mV
2.49737 V = 2.498103 V
3.68640V = 3.689030 V
The same with the 40V range, it is reading a bit too high all through.
I’ve tried adjusting a few times, but it shows a bit high all the time. Maybe I have to manually set the gain_error? The calculation doesn’t feel optimal, or I’m missing something in the code.
Also on row 561 in your v.3.34 code, there is the following when calculating the 40V high range offset:
offset_error2 = ((gain_error1 * C_CI_1) — C_CA_1);
Shouldn’t it be calculated from gain_error2?
Same when calculating the voltages. On rows 754 and 757 high range is calculated with gain_error1 and low range with gain_error2.
Shouldn’t it be the other way around? If I change these variables I do get a bit lower readings.
Hi Johana,
After sifting thru the 2.5 year old code, It looks like you are correct with your assessment of lines 561, 754, and 757.
Good catch in finding those errors.
I have never been entirely happy with the current calibration code for the V2 Millivolt Meter, and I somewhat mention that towards the end of the post.
Unfortunately shortly after finishing the post, work commitments kept me from following up with the project along with other waiting projects.
I believe the accuracy could be improved by adding another calibration point at 0.000 volts, but haven’t followed thru with researching what changes would need to be made to make that happen.
I am open to any code improvements anyone may have.
Thanks for the coffee’s
Greg (Barbouri)
Thanks, a lot. I will go through the code a bit more. What threw me off too, was that the offsets were negative. Now if I change them to positive numbers, it’s a lot closer. I think I’m getting there. I’m not a C programmer, so I won’t probably publish my poor attempts. But if other uses the same code, watch out if your actual measurements are higher or lower than the ideal, it affects the offset calculation.
This might be my fav project posted to date. Love it.
It’s now working! And it is very accurate. I changed how the calibration works. I now use a 0V calibration point, too. This way I calculate three linear curves. The first one between 0V and 0.4096V, the second between 0.4096V and 3.6864V and the last one between 4.096 and 36.864V. I removed the reference calibration offset calculation, because there was no point when doing it this way. I also do the calibration measurement the same way as when actually measuring (same filter weight etc), otherwise result differs. Now in the 4V range, 0V offset is only 9 uV. And the calibration points agree to almost all digits with my Agilent 34401A. Readings are slower than the Agilent, it takes a few seconds for it to settle finally. Note that of course in between the calibration points, accuracy is unknown. E.g. in 40V range, there is about 0.66 mV offset at 0V (but 40V range is only calibrated at 4.096V and 36.684V). But I’m thinkin on having it automatically switch to 4V range, too.
The modified code is available here. I hope it is OK to post it publicly (otherwise I will take it down):
https://github.com/hevanaa/6‑digit-millivoltmeter
Regarding the hardware, my meter is almost the same as your 2.11 version hardware. The only difference with regards to the code is that for some reason I couldn’t get A4 BUTTON_LEFT to work, so I’m using BUTTON_SELECT instead. Otherwise I could have used another position for 0V calibration (now it is in the same function as 0.4096V calibration).
Comments, improvements and corrections are welcome.
I found an issue with the modified library. The fifth button wasn’t working (A4 BUTTON_LEFT). The reason was on line 426 in Adafruit_RGBLCDShield.cpp. Previously it was
uint8_t reply = 0x2F;
2F is 101111, which causes fifth button to not work. I changed it to:
uint8_t reply = 0x3F;
and now all buttons work (3F = 111111).
Hi johanh,
Good catch. The issue with the library has been corrected with your update, and the modified “Adafruit_RGBLCDShield” ZIP file has been replaced.
Thanks,
Greg(Barbouri)
I’m pulling this project together with parts and PCBs but having a little trouble understanding the wiring scheme for the buttons and rotary switch. Is the a photo or diagram fro reference?
Thanks for a great project!
John
Hi John,
For some unexplained reason I didn’t take any pictures of the front panel wiring.
All button inputs feed into the display board top header. Pin 1 which is closest to the power switch is ground and ties to one side of the three front panel input switches.
Pin 2 connects to the Zero Cal switch, pin 3 to the back panel Cal‑D, pin 4 Cal‑C, pin 5 Cal‑B, pin 6 Cal‑A, and pin 7 the brown wire connects to the front panel range switch.
The common rotary switch wire (red) on the back panel connects to the Ref Cal front panel switch. Basically the Ref Cal switch momentarily completes the ground connection to what ever is selected on the back panel cal select rotary switch.
Greg (Barbouri)
Thanks for this help Greg. I’m thinking based on the traces coming off the MCP23017 that you are referring to JP3 as the header of interest?
Yes, you are correct. JP3 is for the switch inputs.
Greg (Barbouri)
Re: Face Plates
I didn’t have enough left in the parts budget for Front Panel Express face plates so I reworked the files into Gerbers and ordered PCB versions. The blue PCB material isn’t a great match to the Hammond case but overall it’s a good low cost solution. I have four extra sets and Gerber files if I run out of extras- you pay postage and they’re yours- one per person. Drop me a line- greusel@sbcglobal.net.
Best Regards,
John
Hi Greg,
I have it mostly together now- sans relay and buttons. When I start it up I get a cycling through the backlit colors and settling on teal/blue. I do not however have any characters displayed. Is this an issue with I2C addresses? I haven’t put any bridges on SJ0,SJ1 or SJ3. I have only attached SCL, SDA, VCC GND at the LCD driver board- don’t believe I need anything else to have a functional display correct?
Thanks again,
John Greusel
Hi John,
First thing to check is the display contrast, if turned too far either way you will have black blocks or no display at all.
Second thing to check is that SCL SDA are not swapped.
You should only have one pair of termination resistors on the SCL SDA buss, preferable at the end of the line (display).
If it is cycling through the backlight colors then there is communications with the display, so most likely contrast setting.
Greg (Barbouri)
All good now Greg. It was bad soldering on the I2C distribution chip. Now to assemble it in the enclosure and figure out the calibration process.
Thanks for your help!
John
Greg,
Seem everything is working now in the electronics but I too had difficulty starting from battery power- having to always push reset once. I changed the delay in the initialization routine from (500) to (5000) and the problem is gone. I’m no programmer so this was a stab in the dark but it seems to have fixed the problem.
Best,
John Greusel
Hello, I’m trying to build my own millivoltmeter and I downloaded your Arduino sketch file for software version 3.34 with the required libraries, but during compilation the program fails saying that the variable “BUTTON_MENU” at code line 612 was not declared, by any chance did you encounter this problem too? If so, do you know how to fix it?
Alex
Hi Alessio,
Just ran the verify/compile on version 3.34 with no errors.
I am using Arduino 1.8.19 and the modified Adafruit_RGBLCDShield.h file which provides the 6th menu button.
If you are not using the updated library file that may be the cause of the error.
Good luck with your project.
Greg (Barbouri)
Good evening, I wanted to know if PCBs are available:
— Multi-input I2C LCD display adapter with EEPROM
— Input protection circuit and USB isolator
Thank You
Hi Alessio,
Here are the links to the boards you asked about:
Isolated TTL to USB quad Ver. 3.0
https://oshpark.com/shared_projects/aNhUu06u
Protection Rev1.0 41V
https://oshpark.com/shared_projects/LuGOYBOZ
I2C RGB LCD Display 4.24 W/eeprom
https://oshpark.com/shared_projects/GuRNybzO
I do not sell boards or projects currently.
If you have a CAD program that can import EagleCAD files, you should be able to have them made by any board manufacturer.
Greg(Barbouri)
Thanks, I have another question to ask you I’m trying to figure out which RGB display to use, looking on the Adafruit website there are two versions:
https://www.adafruit.com/product/399 with negative backlight and
https://www.adafruit.com/product/398 with positive backlight, which one should I use?
Thank you
I use the negative backlight for most of my projects as the letters and numbers change color instead of the background.
Greg (Barbouri)