‘Unlocking’ RS232 output from your multimeter
November 30, 2010 34 Comments
There is a band of products within the handheld multimeter market which, regardless of the manufacturer, are all based around an IC family from Taiwanese manufacturer CyrusTek. You can see this in Dave Jones’ multimeter teardowns – nearly all the units he opens up have a CyrusTek IC running the show. So in terms of feature sets they are all on a fairly level playing field; the price spread mostly comes from build & component quality and the user interface design.
If you read the datasheet for those ICs – the ES519xx series – you’ll make the interesting observation that they all do RS232 compliant output. So a vast number of multimeters – quite possibly yours - are capable of serial communication, but most manufacturers don’t break it out to the front panel for you.
Fair enough perhaps – it adds to the cost and it might not be a popular feature that everybody wants. On high end bench instruments (voltmeters, lock-in amplifiers, electrometers…) it’s a completely standard feature. Typically with those instruments you’re recording a lot of data, and you don’t want to be writing it down on a piece of paper like some chump from the 1960′s. For hobby applications, let’s imagine you want to monitor the resistance of a sensor… once a second. For 2 days. Maybe you want to measure the temperature of a heatsink as a function of the current going into your circuit to determine some operational limits. Maybe you built your own signal generator, and you want to calibrate it by measuring with a multimeter in 1Hz steps. And so forth and so such; I’m basically telling you that this can be a pretty handy tool to have kicking around.
I’m accustomed to only seeing serial output on $100+ meters, and even then it’s not guaranteed. If you’re willing to scrounge around it is in fact possible to find an RS232-enabled meter at a reasonable price – at $35 this TekPower from Amazon is the cheapest I’ve seen so far. But as you might have guessed, if you already own a CyrusTek based meter I’m about to spell out for you how to do it even cheaper by extracting the latent RS232 functionality from it. If you’re willing to cut some holes in your prized possession that is.
I’m going to show you how to do this on an ES51973 based meter that I have lying around, an overpriced $300 ‘ISO-TECH IDM 98II’. For different Cyrustek controllers it will obviously pay to read the datasheet – these are readily available on the net – but I don’t imagine the process will be much different to this.
Let’s crack this thing open and have a look:
The guts of a CyrusTek meter
Let me highlight that this is not an RS232 meter, there is no provision for it anywhere. That said, to enable serial output you just need to touch the ‘RS232′ pin to the ‘V-’ pin. You’ll hear it beep, and you might even see an RS232 segment light up if the LCD has one. Note that this mode is not permanent – you can change measurement settings without losing it but every time you turn off the meter it will leave this mode. You’ll want to rig up a momentary contact, normally open switch across these two pins and make it available from the outside of the case. I’m going to leave the build details up to your engineering imagination, since this is not actually my personal meter and I’m therefore not at liberty to cut holes in it. (“If you can’t open it, you don’t own it. But sometimes if you don’t own it, you can still open it”)
Enter the Konami code Touch these two pins to enable serial output
The meter is now continuously ralphing out data – there is a 3V, 2400 baud serial signal appearing between ‘SDO’ and ‘DGND’:
Note the voltage levels; if you call DGND 0V, the serial signal will go between 0 and -3V. But because it’s battery operated we actually have some freedom to chose where we put the ground reference. To capture some data I attached a USB logic analyzer with it’s ground on SDO and the signal line on DGND. This gives an inverted serial signal which stays positive (0 to 3V). Here’s what you see:
Capture of the serial data
On the ES51973 it comes in 11 packet chunks (1 packet=start bit+7 databits+stop bit+parity bit), and will tell you all sorts of things including the measurement function, range and the measured value. You can refer to the datasheet to decode the databits. In the example I’ve shown above the meter was set to resistance mode with no probes connected, hence the overload condition.
As long as you’re going to be quite careful about what you do with the multimeter and it also remains battery operated, the easiest way to get data out is to directly wire to the SDO and DGND pins like I’ve done above. In general it’s not a great idea though; you’ll find a more common approach is to maintain electrical isolation by optocoupling the pins. This is also an easy way to see if you have things working – use a visible LED and you’ll see it flashing if you have serial data present. Alternatively if you can find enough room in the case you could think about something really neat like hiding a microcontroller in there to read the datastream, parse it and send it out wirelessly.
To see how the professionals do it, let’s crack open another meter that was built with RS232 in mind. My own primary meter is a freebie SDA2010 (RRP $320) which has a miniUSB jack at the top and some custom software to interpret the data.
The guts of an SDA2010
In this case the controller is hiding under an epoxy blob, but it’s still pretty easy to see the optocoupling arrangement. An infrared LED placed across the two serial pins shines onto an infrared receiver on a separate board. To be really, really sure about electrical isolation that second board is sealed up in a plastic casing. On that board is a UART to USB chip, powered over USB. All parsing of the serial data happens in the custom PC software.
This seems like a pretty good solution, but again I leave the choice of implementation up to you. Now that you’ve seen how simple it is, go bust open your multimeter in search of an exposed Cyrustek chip! I’d love to hear from anybody that executes a modification like this.