For a project we needed to read out our PC-222 multimeter. It supports RS-232, but the protocol is not documented at all and the software is proprietary. After a little research on the web, we found some information in a comment on Amazon. With this and a little trial–and–error we found out how it works.
The multimeter continuously sends a data package of 14 bytes every second. So, you don’t have to ask for data by a command, just listen. Settings are 2400 baud, 8&nsbp;bit, no parity, 1 stop–bit, and RTS/CTS handshake. The following shows an exemplary package received from the instrument:
0x17 | 0x27 | 0x3D | 0x45 | 0x5B | 0x67 | 0x7F | 0x8F | 0x9F | 0xA8 | 0xB0 | 0xC0 | 0xD8 | 0xE2 |
Display of PC-222: 028.8 °C |
As one may notice, the first nibble (i.e. hex digit) of each byte is just a counter (marked in red). You can use this to find the beginning of a package. The remaining nibbles (marked in green) have different meaning. The very first one and number 10 to 12 have an unknown meaning. Nibbles 2 to 9 (= 8 nibbles) comprise the displayed(!) value. First, these 8 nibbles have to be recombined to 4 bytes:
Recombined bytes: | 0x7D | 0x5B | 0x7F | 0xFF |
Display: | 0 | 2 | 8 | .8 |
Every symbol on the display of the instrument is made out of 7 segments. Therefore, the lower 7 bits of each byte represent these segments. The following table shows the encoding of the symbols:
Symbol on display: | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | L | (none) |
Encoding (hex): | 0x7D | 0x05 | 0x5B | 0x1F | 0x27 | 0x3E | 0x7E | 0x15 | 0x7F | 0x3F | 0x68 | 0x00 |
The first bit is a special indicator for the display of the decimal point, the sign, or the range. For the byte 3 and 4 it represents the decimal point, which is the case in the example from above. For byte 2 it represents x10 (‘XIO’ in the display of the instrument as shown e.g. for LUX 40000 setting). For the very first byte it represents a minus sign. Briefly, multiply the value of the readout by -1, 10, 0.01, or 0.1 for the bit set in byte 1, 2, 3, 4, respectively.
Last, nibble 13 and 14 (recombined to one byte) describe the measured quantity/units. The following table shows the encoding. In the case above, it is 0x82, i.e. ‘°C’.
Quantity: | LUX (Light) | dBA (Sound) | %RH (Humdity) | °C (Temperature) | °F (Temperature) |
Encoding (hex): | 0x01 | 0x41 | 0x81 | 0x82 | 0x84 |
Maybe, there are other units and quantities for similar instruments from PCE instruments. Finally, we want to share a little ruby script, which can readout the PCE–222 instrument. We hope this little guide and the script come in handy for anyone dealing with this multimeter. That’s it!