КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Датчик кислотности жидкости (pH-метр), FLASH-I2C - Datasheet

Модуль - pH-метр, FLASH-I2C.

Техническое описание: Данная страница содержит подробное техническое описание модуля - pH-метр, FLASH-I2C и раскрывает работу с модулем через его регистры.

Ознакомиться с пользовательским описанием модуля и примерами работы с библиотекой iarduino_I2C_pH можно на странице Wiki - pH-метр, FLASH-I2C.

Важно: Не протирайте стеклянный наконечник датчика и не касайтесь его руками. Для очистки датчика споласкивайте его в дистиллированной воде. Не допускайте высыхание наконечника датчика. Храните датчик при надетом колпачке заполненном раствором для хранения.

Не допускайте контакта жидкости с выводами GND или VCC модуля во время измерений.

Назначение:

Модуль - pH-метр, FLASH-I2C - является устройством для измерения водородного показателя жидкости (показателя pH), характеризующего её кислотность. Принято считать, что уровень pH определён диапазоном от 0 до 14, но в действительности у сильно агрессивных сред он может выходить за указанный диапазон.

  • В нейтральной среде pH = 7,0
  • В кислой среде pH < 7,0. Чем агрессивнее кислота, тем ниже pH.
  • В щелочной среде pH > 7,0. Чем агрессивнее щёлочь, тем выше pH.

Модуль можно использовать для анализа жидкостей используемых в аквариумах, колодцах, для полива растений и т.д.

Управление модулем осуществляется по шине I2C, а чтение показаний модуля можно осуществлять, либо по шине I2C, либо по аналоговому выходу модуля.

К одной шине I2C можно подключить более 100 модулей. Адрес модуля на шине I2C (по умолчанию 0x09) назначается программно и хранится в его энергонезависимой памяти.

Описание:

Модуль построен на базе микроконтроллера STM32F030F4, операционного усилителя LMC7101, снабжён кнопкой калибровки, светодиодами информирующими о стадии калибровки, и собственным стабилизатором напряжения. Модуль способен определять водородный показатель pH в диапазоне от 0 до 14 и работать с различными датчиками, подключаемыми к разъему в центре платы.

Принцип действия модуля основан на измерении величины ЭДС электродной системы, значение которой пропорционально водородному показателю pH = -Lg[H+]. Отклонение потенциала с выхода датчика от подведённого к его входу на 59,16 мВ равносильно отклонению водородного показателя жидкости на 1 pH. Сигнал с датчика усиливается в 3 раза операционным усилителем и поступает, как на микроконтроллер модуля, так и на аналоговый выход модуля.

При погружении датчика в нейтральную жидкость (pH=7,0), напряжение на аналоговом выходе модуля устанавливается в 1,65В (половина от 3,3В). Увеличение напряжения аналогового выхода на 177,48мВ (59,16мВ усиленные в 3 раза) указывает о снижении водородного показателя на 1,0 от нейтральных 7,0 pH. Соответственно уменьшение напряжения на аналоговом выходе модуля указывает о увеличении водородного показателя жидкости в тех же пропорциях.

Рассчитать pH по напряжению на выходе модуля Vout можно по формуле:

pH = pHn + (Vn-Vout)/(Vstep*Ky)

  • pHn - нейтральный водородный показатель для датчика, значение по умолчанию 7,0.
    Реальное значение зависит от датчика и определяется модулем при калибровке.
  • Vstep - изменение напряжения датчика при изменении pH на 1.0, по умолчанию 0,05916В.
    Реальное значение зависит от датчика и определяется модулем при калибровке.
  • Vn - нейтральное напряжение на выходе модуля, значение по умолчанию 1,65В.
    Это напряжение которое устанавливается на выходе модуля при нейтральном pH.
    Реальное значение зависит многих факторов и корректируется модулем постоянно.
  • Ky=3 - коэффициент усиления операционного усилителя, константа.
  • Vout - напряжение на выходе модуля.

Запись и чтение данных модуля, осуществляется через его регистры. Доступ к регистрам модуля осуществляется по шине I2C.

С помощью регистров модуля можно выполнять следующие действия:

  • Изменить адрес данного модуля на шине I2C. При изменении адреса, можно указать, что новый адрес должен сохраниться в flash память модуля, а значит адрес сохранится и после отключения питания.
  • Включить / отключить внутреннюю подтяжку линий шины I2C (по умолчанию включена). Состояние подтяжки линий шины I2C автоматически сохраняется в flash память модуля, а значит состояние линий сохранится после отключения и включения питания.
  • Узнать версию прошивки модуля.
  • Указать водородные показатели pH жидкостей используемых для калибровки.
  • Выполнить калибровку модуля (модуль определит значения pHn, и Vstep).
  • Указать или прочитать значения pHn, Vstep и Ky (см. формулу выше).
  • Узнать напряжение на входе датчика Vin и выходе модуля Vout относительно GND.
  • Узнать нейтральное напряжение Vn на выходе модуля (см. формулу выше).
  • Узнать рассчитанный модулем водородный показатель жидкости pH.

Выводы модуля:

У модуля имеются три колодки выводов: разъем I2C (GND, Vcc, SDA, SCL), разъем A (GND, Vcc, Signal) и разъем посередине платы используемый для подключения датчика.

  • SCL - вход/выход линии тактирования шины I2C.
  • SDA - вход/выход линии данных шины I2C.
  • S (Signal) - аналоговый выход, для совместимости с проектами на аналоговых датчиках.
  • Vcc - вход питания от 3,3 до 5 В.
  • GND - общий вывод питания.

Вывод «Vcc» колодки «I2C» электрически соединён с выводом «V» колодки «A».

Вывод «GND» колодки «I2C» электрически соединён с выводом «G» колодки «A».

Характеристики:

  • Напряжение питания: 3,3 В или 5 В, поддерживаются оба напряжения.
  • Ток потребляемый модулем: до 5 мА.
  • Интерфейс: I2C.
  • Скорость шины I2C: 100 кбит/с.
  • Адрес на шине I2C: устанавливается программно (по умолчанию 0x09).
  • Уровень логической 1 на линиях шины I2C: Vcc (толерантны к 5В).
  • Диапазон измерений водородного показателя: от 0 до 14 pH.
  • Рабочая температура: от 0 до +60 °С.
  • Габариты: 30 х 30 мм.
  • Вес: 9 г.

Калибровка модуля:

