Форматы выходных данных
Tibbit #43-2 поддерживает три формата выходных данных: ASCII, двоичный и шестнадцатеричный. На низких частотах дискретизации формат выбирается исключительно по вашим предпочтениям и потребностям. Но если вы планируете непрерывную потоковую передачу данных на высокой частоте дискретизации, Tibbo советует использовать двоичный формат, особенно когда нужная частота близка к максимальному пределу для режимов ASCII и шестнадцатеричного (см. раздел Технические характеристики).
Формат ASCII
В формате ASCII установленный на плате микроконтроллер PIC Tibbit-модуля рассчитывает реальные напряжения, соответствующие двоичным данным измерений, полученным от АЦП, и выдаёт эти напряжения в удобочитаемом десятичном виде. Каждое число округляется до трёх знаков после запятой*.
На выходе напряжения каналов разделяются запятой («,»), а каждая группа отсчётов заканчивается точкой с запятой («;»). Под «группой отсчётов» понимается группа из включённых на данный момент каналов. В несимметричном режиме при включённых всех каналах в группе будет четыре измерения, выполненных одно за другим. Если часть каналов отключена, в каждой группе будет меньше четырёх измерений.
Ниже показан пример вывода из трёх групп по два измерения в каждой:
Обратите внимание: запоминать, какие каналы включены, должно ваше приложение, поскольку в этом режиме номера каналов не выводятся. Например, два члена каждой группы в приведённом выше выводе могут относиться к CH1 и CH2, к CH1 и CH3 или к CH1 и CH4 - по самому выводу этого не определить.
* Это, конечно, не показатель точности измерений АЦП. Значение «1.2345» не означает, что АЦП смог измерить приложенное напряжение с точностью 0.0001V. Номинальное разрешение этого Tibbit составляет 13 бит (12 бит плюс знак), то есть номинальный «шаг» измерения АЦП равен 201.14V / 8192 = 0.02455V (для несимметричного режима). Однако эффективное разрешение составляет 11 бит (10 бит плюс знак), поэтому точность примерно 201.14V / 2048 = 0.09821.
Двоичный формат
Двоичный формат вывода данных - самый компактный, поэтому он рекомендуется для высоких частот дискретизации. Значение отсчёта, полученное от канала АЦП, и номер канала кодируются всего в 16 битах данных. Биты 15 и 14 кодируют номер канала, а биты 13-0 содержат результат преобразования АЦП. Каждое 16-разрядное слово отправляется как два байта; первым идёт старший байт.
Номер канала кодируется следующим образом:
| Таблица 6 - Кодирование номера канала | ||
| Канал | B15 | B14 |
| CH1 | 0 | 0 |
| CH2 | 0 | 1 |
| CH3 | 1 | 0 |
| CH4 | 1 | 1 |
Кодирование данных АЦП зависит от того, в каком режиме работает Tibbit, несимметричном или дифференциальном, как описано ниже:
Несимметричный режим
| Таблица 7 - Структура данных двоичного формата в несимметричном режиме | |||||||||||||||
| B15 | B14 | B13 | B12 | B11 | B10 | B9 | B8 | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
| Канал АЦП | SIGN | Всегда 0 | Данные преобразования АЦП без знака ([D11:0]) | ||||||||||||
Бит знака равен 0 для положительных чисел (измерения выше 0V) и 1 для отрицательных (измерения ниже 0V). B12 всегда равен нулю.
Чтобы пересчитать данные в соответствующие значения напряжения, используйте следующие формулы:
| Таблица 8 - Формулы пересчёта двоичных данных в напряжение для несимметричного режима | |
| Положительное число (SIGN = 0) | Vi = (D[11:0] / 4095) × 100.57V |
| Отрицательное число (SIGN = 1) | Vi = -((4095 - D[11:0]) / 4095) × 100.57V |
Дифференциальный режим
| Таблица 9 - Структура данных двоичного формата в дифференциальном режиме | |||||||||||||||
| B15 | B14 | B13 | B12 | B11 | B10 | B9 | B8 | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
| Канал АЦП | SIGN | Данные преобразования АЦП без знака ([D12:0]) | |||||||||||||
Бит знака равен 0 для положительных чисел (измерения выше 0V) и 1 для отрицательных (измерения ниже 0V).
Чтобы пересчитать данные в соответствующие значения напряжения, используйте следующие формулы:
| Таблица 10 - Формулы пересчёта двоичных данных в напряжение для дифференциального режима | |
| Положительное число (SIGN = 0) | Vi = (D[12:0] / 8191) × 201.14V |
| Отрицательное число (SIGN = 1) | Vi = -((8191 - D[12:0]) / 8191) × 201.14V |
Ниже показан пример «hex-дампа» из трёх групп по два измерения в каждой:
Интерпретируются эти данные так:
- Сначала объедините пары байтов в 16-разрядные слова. Получится: 0x0518, 0xBF38, 0x0516, 0xBF36, 0x0516, 0xBF37.
- Затем выделите поле канала (биты 15 и 14) и знак (бит 13). В дифференциальном режиме получится: CH1: + 0x0518, CH2: - 0xBF38, CH1: + 0x0516, CH2: - 0xBF36, CH1: + 0x0516, CH2: - 0xBF37.
- Последний шаг - пересчитать эти значения в соответствующие напряжения (по формулам из таблицы 10): CH1: + 32.021V, CH2: - 4.887V, CH1: + 31.972V, CH2: - 4.936V, CH1: + 31.972V, CH2: - 4.911V.
Двоичный формат вывода данных предельно компактен, но нужно следить, чтобы не потерять ни одного байта данных. Хотя номер канала закодирован в выводе, потеря даже одного байта приведёт к постоянному «сдвигу интерпретации данных».
Шестнадцатеричный формат (HEX)
Этот формат - гибрид форматов ASCII и двоичного:
- Как и в формате ASCII, отдельные значения разделяются запятыми («,»), а группы отсчётов - точками с запятой («;»).
- Как и в двоичном формате, каждое значение передаётся в 16 битах (2 байтах) данных, кодирующих номер канала, знак и измеренное напряжение. Отличие от двоичного формата в том, что эти 16-разрядные слова отправляются в виде «HEX-строк». Иначе говоря, они «печатаются» в формате HEX с помощью символов ASCII.
Ниже показан пример «hex-дампа» из трёх групп по два измерения в каждой (с теми же входными сигналами, что и в предыдущем примере):
46 33 38 3B 30 35 31 36 2C 42 46 33 38 3B
F38;
Формат HEX - хороший компромисс между форматами ASCII и двоичным. Как и в ASCII, в нём можно восстановить синхронизацию, если часть символов пропущена. В отличие от двоичного формата, в нём используются печатаемые символы ASCII, что бывает желательно. При этом вывод HEX немного компактнее ASCII, поэтому позволяет достичь чуть более высокой частоты дискретизации.