Форматы вывода данных
Tibbit #43-1 поддерживает три формата вывода данных: ASCII, двоичный и шестнадцатеричный. Какой формат использовать при низких частотах выборки, зависит только от ваших предпочтений и задач. Однако если вы планируете непрерывную потоковую передачу данных на высокой частоте выборки, Tibbo рекомендует двоичный формат - особенно если нужная частота выборки близка к максимальному пределу для режимов ASCII и шестнадцатеричного (см. Технические характеристики).
Формат ASCII
В формате ASCII микроконтроллер PIC, установленный на модуле, вычисляет фактические напряжения по двоичным данным измерений, полученным от АЦП, и выводит эти напряжения в удобочитаемом десятичном виде. Каждое число округляется до четырёх знаков после запятой*.
В выводе напряжения каналов разделяются запятой («,»), а каждая группа выборки заканчивается точкой с запятой («;»). Термин «группа выборки» обозначает группу включённых в данный момент каналов. В несимметричном режиме при включённых всех каналах в группе будет четыре измерения, выполняемых одно за другим. Если часть каналов отключена, в каждой группе будет меньше четырёх измерений.
Ниже показан пример вывода из трёх групп по два измерения в каждой:
Обратите внимание: помнить, какие каналы включены, должно само приложение, так как в этом режиме номера каналов не выводятся. Например, два элемента каждой группы в приведённом выше выводе могут относиться к CH1 и CH2, или к CH1 и CH3, или к CH1 и CH4 - по самому выводу это определить нельзя.
* Это, разумеется, не показатель точности измерений АЦП. Значение «1.2345» не означает, что АЦП смог измерить поданное напряжение с точностью 0.0001V. Поскольку эффективное разрешение этого модуля составляет 11 бит (10 бит плюс знак), фактический «шаг» измерения АЦП равен 20V / 2048 = 0.0098V (для несимметричного режима).
Двоичный формат
Двоичный формат вывода данных самый компактный, поэтому он рекомендуется для высоких частот выборки. Значение, полученное с канала АЦП, и номер канала кодируются всего в 16 битах данных. Биты 15 и 14 кодируют номер канала, а биты 13-0 содержат результат преобразования АЦП. Каждое 16-битное слово отправляется как два байта; первым отправляется старший байт.
Номер канала кодируется так:
| Таблица 6 - кодирование номера канала | ||
| Канал | B15 | B14 |
| CH1 | 0 | 0 |
| CH2 | 0 | 1 |
| CH3 | 1 | 0 |
| CH4 | 1 | 1 |
Кодирование данных АЦП зависит от того, в каком режиме работает Tibbit #43-1 - несимметричном или дифференциальном, как описано ниже:
Несимметричный режим
| Таблица 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) × 10V |
| Отрицательное число (SIGN = 1) | Vi = -((4095 - D[11:0]) / 4095) × 10V |
Дифференциальный режим
| Таблица 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) × 20V |
| Отрицательное число (SIGN = 1) | Vi = -((8191 - D[12:0]) / 8191) × 20V |
Ниже показан пример вывода в виде «hex-дампа» из трёх групп по два измерения в каждой:
Вот как интерпретировать эти данные:
- Сначала объедините пары байтов в 16-битные слова. Получится: 0x099D, 0x7666, 0x099A, 0x7665, 0x099B, 0x7668.
- Затем выделите поле канала (биты 15 и 14) и знак (бит 13). В несимметричном режиме получится: CH1: + 0x99D, CH2: - 0x1666, CH1: + 0x99A, CH2: - 0x1665, CH1: + 0x99B, CH2: - 0x1668.
- Последний шаг - преобразовать эти значения в соответствующие напряжения (по формулам из таблицы 10): CH1: + 6.0098V, CH2: - 6.0000V, CH1: + 6.0024V, CH2: - 6.0024V, CH1: + 6.0049V, CH2: - 5.9951V.
Двоичный формат вывода данных предельно компактен, но нужно следить, чтобы не потерять ни одного байта данных. Хотя номер канала закодирован в выводе, пропуск единственного байта данных приведёт к постоянному «сдвигу интерпретации данных».
Шестнадцатеричный (HEX) формат
Этот формат представляет собой гибрид форматов ASCII и двоичного:
- Как и в формате ASCII, отдельные значения разделяются запятыми («,»), а группы выборки - точками с запятой («;»).
- Как и в двоичном формате, каждое значение передаётся в 16 битах (2 байтах) данных, в которых закодированы номер канала, знак и измеренное напряжение. Отличие от двоичного формата в том, что эти 16-битные слова отправляются как «HEX-строки», то есть «печатаются» в шестнадцатеричном виде символами ASCII.
Ниже показан пример вывода в виде «hex-дампа» из трёх групп по два измерения в каждой:
HEX-формат - хороший компромисс между форматами ASCII и двоичным. Как и формат ASCII, он позволяет восстановить синхронизацию, если часть символов была пропущена. В отличие от двоичного формата, он использует печатаемые символы ASCII, что может быть удобно. При этом HEX-вывод немного компактнее ASCII, поэтому позволяет достичь чуть более высокой частоты выборки.