Для калибровки потребуются две калибровочные (буферные) жидкости, с водородными показателями 4,0pH и 9.18pH, а так же дистиллированная вода. Все жидкости должны иметь температуру при которой планируется выполнять дальнейшие измерения.

  • Опустите датчик в стакан с дистиллированной водой, поводите датчиком споласкивая его, достаньте датчик и встряхните, избавившись от крупных капель.
  • Опустите датчик в жидкость с водородным показателем 4,0pH, подождите около 5 минут и нажмите на кнопку «Калибровка». Начнёт мигать светодиод на плате возле цифры 1, сигнализируя о ходе выполнения 1 стадии калибровки. Через некоторое время начнут мигать оба светодиода, ожидая начало второй стадии калибровки.
  • Достаньте датчик из первой жидкости, встряхните его избавившись от крупных капель, опустите датчик в стакан с дистиллированной водой, поводите датчиком споласкивая его, достаньте датчик и встряхните, избавившись от крупных капель.
  • Опустите датчик в жидкость с водородным показателем 9,18pH, подождите около 5 минут, и нажмите на кнопку «Калибровка». Начнёт мигать светодиод на плате возле цифры 2, сигнализируя о ходе выполнения 2 стадии калибровки. Через некоторое время оба светодиода перестанут светиться, что информирует о завершении калибровки.
  • Достаньте датчик из второй жидкости, встряхните его избавившись от крупных капель, опустите датчик в стакан с дистиллированной водой, поводите датчиком споласкивая его, достаньте датчик и встряхните, избавившись от крупных капель.

Водородные показатели pH используемых калибровочных жидкостей хранятся в регистрах 0x0C-0x0D «KNOWN_PH_1» (4.000pH) и 0x0E-0x0F «KNOWN_PH_2» (9.180pH) соответственно. При желании вы можете перезаписать эти значения и использовать для калибровки иные жидкости. Записанные значения сохранятся в энергонезависимую память модуля.

Калибровку можно проводить без нажатия кнопки на плате модуля, устанавливая биты CALC_1 и CALC_2 регистра 0x10 «CALIBRATION», тогда концентрация первой и второй калибровочной жидкости указывается в регистр 0x0A-0x0B «KNOWN_PH» без сохранения в энергонезависимую память (см. описание регистров).

Установка адреса:

Модуль - pH-метр, FLASH-I2C относится к серии «Flash» модулей. Все модули данной серии позволяют назначать себе адрес для шины I2C, как временно (новый адрес действует пока есть питание), так и постоянно (новый адрес сохраняется в энергонезависимую память и действует даже после отключения питания). По умолчанию все модули серии «Flash» поставляются с адресом 0x09.

Допускается указывать адреса в диапазоне: 7 < адрес < 127.

Установка адреса (без сохранения):

Если в регистр 0x06 «ADDRESS» записать значение из 7 бит адреса и младшим битом «SAVE_FLASH» равным 0, то указанный адрес станет адресом модуля на шине I2C, но он не сохранится во FLASH памяти, а значит после отключения питания или перезагрузки, установится прежний адрес модуля.

Установка адреса может быть заблокирована, если в регистре 0x01 «BITS_0» установлен бит «BLOCK_ADR». Этот бит по умолчанию сброшен, но он самостоятельно устанавливается при попытке записи данных в регистры предназначенные только для чтения. Бит «BLOCK_ADR» используется в модулях версии 5 и выше. Версия модуля хранится в регистре 0x05 «VERSION».

Установка адреса (с сохранением):

Для установки адреса с его сохранением в FLASH память модуля необходимо выполнить два действия:

  • Установить бит «SAVE_ADR_EN» в регистре 0x01 «BITS_0» (при этом адрес модуля останется прежним).
  • Записать в регистр 0x06 «ADDRESS» значение из 7 бит адреса и младшим битом «SAVE_FLASH» равным 1.

Если не выполнить первое действие (не установить бит «SAVE_ADR_EN»), то новый адрес будет проигнорирован и у модуля останется старый адрес. Бит «SAVE_ADR_EN» самостоятельно сбрасывается после сохранения адреса во FLASH память, а так же при обращении к любому регистру модуля (кроме записи в 0x01 «BITS_0» и 0x06 «ADDRESS»).

Установка адреса может быть заблокирована, если в регистре 0x01 «BITS_0» установлен бит «BLOCK_ADR». Этот бит по умолчанию сброшен, но он самостоятельно устанавливается при попытке записи данных в регистры предназначенные только для чтения. Бит «BLOCK_ADR» используется в модулях версии 5 и выше. Версия модуля хранится в регистре 0x05 «VERSION».

ВАЖНО: запись адреса занимает не менее 30 мс.

Регистры:

Карта регистров модуля:

адрес76543210
0x00 FLG_RESET FLG_SELF_TEST - FLG_GET_NAME RAND_ADR FLG_I2C_UP RESERVED RESERVED
0x01 SET_RESET SET_SELF_TEST - SET_GET_NAME BLOCK_ADR SET_I2C_UP SAVE_ADR_EN RESERVED
0x02
0x03
RESERVED
0x04 MODEL[7-0]
0x05 VERSION[7-0]
0x06 ADDRESS[6-0] SAVE_FLASH
0x07 CHIP_ID[7-0]
0x08
0x09
RESERVED
0x0A
0x0B
KNOWN_PH[7-0]
KNOWN_PH[15-8]
0x0C
0x0D
KNOWN_PH_1[7-0]
KNOWN_PH_1[15-8]
0x0E
0x0F
KNOWN_PH_2[7-0]
KNOWN_PH_2[15-8]
0x10 STAT_2* STAT_1* CODE_CALC_SAVE[5-2]* CALC_2 CALC_1
0x11
0x12
Ky[7-0]
Ky[15-8]
0x13
0x14
Vstp[7-0]
Vstp[15-8]
0x15
0x16
pHn[7-0]
pHn[15-8]
0x17
0x18
Vin[7-0]
Vin[15-8]
0x19
0x1A
Vout[7-0]
Vout[15-8]
0x1B
0x1C
Vn[7-0]
Vn[15-8]
0x1D
0x1E
pH[7-0]
pH[15-8]
0x1F - - - - - - STAB_ERR* CALC_ERR*

Регистры с адресами 0x02, 0x03 и 0x08, 0x09 зарезервированы, их биты сброшены в 0. Попытка записи данных в эти регистры будет проигнорирована модулем.

* Биты обозначенные звёздочкой отсутствуют в модулях с версией прошивки ниже 6.

