Data Output Formats
Tibbit #43-1 supports three data output formats: ASCII, binary, and hexadecimal. Which format to use at low sampling rates is solely up to your preferences and needs. However, if you plan to stream the data continuously and at a high sampling rate, Tibbo recommends that you use the binary format — especially if your desired sampling rate is near the maximum limit for the ASCII and hexadecimal modes (see the Specifications).
ASCII Format
When using the ASCII format, the Tibbit's onboard PIC microcontroller calculates the actual voltages corresponding to the binary measurement data received from the ADC and outputs these voltages in a human-readable decimal format. Each number is rounded to four decimal places*.
In the output, channel voltages are separated by a comma (",") and each sampling group ends with a semicolon (";"). The term "sampling group" refers to the group of the currently enabled channels. In the single-ended mode and with all channels enabled, the group will comprise four measurements, performed one after another. If some channels are disabled, each group will have fewer than four measurements.
The following shows a sample output containing three groups with two measurements in each group:
Note that it is your application's job to remember which channels are enabled, as channel numbers are not printed in this mode. For example, the two members of each group in the output above could be from CH1 and CH2, or CH1 and CH3, or CH1 and CH4 — there is no way to tell this from the output itself.
* This, of course, is not an indicator of the ADC's measurement precision. The value of "1.2345" does not mean that the ADC was able to sample the applied voltage with a 0.0001V accuracy. Since the effective resolution of this Tibbit is 11 bits (10 bits plus sign), the actual measurement "step" of the ADC is 20V / 2048 = 0.0098V (for the single-ended mode).
Binary Format
The binary data output format is the most compact, which is why it is recommended for high sampling rates. The sampling value obtained from an ADC channel, as well as the channel number, are encoded into just 16 bits of data. Bits 15 and 14 encode the channel number, while bits 13-0 contain the result of the ADC conversion. Each 16-bit word is sent as two bytes; the high byte is sent first.
The channel number encoding is as follows:
Table 6 — Channel Number Encoding | ||
Channel |
B15 |
B14 |
CH1 |
0 |
0 |
CH2 |
0 |
1 |
CH3 |
1 |
0 |
CH4 |
1 |
1 |
The ADC data encoding depends on whether Tibbit #43-1 is running in the single-ended or differential mode, as detailed below:
Single-Ended Mode
Table 7 — Binary Format Single-ended Mode Data Structure | |||||||||||||||
B15 |
B14 |
B13 |
B12 |
B11 |
B10 |
B9 |
B8 |
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
ADC channel |
SIGN |
Always 0 |
ADC conversion data without the sign ([D11:0]) |
The sign bit will be 0 for positive numbers (measurements above 0V) and 1 for negative numbers (measurements below 0V). B12 is always zero.
Use the following formulas to convert the data into corresponding voltage values:
Table 8 — Binary-to-Voltage Conversion Formulas for the Single-Ended Mode | |
Positive number (SIGN = 0) |
Vi = (D[11:0] / 4095) × 10V |
Negative number (SIGN = 1) |
Vi = -((4095 - D[11:0]) / 4095) × 10V |
Differential Mode
Table 9 — Binary Format Differential Mode Data Structure | |||||||||||||||
B15 |
B14 |
B13 |
B12 |
B11 |
B10 |
B9 |
B8 |
B7 |
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
B0 |
ADC channel |
SIGN |
ADC conversion data without the sign ([D12:0]) |
The sign bit will be 0 for positive numbers (measurements above 0V) and 1 for negative numbers (measurements below 0V).
Use the following formulas to convert the data into corresponding voltage values:
Table 10 — Binary-to-Voltage Conversion Formulas for the Differential Mode | |
Positive number (SIGN = 0) |
Vi = (D[12:0] / 8191) × 20V |
Negative number (SIGN = 1) |
Vi = -((8191 - D[12:0]) / 8191) × 20V |
The following shows a sample "hex dump" output containing three groups with two measurements in each group:
Here is how to interpret this data:
- First, combine the byte pairs into 16-bit words. The result is: 0x099D, 0x7666, 0x099A, 0x7665, 0x099B, 0x7668.
- Next, extract the channel field (bits 15 and 14) and the sign (bit 13). Assuming the single-ended mode, the result is: CH1: + 0x99D, CH2: – 0x1666, CH1: + 0x99A, CH2: – 0x1665, CH1: + 0x99B, CH2: – 0x1668.
- The final step is to convert these values into the corresponding voltages (using the formulas in Table 10): CH1: + 6.0098V, CH2: – 6.0000V, CH1: + 6.0024V, CH2: – 6.0024V, CH1: + 6.0049V, CH2: – 5.9951V.
The binary data output format is extremely compact, but care should be taken to avoid losing any data bytes. Although the channel number is encoded in the output, missing a single data byte will result in a permanent "data interpretation shift."
Hexadecimal (HEX) Format
This format is a hybrid of the ASCII and binary formats:
- As with the ASCII format, individual values are separated by commas (",") and sampling groups are separated by semicolons (";").
- As with the binary format, each value is transmitted in 16 bits (2 bytes) of data that encode the channel number, the sign, and the measured voltage. The difference with the binary format is that these 16-bit words are sent as "HEX strings." In other words, they are "printed" in a HEX format, using ASCII characters.
The following shows a sample "hex dump" output containing three groups with two measurements in each group:
The HEX format is a good compromise between the ASCII and binary formats. Like the ASCII format, it allows you to regain synchronization if some characters are missed. Unlike the binary format, it employs printable ASCII characters, which may be desirable. At the same time, the HEX output is a bit more compact than the ASCII one, thus achieving a slightly higher sampling rate than the latter.