Регистр 0x00 «FLAGS_0» - содержит флаги чтения состояния модуля:

Регистр только для чтения.

  • FLG_RESET - Флаг указывает на факт выполнения успешной перезагрузки модуля. Флаг самостоятельно сбрасывается после чтения регистра 0x00 «FLAGS_0».
  • FLG_SELF_TEST - Флаг указывает на результат выполнения самотестирования модуля (0-провал, 1-успех). Не поддерживается данным модулем.
  • FLG_GET_NAME - Если флаг установлен, значит модуль поддерживает вывод своего названия установкой бита «SET_GET_NAME» в регистре 0x01 «BITS_0».
  • RAND_ADR - Если флаг установлен, значит модуль поддерживает генерацию случайного адреса для шины I2C регистрами 0x64 «RANDOM_NUM», «RANDOM_ADR», «BUN_ADR».
  • FLG_I2C_UP - Если флаг установлен, значит модуль позволяет управлять подтяжкой линий шины I2C при помощи бита «SET_I2C_UP» регистра 0x01 «BITS_0».

Регистр 0x01 «BITS_0» - содержит биты установки состояния модуля:

Регистр для записи и чтения.

  • SET_RESET - Бит запускает программную перезагрузку модуля. О завершении перезагрузки свидетельствует установка флага «FLG_RESET» регистра 0x00 «FLAGS_0».
  • SET_SELF_TEST - Бит запускает самотестирование модуля. При успешном завершении самотестирования устанавливается флаг «FLG_SELF_TEST » регистра 0x00 «FLAGS_0». Не поддерживается данным модулем.
  • SET_GET_NAME - Бит указывает использовать регистр 0x04 «MODEL» для посимвольного вывода названия модуля. Бит сбрасывается автоматически через 300 мс после его установки. Если флаг «FLG_GET_NAME» регистра 0x00 «FLAGS_0» сброшен, значит модуль не поддерживает посимвольный вывод своего названия.
  • BLOCK_ADR - Бит блокирует смену и сохранение адреса для шины I2C. Бит устанавливается автоматически при попытке записи данных в регистры предназначенные только для чтения. Это защищает чип от ненамеренной смены адреса шумами на шине I2C, бит используется в модулях версии 5 и выше. Версия модуля хранится в регистре 0x05 «VERSION».
  • SET_I2C_UP - Бит управляет внутрисхемной подтяжкой линий шины I2C. Значение бита сохраняется в FLASH память модуля. Установка бита в «1» приведёт к подтяжке линий SDA и SCL до уровня 3,3 В. На линии I2C допускается устанавливать внешние подтягивающие резисторы и иные модули с подтяжкой до уровня 3,3 В или 5 В, вне зависимости от состояния текущего бита. Если флаг «FLG_I2C_UP» регистра 0x00 «FLAGS_0» сброшен, значит управление подтяжкой не поддерживается модулем.
  • SAVE_ADR_EN - Бит разрешает записать новый адрес модуля для шины I2C в FLASH память. Бит самостоятельно сбрасывается после сохранения адреса во FLASH память. Запись адреса выполняется следующим образом: нужно установить бит «SAVE_ADR_EN», после чего записать новый адрес в регистр 0x06 «ADDRESS» с установленным битом «SAVE_FLASH».

Регистр 0x04 «MODEL» - содержит идентификатор типа модуля:

Регистр только для чтения.

  • MODEL[7-0] - Для модуля - pH-метр, FLASH-I2C - идентификатор равен 0x1A.
  • Если установлен флаг «FLG_GET_NAME» регистра 0x00 «FLAGS_0» значит модуль поддерживает посимвольный вывод своего названия.
  • Установка бита «SET_GET_NAME» регистра 0x01 «BITS_0» включает режим посимвольного вывода названия модуля. При этом в регистре 0x04 «MODEL» появится первый символ названия модуля. В процессе чтения регистра 0x04 «MODEL» он будет возвращать очередной символ названия, вплоть до символа конца строки имеющего код 0x00. Далее цикл повторится.
  • Сброс бита «SET_GET_NAME» регистра 0x01 «BITS_0» отключает режим посимвольного вывода названия модуля. Регистр 0x04 «MODEL» вновь будет содержать идентификатор.

Регистр 0x05 «VERSION» - содержит версию прошивки модуля:

Регистр только для чтения.

  • VERSION[7-0] - Версия прошивки (от 0x01 до 0xFF).

Регистр 0x06 «ADDRESS» - отвечает за чтение/установку адреса модуля на шине I2C:

Регистр для чтения и записи.

  • ADDRESS[6-0] - 7 бит адреса модуля на шине I2C. При чтении возвращается текущий адрес модуля, при записи устанавливается указанный адрес модулю. Допускается указывать адреса в диапазоне: 7 < адрес < 127.
  • SAVE_FLASH - Флаг записи адреса в FLASH память модуля.
    Флаг имеет значение только при записи данных в регистр.
    Если флаг сброшен, то адрес в битах ADDRESS[6-0] будет установлен временно (до отключения питания, или сброса/записи нового адреса). Если флаг установлен, то адрес в битах ADDRESS[6-0] будет сохранён в FLASH память модуля (останется и после отключения питания), но только если в бите «SAVE_ADR_EN» регистра 0x01 «BITS_0» установлена логическая 1. Если флаг «SAVE_FLASH» установлен, а бит «SAVE_ADR_EN» сброшен, то адрес в битах ADDRESS[6-0] не будет установлен ни временно, ни постоянно.

Регистр 0x07 «CHIP_ID» - содержит идентификатор общий для всех модулей серии «Flash»:

Регистр только для чтения.

У всех модулей серии «Flash» в регистре «CHIP_ID» содержится значение 0x3C. Если требуется отличить модули серии «Flash» на шине I2C от сторонних модулей, то достаточно прочитать значение регистров 0x06 «ADDRESS» и 0x07 «CHIP_ID» всех модулей на шине I2C. Если 7 старших битов регистра 0x06 «ADDRESS» хранят адрес совпадающий с адресом модуля, а в регистре 0x07 «CHIP_ID» хранится значение 0x3C, то можно с большой долей вероятности утверждать, что данный модуль является модулем серии «Flash».

Регистры 0x0A-0x0B «KNOWN_PH» - получают значение pH калибровочной жидкости:

Регистры только для записи.

  • KNOWN_PH[15-0] - Известный водородный показатель жидкости используемой на первой или второй стадии калибровки модуля. Значение хранится в тысячных долях pH.
    Значение в диапазоне от 0 = 00.000pH до 14'000 = 14.000 pH, указывается перед установкой битов CALC_1 и CALC_2 регистра 0x10 «CALIBRATION».
    Записываемое значение применяется после записи старшего байта «Ky[15-8]».
    Если калибровка осуществляется нажатием кнопки на плате, то для первой стадии значение регистра аппаратно установится в значение 0x0C-0x0D «KNOWN_PH_1» pH, а на второй в значение 0x0E-0x0F «KNOWN_PH_2» pH.

Регистры 0x0C-0x0D «KNOWN_PH_1» - хранят значение pH 1 калибровочной жидкости:

Регистры 0x0E-0x0F «KNOWN_PH_2» - хранят значение pH 2 калибровочной жидкости:

Регистры для чтения и записи.

Значение регистров сохраняется после отключения питания.

  • Для модулей с версией прошивки 6 и выше, перед записью данных, необходимо разрешить их сохранение битами «CODE_CALC_SAVE[5-8]» регистра 0x10 «CALIBRATION». Узнать версию прошивки можно из регистра 0x05 «VERSION».
  • KNOWN_PH_1[15-0] - Значение аппаратно копируемое в регистр 0x0A-0x0B «KNOWN_PH» при первом нажатии на кнопку калибровки.
    Значение по умолчанию 4'000 = 4.000 pH.
  • KNOWN_PH_2[15-0] - Значение аппаратно копируемое в регистр 0x0A-0x0B «KNOWN_PH» при втором нажатии на кнопку калибровки.
    Значение по умолчанию 9'180 = 9.180 pH.
  • Записываемые значения применяются после записи старшего байта.

Регистр 0x10 «CALIBRATION» - содержит биты управления калибровкой модуля:

Регистр для чтения и записи.

Модуль аппаратно сбрасывает все биты по завершении вычислений.

  • FLG_STAT_1 - Флаг информирует о выполнении первой стадии калибровки модуля.
    Чтение флага позволяет определить начало и завершение первой стадии калибровки, вне зависимости как она была запущена, битом «BIT_CALC_1» или нажатием кнопки.
    Флаг устанавливается аппаратно при запуске первой стадии калибровки.
    Флаг сбрасывается аппаратно при завершении первой стадии калибровки.
    Флаг отсутствует у модулей с версией прошивки ниже 6. Узнать версию прошивки можно из регистра 0x05 «VERSION».
  • FLG_STAT_2 - Флаг информирует о выполнении второй стадии калибровки модуля.
    Чтение флага позволяет определить начало и завершение второй стадии калибровки, вне зависимости как она была запущена, битом «BIT_CALC_2» или нажатием кнопки.
    Флаг устанавливается аппаратно при запуске второй стадии калибровки.
    Флаг сбрасывается аппаратно при завершении второй стадии калибровки.
    Флаг отсутствует у модулей с версией прошивки ниже 6. Узнать версию прошивки можно из регистра 0x05 «VERSION».
  • CODE_CALC_SAVE[5-8] - Биты разрешения записи калибровочных значений в Flash память.
    Биты сбрасываются в значение (0000)2 автоматически.
    Биты необходимо установить в значение (1001)2 при запуске калибровки не кнопкой и до записи калибровочных значений через регистры: 0x0C-0x0D «KNOWN_PH_1», x0E-0x0F «KNOWN_PH_2», 0x11-0x12 «Ky», 0x13-0x14 «Vstp» и 0x15-0x16 «pHn».
    У модулей с версией прошивки ниже 6, биты «CODE_CALC_SAVE[5-8]» отсутствуют, их не нужно устанавливать в значение (1001)2. Узнать версию прошивки можно из регистра 0x05 «VERSION».
  • BIT_CALC_1 - Бит запуска первой стадии калибровки модуля.
    Устанавливать бит нужно не раньше чем через 20-30 секунд после опускания датчика в первую калибровочную жидкость. До установки бита требуется указать водородный показатель первой калибровочной жидкости в регистры 0x0A-0x0B «KNOWN_PH».
    Для модулей с версией прошивки 6 и выше, установу бита «BIT_CALC_1» производят вместе с записью значения (1001)2 в биты «CODE_CALC_SAVE[5-8]». Узнать версию прошивки можно из регистра 0x05 «VERSION».
  • BIT_CALC_2 - Бит запуска второй стадии калибровки модуля.
    Устанавливать бит нужно не раньше чем через 20-30 секунд после опускания датчика во вторую калибровочную жидкость. До установки данного бита требуется указать водородный показатель второй калибровочной жидкости в регистры 0x0A-0x0B «KNOWN_PH».
    Для модулей с версией прошивки 6 и выше, установу бита «BIT_CALC_2» производят вместе с записью значения (1001)2 в биты «CODE_CALC_SAVE[5-8]». Узнать версию прошивки можно из регистра 0x05 «VERSION».
  • Алгоритм калибровки модуля:
    По завершении двух стадий известны следующие значения:
    - Указаны водородные показатели двух калибровочных жидкостей pH1 и pH2.
    - Измерены напряжения на входе датчика во время калибровки Vin1 и Vin2 (В).
    - Измерены напряжения на выходе модуля во время калибровки Vout1 и Vout2 (В).
    - Известен коэффициент усиления операционного усилителя Ky.
    Этих данных достаточно для вычисления шага изменения напряжения датчика Vstep и нейтрального водородного показателя pHn при котором напряжение датчика равно нулю.
    Vstp = (ΔVout2-ΔVout1) / ((pH2-pH1)*Ky).
    pHn = pH1 - ( ΔVout1*(pH2-pH1) ) / (ΔVout2-ΔVout1).
    где ΔVout = Vin*Ky - Vout.
    По завершении вычислений, новые значения Vstp и pHn будут доступны из регистров 0x13-0x14 «Vstp» и 0x15-0x16 «pHn» соответственно.

Регистры 0x11-0x12 «Ky» - содержат коэффициент усиления ОУ:

Регистры для чтения и записи.

Значение регистров сохраняется после отключения питания.

  • Для модулей с версией прошивки 6 и выше, перед записью данных, необходимо разрешить их сохранение битами «CODE_CALC_SAVE[5-8]» регистра 0x10 «CALIBRATION». Узнать версию прошивки можно из регистра 0x05 «VERSION».
  • Ky[15-0] - Коэффициент усиления операционного усилителя в тысячных долях.
    Регистры хранят значение от 0 = 0.000, до 65'535 = 65.535.
    Значение по умолчанию 3'000 = 3.000.
    Коэффициент усиления операционного усилителя определяется резистивным делителем на плате модуля. Значение данных регистров используется модулем при вычислениях, но не меняет реальный коэффициент усиления ОУ.
    Записываемое значение применяется после записи старшего байта «Ky[15-8]».
  • Определить реальный коэффициент усиления можно следующим образом:
    - Отключить датчик от модуля.
    - Электрически соединить контакты разъема модуля используемого для подключения датчика.
    - Прочитать напряжения Vin и Vout из регистров 0x17-0x18 «Vin» и 0x19-0x1A «Vout».
    - Вычислить коэффициент усиления ОУ по формуле Ky = Vout / Vin.

Регистры 0x13-0x14 «Vstp» - содержат шаг изменения напряжения датчика на 1 pH:

Регистры для чтения и записи.

Значение регистров сохраняется после отключения питания.

  • Для модулей с версией прошивки 6 и выше, перед записью данных, необходимо разрешить их сохранение битами «CODE_CALC_SAVE[5-8]» регистра 0x10 «CALIBRATION». Узнать версию прошивки можно из регистра 0x05 «VERSION».
  • Vstp[15-0] - Шаг изменения напряжения датчика в сотых долях мВ.
    Регистры хранят значение от 0 = 0.00 мВ, до 65'535 = 655.35 мВ.
    Значение по умолчанию 5916 = 59.16 мВ.
    Значение регистра показывает на сколько изменится напряжение датчика при изменении водородного показателя жидкости на 1 pH.
    Записываемое значение применяется после записи старшего байта «Vstp[15-8]».
    Значение регистра может быть не только записано, но и рассчитано модулем по завершении двух стадий калибровки.

Регистры 0x15-0x16 «pHn» - содержат нейтральный водородный показатель для датчика:

Регистры для чтения и записи.

Значение регистров сохраняется после отключения питания.

  • Для модулей с версией прошивки 6 и выше, перед записью данных, необходимо разрешить их сохранение битами «CODE_CALC_SAVE[5-8]» регистра 0x10 «CALIBRATION». Узнать версию прошивки можно из регистра 0x05 «VERSION».
  • pHn[15-0] - Нейтральный водородный показатель для датчика в тысячных долях pH.
    Регистры хранят значение от 0 = 0.000 pH, до 65'535 = 65.535 pH.
    Значение по умолчанию 7000 = 7.000 pH.
    Потенциалы выводов датчика должны быть равны при нейтральном водородном показателе жидкости 7pH. Но в процессе эксплуатации датчика это значение может измениться, что исказит показания модуля. По этому в модуль введено значение нейтрального водородного показателя для датчика pHn, которое может отличаться от 7pH.
    Записываемое значение применяется после записи старшего байта «pHn[15-8]».
    Значение регистра может быть не только записано, но и рассчитано модулем по завершении двух стадий калибровки.

Регистры 0x17-0x18 «Vin» - содержат напряжение на входе датчика:

Регистры только для чтения.

  • Vin[15-0] - Напряжение на входе датчика в десятитысячных долях В.
    Регистры хранят значение от 0 = 0.0000 В, до 65'535 = 6.5535 В.
    Модуль смещает потенциал на входе датчика в значение 3.3 В / 2 / Ky = 3.3/2/3 = 0.55 В.
    При таком смещении, если датчик опустить в жидкость с нейтральным pH, то потенциал на выходе датчика будет равен потенциалу на его входе. Это значение усилится ОУ модуля в 3 раза и на аналоговом выходе модуля появится напряжение 1.65В, что равно половине от 3.3В. Это удобно при работе с аналоговым выходом модуля, так как всё что выше половины от 3.3В указывает на кислотную среду жидкости (pH<7.0), а всё что ниже, на щелочную (pH>7.0).
    Модуль постоянно считывает реальное напряжение на входе датчика и записывает в настоящие регистры. Именно это значение (а не константа 0,55В) используется модулем при вычислении водородных показателей жидкостей.

Регистры 0x19-0x1A «Vout» - содержат напряжение на аналоговом выходе модуля:

Регистры только для чтения.

  • Vout[15-0] - Напряжение на аналоговом выходе модуля в десятитысячных долях В.
    Регистры хранят значение от 0 = 0.0000 В, до 65'535 = 6.5535 В.
    Напряжение на аналоговый выход модуля подаётся с выхода операционного усилителя, вход которого подключён к выходу датчика.

Регистры 0x1B-0x1C «Vn» - содержат нейтральное напряжение на выходе модуля:

Регистры только для чтения.

  • Vn[15-0] - Нейтральное напряжение на выходе модуля в десятитысячных долях В.
    Регистры хранят значение от 0 = 0.0000 В, до 65'535 = 6.5535 В.
    Нейтральное напряжение на выходе модуля это напряжение которое должно установиться на аналоговом выходе при нейтральном pH (при равенстве потенциалов на входе и выходе датчика). Vn = Vin * Kу.

Регистры 0x1D-0x1E «pH» - содержат водородный показатель жидкости:

Регистры только для чтения.

  • pH[15-0] - Водородный показатель жидкости в тысячных долях pH.
    Регистры хранят значение от 0 = 0.000 pH, до 65'535 = 65.535 pH.
    Водородный показатель жидкости определяется модулем по формуле:
    pH = pHn + (Vn-Vout)/(Vstep*Ky).

Регистр 0x1F «ERROR» - содержит флаги ошибок:

Регистр только для чтения.

  • Регистр отсутствует у модулей с версией прошивки ниже 6. Узнать версию прошивки можно из регистра 0x05 «VERSION».
  • FLG_CALC_ERR - Флаг указывает на ненормализованные показания pH. Устанавливается если показания pH не стабильны (быстро меняются).
  • FLG_STAB_ERR - Флаг указывает на провал калибровки. Если флаг установился, значит результат калибровки проигнорирован модулем и не сохранился. Флаг сбрасывается при старте калибровки.

Регистры 100+:

У младших версий модулей линейки «FLASH-I2C» нет блока регистров «100+», так же этого блока нет у модулей линейки «Metro», о его наличии свидетельствует установленный флаг «RAND_ADR» в регистре 0x00 «FLAGS_0».

Блок регистров «100+» с адресами от 0x64 (100)10 до 0x75 (117)10 не участвует в работе модуля, он предназначен только для обнаружения модулей с одинаковыми адресами и назначения этим модулям разных адресов, не отключая их от шины I2C.

Карта регистров 100+:

адрес76543210
0x64
0x66
RANDOM_NUM[7-0]
RANDOM_NUM[15-8]
0x66 RANDOM_ADR[7-0]
0x67 BUN_ADR_0F BUN_ADR_0E BUN_ADR_0D BUN_ADR_0C BUN_ADR_0B BUN_ADR_0A BUN_ADR_09 BUN_ADR_08
0x68 BUN_ADR_17 BUN_ADR_16 BUN_ADR_15 BUN_ADR_14 BUN_ADR_13 BUN_ADR_12 BUN_ADR_11 BUN_ADR_10
0x69 BUN_ADR_1F BUN_ADR_1E BUN_ADR_1D BUN_ADR_1C BUN_ADR_1B BUN_ADR_1A BUN_ADR_19 BUN_ADR_18
0x6A BUN_ADR_27 BUN_ADR_26 BUN_ADR_25 BUN_ADR_24 BUN_ADR_23 BUN_ADR_22 BUN_ADR_21 BUN_ADR_20
0x6B BUN_ADR_2F BUN_ADR_2E BUN_ADR_2D BUN_ADR_2C BUN_ADR_2B BUN_ADR_2A BUN_ADR_29 BUN_ADR_28
0x6C BUN_ADR_37 BUN_ADR_36 BUN_ADR_35 BUN_ADR_34 BUN_ADR_33 BUN_ADR_32 BUN_ADR_31 BUN_ADR_30
0x6D BUN_ADR_3F BUN_ADR_3E BUN_ADR_3D BUN_ADR_3C BUN_ADR_3B BUN_ADR_3A BUN_ADR_39 BUN_ADR_38
0x6E BUN_ADR_47 BUN_ADR_46 BUN_ADR_45 BUN_ADR_44 BUN_ADR_43 BUN_ADR_42 BUN_ADR_41 BUN_ADR_40
0x6F BUN_ADR_4F BUN_ADR_4E BUN_ADR_4D BUN_ADR_4C BUN_ADR_4B BUN_ADR_4A BUN_ADR_49 BUN_ADR_48
0x70 BUN_ADR_57 BUN_ADR_56 BUN_ADR_55 BUN_ADR_54 BUN_ADR_53 BUN_ADR_52 BUN_ADR_51 BUN_ADR_50
0x71 BUN_ADR_5F BUN_ADR_5E BUN_ADR_5D BUN_ADR_5C BUN_ADR_5B BUN_ADR_5A BUN_ADR_59 BUN_ADR_58
0x72 BUN_ADR_67 BUN_ADR_66 BUN_ADR_65 BUN_ADR_64 BUN_ADR_63 BUN_ADR_62 BUN_ADR_61 BUN_ADR_60
0x73 BUN_ADR_6F BUN_ADR_6E BUN_ADR_6D BUN_ADR_6C BUN_ADR_6B BUN_ADR_6A BUN_ADR_69 BUN_ADR_68
0x74 BUN_ADR_77 BUN_ADR_76 BUN_ADR_75 BUN_ADR_74 BUN_ADR_73 BUN_ADR_72 BUN_ADR_71 BUN_ADR_70
0x75 BUN_ADR_7F BUN_ADR_7E BUN_ADR_7D BUN_ADR_7C BUN_ADR_7B BUN_ADR_7A BUN_ADR_79 BUN_ADR_78

Регистры 0x64-0x65 «RANDOM_NUM» - содержат случайное число:

Регистры только для чтения.

  • RANDOM_NUM[15-0] - Содержит двухбайтное случайное число позволяющее определить наличие нескольких устройств с одинаковым адресом.
  • Значение из регистров читается одним пакетом (младший и старший байт). После чтения старшего байта, модуль на 5мс перейдёт в режим «молчания». В этом режиме модуль будет отправлять NACK мастеру после получения номера регистра в любых запросах.
  • Если прочитать регистры 0x64-0x65 «RANDOM_NUM» дважды, с промежутком между чтениями менее 5мс, то первый раз мы получим два байта случайного числа, а второй раз модуль откажет в чтении, так как отправит NACK. Но это только в том случае, если адрес модуля уникален.
  • Если адрес принадлежит нескольким устройствам, то и отвечать на запрос чтения будут несколько устройств. При первом чтении регистров 0x64-0x65 «RANDOM_NUM», биты случайного числа у разных модулей не совпадут, в результате чего один модуль передаст оба байта случайного числа и перейдёт в режим «молчания», а другой модуль (или модули) зафиксирует потерю арбитража и не передаст старший байт, следовательно, и не перейдёт в режим «молчания». Значит при повторном чтении регистров, мы опять получим два байта случайного числа от того модуля который не перешёл в режим «молчания», что будет свидетельствовать о наличии нескольких устройств на одном адресе.

Регистр 0x66 «RANDOM_ADR» - случайный адрес:

Регистр для чтения и записи.

  • RANDOM_ADR[7-0] - Позволяет задавать модулю случайный временный адрес, подтверждать временный адрес и получать информацию о состоянии временного адреса.
  • Запись 0x0F - Назначить модулю случайный временный адрес на 50 мс.
    В регистре 0x06 «ADDRESS» останется значение постоянного адреса.
  • Запись 0xF0 - Подтвердить назначенный временный адрес до отключения питания.
    В регистре 0x06 «ADDRESS» появится назначенный временный адрес.
  • Чтение 0x55 - Назначен временный случайный адрес на 50 мс.
  • Чтение 0xFF - Назначенный временный адрес подтверждён до отключения питания.
  • Чтение 0x00 - Временный адрес не назначался или отменён по истечении 50 мс.
  • Если на шине несколько устройств имеют одинаковый адрес, то запись значения 0x0F в регистр 0x66 «RANDOM_ADR» этих устройств, приведёт к тому, что каждый модуль сам себе назначит временный случайный адрес на 50 мс. За указанное время следует найти все новые временные адреса устройств и подтвердить их отправив в регистр 0x66 «RANDOM_ADR» значение 0xF0.
  • Примечание: Случайный адрес модуль выбирает сам из диапазона от 0x08 до 0x7E включительно, кроме адресов запрещённых регистрами 0x67-0x75 «BUN_ADR».

Регистры 0x67-0x75 «BUN_ADR» - запрещают назначать адреса:

Регистры для чтения и записи.

  • BUN_ADR_08 - Бит запрещает назначать адрес 0x08 регистром 0x66 «RANDOM_ADR».
  • BUN_ADR_09 - Бит запрещает назначать адрес 0x09 регистром 0x66 «RANDOM_ADR».
  • ...
  • BUN_ADR_7D - Бит запрещает назначать адрес 0x7D регистром 0x66 «RANDOM_ADR».
  • BUN_ADR_7E - Бит запрещает назначать адрес 0x7E регистром 0x66 «RANDOM_ADR».
  • Если бит регистров 0x67-0x75 «BUN_ADR» установлен, то модуль не назначит себе случайный временный адрес соответствующий установленному биту.
  • Если на шине есть несколько устройств с одинаковым адресом, то отправка команды 0x0F в регистр 0x66 «RANDOM_ADR» этих устройств, приведёт к тому, что каждый модуль сам себе назначит временный случайный адрес на 50 мс. Но вновь назначенный адрес может совпасть с адресом другого модуля на шине I2C, особенно если их много. По этому перед назначением случайного временного адреса рекомендуется записать в регистры 0x67-0x75 «BUN_ADR» все найденные на шине I2C уникальные адреса.

Доступ к данным регистров:

Каждый регистр модуля хранит 1 байт данных. Так как модуль использует интерфейс передачи данных I2C, то и доступ к данным охарактеризован им.

Обмен данными по шине I2C происходит по одному биту за один такт, после каждых переданных 8 бит (1 байта) принимающее устройство отвечает передающему одним битом: «ACK» в случае успешного приёма, или «NACK» в случае ошибки. Пакет приёма/передачи данных начинается сигналом «START» и завершается сигналом «STOP». Первый байт пакета всегда состоит из 7 бит адреса устройства и одного (младшего) бита R/W.

Сигналы интерфейса передачи данных I2C:

    Для удобства восприятия сигналов они выполнены в следующих цветах:
  • Зелёный - сигналы формируемые мастером.
  • Красный - данные отправляемые мастером.
  • Синий - данные отправляемые модулем.
  • Фиолетовый - данные отправляемые мастером или модулем.
  • «START» - отправляется мастером в начале пакета приема/передачи данных. Сигнал представляет переход уровня линии «SDA» из «1» в «0» при наличии «1» на линии «SCL».
  • «STOP» - отправляется мастером в конце пакета приёма/передачи данных. Сигнал представляет переход уровня линии «SDA» из «0» в «1» при наличии «1» на линии «SCL».
  • БИТ - значение бита считывается с линии «SDA» по фронту импульса на линии «SCL».
  • «ACK» - бит равный 0, отправляется после успешного приёма байта данных.
  • «NACK» - бит равный 1, отправляется после байта данных в случае ошибки.
  • ПЕРВЫЙ БАЙТ - отправляется мастером, состоит из 7 бит адреса и бита «RW».
  • «R/W» - младший бит первого байта данных указывает направление передачи данных пакета, 1 - прием (от модуля к мастеру), 0 - передача (от мастера в модуль).
  • «RESTART» - повторный старт, отправляется мастером внутри пакета. Сигнал представляет из себя «START» отправленный не на свободной шине, а внутри пакета.

ВАЖНО: Все изменения на линии «SDA» должны происходить только при наличии «0» на линии «SCL» за исключением сигналов «START», «STOP» и «RESTART».

    Запись данных в регистры:

    • Отправляем сигнал «START».
    • Отправляем первый байт: 7 бит адреса модуля и бит «R/W» равный 0 (запись).
      Получаем ответ от модуля в виде одного бита «ACK».
    • Отправляем второй байт: адрес регистра в который будет произведена запись.
      Получаем ответ от модуля в виде одного бита «ACK».
    • Отправляем третий байт: данные для записи в регистр.
      Получаем ответ от модуля в виде одного бита «ACK».
    • Далее можно отправить четвёртый байт данных для записи в следующий по порядку регистр и т.д.
    • Отправляем сигнал «STOP».

    Пример записи в один регистр:

    Запись значения 0x2A в регистр 0x06 модуля с адресом 0x09:

                                     // Запись в регистр методами библиотеки Wire.h
    Wire.beginTransmission(0x09);    // Инициируем передачу данных в устройство с адресом 0x09.
    Wire.write(0x06);                // Записываем в буфер байт адреса регистра.
    Wire.write(0x26);                // Записываем в буфер байт который будет записан в регистр.
    Wire.endTransmission();          // Выполняем передачу адреса и байтов из буфера. Функция возвращает: 0-передача успешна / 1 - переполнен буфер для передачи / 2 - получен NACK при передаче адреса / 3 - получен NACK при передаче данных / 4 - другая ошибка.
    

    Пример записи в несколько регистров подряд:

    Запись в модуль с адресом 0x09 нескольких значений начиная с регистра 0x12:
    В регистр 0x12 запишется значение 0x0F, в следующий по порядку регистр (0x13) запишется значение 0x30 и в следующий по порядку регистр (0x14) запишется значение 0xB1.

                                     // Запись в регистры методами библиотеки Wire.h
    byte data[3] = {0x0F,0x30,0xB1}; // Определяем массив с данными для передачи.
    Wire.beginTransmission(0x09);    // Инициируем передачу данных в устройство с адресом 0x09.
    Wire.write(0x12);                // Записываем в буфер байт адреса первого регистра.
    Wire.write(data, 3);             // Записываем в буфер 3 байта из массива data.
    Wire.endTransmission();          // Выполняем передачу адреса и байт из буфера. Функция возвращает: 0-передача успешна / 1 - переполнен буфер для передачи / 2 - получен NACK при передаче адреса / 3 - получен NACK при передаче данных / 4 - другая ошибка.

    Чтение данных из регистров:

    • При чтении пакет делится на 2 части: запись № регистра и чтение его данных.
    • Отправляем сигнал «START».
    • Отправляем первый байт: 7 бит адреса модуля и бит «R/W» равный 0 (запись).
      Получаем ответ от модуля в виде одного бита «ACK».
    • Отправляем второй байт: адрес регистра из которого нужно прочитать данные.
      Получаем ответ от модуля в виде одного бита «ACK».
    • Отправляем сигнал «RESTART».
    • Отправляем первый байт после «RESTART»: 7 бит адреса и бит «R/W» равный 1 (чтение).
      Получаем ответ от модуля в виде одного бита «ACK».
    • Получаем байт данных из регистра модуля.
      Отвечаем битом «ACK» если хотим прочитать следующий регистр, иначе отвечаем «NACK».
    • Отправляем сигнал «STOP».

    Пример чтения одного регистра:

    Чтение из модуля с адресом 0x09 байта данных регистра 0x05:
    (в примере модуль вернул значение 0x01).

                                     // Чтение регистра методами библиотеки Wire.h
    byte data;                       // Объявляем переменную для чтения байта данных.
    Wire.beginTransmission(0x09);    // Инициируем передачу данных в устройство с адресом 0x09.
    Wire.write(0x05);                // Записываем в буфер байт адреса регистра.
    Wire.endTransmission(false);     // Выполняем передачу без установки состояния STOP.
    Wire.requestFrom(0x09, 1);       // Читаем 1 байт из устройства с адресом 0x09. Функция возвращает количество реально принятых байтов. Так как предыдущая функция не установила состояние STOP, то состояние START установленное данной функцией будет расценено как RESTART.
    data=wire.read();                // Сохраняем прочитанный байт в переменную data.

    Пример чтения нескольких регистров подряд:

    Чтение из модуля с адресом 0x09 нескольких регистров начиная с регистра 0x05:
    (в примере модуль вернул значения: 0x01 из рег. 0x05, 0x13 из рег. 0x06, 0xC3 из рег. 0x07).

                                     // Чтение регистров методами библиотеки Wire.h
    byte data[3];                    // Объявляем массив для чтения данных.
    Wire.beginTransmission(0x09);    // Инициируем передачу данных в устройство с адресом 0x09.
    Wire.write(0x05);                // Записываем в буфер байт адреса регистра.
    Wire.endTransmission(false);     // Выполняем передачу без установки состояния STOP.
    Wire.requestFrom(0x09, 3);       // Читаем 3 байта из устройства с адресом 0x09. Функция возвращает количество реально принятых байтов. Так как предыдущая функция не установила состояние STOP, то состояние START установленное данной функцией будет расценено как RESTART.
    int i=0;                         // Определяем счётчик номера прочитанного байта.
    while( Wire.available() ){       // Выполняем цикл while пока есть что читать из буфера.
      if(i<3){                       // Лучше делать такую проверку, чтоб не записать данные за пределы массива data!
        data[i] = wire.read(); i++;  // Читаем очередной байт из буфера в массив data.
      }                              //
    }                                //

    Примечание:

    • Если на линии I2C только один мастер, то сигнал «RESTART» можно заменить на сигналы «STOP» и «START».
    • Рекомендуется не выполнять чтение или запись данных чаще 200 раз в секунду.
      Обратите внимание на сигналы «RESTART» и «STOP» в пакетах чтения данных:
    • Между фронтом и спадом сигнала «RESTART» проходит фронт импульса на линии «SCL», что расценивается как передача бита равного 1.
    • Между сигналом «NACK» и сигналом «STOP» проходит фронт импульса на линии «SCL», что расценивается как передача бита равного 0.
    • Эти биты не сохраняются в модулях и не расцениваются как ошибки.

    Модуль не поддерживает горячее подключение: Подключайте модуль только при отсутствии питания и данных на шине I2C. В противном случае потребуется отключить питание при уже подключённом модуле.

    Пример чтения водородного показателя жидкости:

    Следующий скетч выводит кислотность жидкости в монитор последовательного порта.

    #include <Wire.h>                            // Подключаем библиотеку Wire для работы с шиной I2C.
                                                 //
    const uint8_t  ADDRESS = 0x09;               // Определяем адрес модуля на шине I2C.
    const uint8_t  REG_pH  = 0x1D;               // Определяем адрес регистра хранящего водородный показатель (мл. байт).
    uint16_t       VAL_pH;                       // Объявляем переменную для получения водородного показателя.
                                                 //
    void setup(){                                //
         Serial.begin(9600);                     // Инициируем связь с монитором последовательного порта на скорости 9600 бит/сек.
         while(!Serial){;}                       // Ждём готовность к работе аппаратной шины UART.
         Wire.setClock(100000L);                 // Устанавливаем скорость передачи данных по шине I2C.
         Wire.begin();                           // Инициируем работу c шиной I2C в качестве мастера.
         delay(100);                             //
    }                                            //
                                                 //
    void loop(){                                 //
         Wire.beginTransmission(ADDRESS);        // Инициируем передачу данных по шине I2C к устройству с адресом ADDRESS и битом RW=0 (запись). При этом сама передача не начнётся.
         Wire.write(REG_pH);                     // Функция write() помещает значение своего аргумента в буфер для передачи, в данном случае это адрес регистра REG_pH.
         Wire.endTransmission(false);            // Выполняем инициированную ранее передачу данных (параметр false указывает что состояние STOP устанавливать не требуется).
         Wire.requestFrom(ADDRESS, 2);           // Читаем из модуля с адресом ADDRESS, 2 байта данных в буфер библиотеки Wire. Так как предыдущая функция не установила состояние STOP, то состояние START установленное данной функцией будет расценено как RESTART.
         VAL_pH  = (uint16_t)Wire.read();        // Сохраняем первый байт полученных данных (мл.).
         VAL_pH |= (uint16_t)Wire.read()<<8;     // Добавляем второй байт полученных данных (ст.).
         Serial.print("Кислотность жидкости = ");// Выводим текст.
         Serial.print((float)VAL_pH/1000.0f,1);  // Выводим водородный показатель с 1 знаками после запятой.
         Serial.print(" pH.\r\n");               // Выводим текст.
         delay(500);                             //
    }                                            //
      Действия выполняемые в коде setup():
    • Инициализация работы с шиной UART на скорости 9'600 бит/сек.
    • Инициализация работы с шиной I2C на скорости 100'000 бит/сек.
      Действия выполняемые в коде loop():
    • Получение от модуля с адресом ADDRESS данных из регистра REG_pH в VAL_pH.
    • Вывод текста и значения переменной VAL_pH в монитор последовательного порта.
    • Значение VAL_pH перед выводом делится на 1000, т.к. оно хранится в тысячных долях pH.
    • Пауза на пол секунды.

    Габариты:

    Все модули линейки "Trema" выполнены в одном формате:

    Ссылки:




    Обсуждение

    Гарантии и возврат Используя сайт Вы соглашаетесь с условями