Arduino i2c relay

Содержание

Модуль твердотельное реле, 4 канала, FLASH-I2C

Общие сведения:

Модуль твердотельных реле на 4 канала, I2C, Flash — является устройством коммутации, которое позволяет подключать и отключать устройства к сети переменного тока от 120В до 240В. При этом устройства подключённые через выходные контакты модуля, не должны потреблять более 2А переменного тока (на каждый канал).

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

Модуль можно использовать в любых проектах где требуется управлять устройствами с напряжением питания от 120В до 240В и потреблением переменного тока до 2А.

Видео:

Спецификация:

  • Напряжение питания: 5 В (постоянного тока).
  • Потребляемый ток: до 20 мА.
  • Коммутируемое напряжение: от 120 В до 250 В (переменного тока).
  • Коммутируемый ток: до 2 А (на каждый канал).
  • Количество каналов: 4.
  • Интерфейс: I2C.
  • Скорость шины I2C: 100 кбит/с.
  • Адрес на шине I2C: устанавливается программно (по умолчанию 0x09).
  • Уровень логической 1 на линиях шины I2C: 3,3 В (толерантны к 5 В).
  • Рабочая температура: от -40 до +65 °C.
  • Габариты с креплением: 55 х 55 мм.
  • Габариты без креплений: 55 х 45 мм.
  • Вес: 30 г.

Подключение:

Перед подключением модуля ознакомьтесь с разделом «Смена адреса модуля на шине I2C» в данной статье.

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

  • SCL — вход/выход линии тактирования шины I2C.
  • SDA — вход/выход линии данных шины I2C.
  • Vcc — вход питания модуля 5В.
  • GND — общий вывод питания.

В правой части платы расположены четыре разъема: K1, K2, K3, K4, это выходы, через контакты которых подключаются силовые устройства к сети переменного тока от 120В до 250В. Устройства не должны потреблять более 2А (на каждый канал).

  • K1 — разъём первого реле с нормально разомкнутыми «NO» (Normally Open) контактами.
  • K2 — разъём второго реле с нормально разомкнутыми «NO» (Normally Open) контактами.
  • K3 — разъём третьего реле с нормально разомкнутыми «NO» (Normally Open) контактами.
  • K4 — разъём четвёртого реле с нормально разомкнутыми «NO» (Normally Open) контактами.

Для удобства подключения к Arduino воспользуйтесь Trema Shield, Trema Power Shield или Motor Shield.

Способ — 1: Используя провода и Piranha UNO

Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO

Способ — 2: Используя проводной шлейф и Trema Shield

Используя 4-х проводной шлейф подключаем к Trema Shield

Подключение нескольких устройств

Благодаря шине I2C возможно подключение более 100 устройств:

Подключение нагрузки:

При включении нагрузки загорается светодиод соответствующего канала:

Питание:

Входное напряжение питания логической части модуля, 5В постоянного тока, подаётся на выводы Vcc и GND любого разъёма шины I2C.

Подробнее о модуле:

Модуль твердотельных реле на 4 канала, I2C, Flash построен на базе микроконтроллера STM32F030F4, снабжен собственным стабилизатором напряжения и четырьмя твердотельными реле.

Силовые устройства подключаются к сети переменного тока (от 120В до 240В) через контакты разъемов «K1», «K2», «K3», «K4».

    О состоянии реле можно судить по светодиодам расположенным рядом с реле.
  • Если светодиод выключен, значит реле отключено и его выводы разъединены.
  • Если светодиод светится, значит реле включено и его выводы замкнуты.

Специально для работы с модулями силовых ключей и реле, нами разработана библиотека iarduino_I2C_Relay которая позволяет реализовать все функции модуля.

Подробнее про установку библиотеки читайте в нашей инструкции.

Смена адреса модуля на шине I2C:

По умолчанию все модули FLASH-I2C имеют установленный адрес 0х09. Если вы планируете подключать более 1 модуля на шину I2C, необходимо изменить адреса модулей таким образом, чтобы каждый из них был уникальным. Более подробно о том, как изменить адрес, а также о многом другом, что касается работы FLASH-I2C модулей, вы можете прочесть в этой статье.

В первой строке скетча необходимо записать в переменную newAddress адрес, который будет присвоен модулю. После этого подключите модуль к контроллеру и загрузите скетч. Адрес может быть от 0х07 до 0х7F.

Примеры:

Поочерёдное включение и выключение реле модуля:

Данный пример будет поочерёдно включать и выключать реле.

Чтение состояний реле модуля:

Данный пример считывает состояние реле и выводит их в монитор последовательного порта.

Защита от зависаний Arduino и отключения шины I2C:

При нормальной работе данного примера, в первую половину секунды включено первое реле, а во вторую половину секунды включено второе реле.

Если отключить от модуля вывод SDA или SCL шины I2C, то реле перестанут переключаться, но одно из реле останется включённым. Подождав от 4 до 5 секунд, сработает сторожевой таймер модуля и все реле отключатся. Время ожидания зависит от того, в каком месте выполнения кода был отключён вывод.

Примечание: Время назначенное сторожевому таймеру функцией enableWDT() должно быть больше чем время между вызовами функции resetWDT() .

Определение модуля на шине I2C и изменение его адреса:

Для работы этого примера необходимо что бы на шине I2C был только один модуль.

В первой строке скетча определяется переменная «i» с указанием адреса которой будет присвоен модулю (это значение Вы можете изменить на то, которое требуется Вам).

Данный пример определяет тип модуля, его текущий адрес и присваивает модулю новый адрес на шине I2C.

Описание функций библиотеки:

В данном разделе описаны функции библиотеки iarduino_I2C_Relay для работы с модулями реле.

Данная библиотека может использовать как аппаратную, так и программную реализацию шины I2C. О том как выбрать тип шины I2C рассказано в статье Wiki — расширенные возможности библиотек iarduino для шины I2C.

Подключение библиотеки:

  • Если адрес модуля известен (в примере используется адрес 0x09):
  • Если адрес модуля неизвестен (адрес будет найден автоматически):

При создании объекта без указания адреса, на шине должен находиться только один модуль.

Функция begin();

  • Назначение: Инициализация работы с модулем.
  • Синтаксис: begin();
  • Параметры: Нет.
  • Возвращаемое значение: bool — результат инициализации (true или false).
  • Примечание: По результату инициализации можно определить наличие модуля на шине.
  • Пример:

Функция reset();

  • Назначение: Перезагрузка модуля.
  • Синтаксис: reset();
  • Параметры: Нет.
  • Возвращаемое значение: bool — результат перезагрузки (true или false).
  • Пример:

Функция changeAddress();

  • Назначение: Смена адреса модуля на шине I2C.
  • Синтаксис: changeAddress( АДРЕС );
  • Параметры:
    • uint8_t АДРЕС — новый адрес модуля на шине I2C (целое число от 0x08 до 0x7E)
  • Возвращаемое значение: bool — результат смены адреса (true или false).
  • Примечание: Текущий адрес модуля можно узнать функцией getAddress().
  • Пример:

Функция getAddress();

  • Назначение: Запрос текущего адреса модуля на шине I2C.
  • Синтаксис: getAddress();
  • Параметры: Нет.
  • Возвращаемое значение: uint8_t АДРЕС — текущий адрес модуля на шине I2C (от 0x08 до 0x7E)
  • Примечание: Функция может понадобиться если адрес модуля не указан при создании объекта, а обнаружен библиотекой.
  • Пример:

Функция getVersion();

  • Назначение: Запрос версии прошивки модуля.
  • Синтаксис: getVersion();
  • Параметры: Нет
  • Возвращаемое значение: uint8_t ВЕРСИЯ — номер версии прошивки от 0 до 255.
  • Пример:

Функция getModel();

  • Назначение: Запрос типа модуля.
  • Синтаксис: getModel();
  • Параметры: Нет.
  • Возвращаемое значение: uint8_t МОДЕЛЬ — идентификатор модуля от 0 до 255.
  • Примечание: По идентификатору можно определить тип модуля (см. пример).
  • Пример:

Функция digitalWrite();

  • Назначение: Включение/выключение одного или всех реле модуля.
  • Синтаксис: digitalWrite( РЕЛЕ , СОСТОЯНИЕ );
  • Параметры:
    • uint8_t РЕЛЕ — номер реле модуля, от 1 до 4, или значение ALL_CHANNEL.
    • uint8_t СОСТОЯНИЕ — значение 1 (включено) или 0 (отключено).
  • Возвращаемое значение: Нет.
  • Примечание: Функция включает или отключает реле.
  • Пример:

Функция digitalRead();

  • Назначение: Чтение состояния одного из реле модуля.
  • Синтаксис: digitalRead( РЕЛЕ );
  • Параметры:
    • uint8_t РЕЛЕ — номер реле модуля, значение от 1 до 4.
  • Возвращаемое значение: uint8_t СОСТОЯНИЕ — значение 1 или 0.
  • Примечание:
    • Функция возвращает состояние установленное функцией digitalWrite().
  • Пример:

Дополнительные функции библиотеки:

Данные функции не являются основными, но могут быть полезны.

Источник

Подключение блока реле к Arduino по I²C

Любите ли вы I²C так же, как люблю я? Поистине, гениальное изобретение — можно подключить до 64 устройств всего по двум проводам (не считая питания). Сегодня статья — туториал для новичков. Мы будем подключать готовый блок реле из 8 штук, израсходовав всего два пина. Как ни странно, нормальных туториалов я так и не нашел, в том числе в англоязычном сегменте. Постараюсь восполнить этот пробел.

Блок из 8 пятивольтовых реле с опторазвязкой Модуль PCF8574

Реле уже имеют всю необходимую обвязку и могут управляться напрямую цифровыми выходами. Но наша задача — подключить их по I²C. Как и в прошлой моей статье про USB клавиатуру (https://habr.com/ru/post/645109/), я взял I²C расширитель портов ввода-вывода на микросхеме PCF8574. Она имеет 8 портов (P0 — P7) и один пин прерывания, который мы в данном случае использовать не будем. Соединить модуль реле и модуль PCF8574 очень просто — паяем IN1 — IN8 к P0 — P7, соответственно. Очень удобно припаять модуль прямо на пины блока реле. Можно для удобства сюда же припаять кабель с разъемом. Я взял «витую пару» и разъем DIN-5. Блок реле пролежал у меня в коробке на антресоли лет 7, поэтому слегка запылился. Большим плюсом данного блока есть наличие светодиодов, сигнализирующих о включении реле.

Модуль из 8 реле с припаянным PCF8574

К Arduino Nano подключаем A4 > SDA, A5 > SCL. Ну и соответственно, питание.

Arduino Nano pinout

Обращение к устройству I²C происходит по адресу, который можно задать DIP переключателями на плате модуля PCF8574. Когда они все выключены (0 0 0), это соответствует адресу 0x20. Я взял библиотеку PU2CLR — PCF8574 Arduino Library (https://github.com/pu2clr/PCF8574), ее также можно установить через менеджер библиотек Arduino IDE. Следующий скетч будет «перещелкивать» все 8 реле в цикле с задержкой в 1 секунду.

Бонусом моя коробочка — тестер. Я собрал ее специально для подобных экспериментов. Она состоит из Arduino Nano, LCD экрана 1602 с припаянным модулем. конечно же I²C, энкодера с кнопкой, и «пищалки» (которая умеет только пищать, т.е издавать звук одного тона, просто ради прикола). Двумя нажатиями на ручку энкодера можно, например, узнать адреса всех подключенных I²C устройств, поворотами ручки — переключать порты. Что забавно, вся начинка уместилась в крышке коробочки. В корпусе только разъем DIN-5. Как работает реле с этим устройством — на видео.

Источник

Модуль реле, 2 канала, FLASH-I2C — Datasheet

Модуль реле на 2 канала.

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

Ознакомиться с пользовательским описанием модуля и примерами работы с библиотекой iarduino_I2C_Relay можно на странице Wiki — Модуль реле на 2 канала, I2C, Flash.

Назначение:

Модуль реле на 2 канала, I2C, Flash — является устройством коммутации, которое позволяет подключать и отключать устройства к сети переменного тока до 250В. При этом устройства подключённые через выходные контакты модуля, не должны потреблять более 10А переменного тока (на каждый канал).

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

Модуль можно использовать в любых проектах где требуется управлять устройствами с напряжением питания до 250В и потреблением переменного тока до 10А.

Описание:

Модуль построен на базе микроконтроллера STM32F030F4, снабжен собственным стабилизатором напряжения, двумя электромеханическими реле и переключателем выбора питания обмоток реле.

Если переключатель выбора питания обмоток реле находится в положении «Vrelay», то обмотки реле питаются от напряжения поступающего со входа «Vrelay», а если переключатель находится в положении «Vcc», то обмотки реле питаются от напряжения питания логики поступающего с разъема шины I2C.

Использование отдельного питания обмоток реле оправдано если на линиях питания Vcc и GND шины I2C находятся модули чувствительные к помехам возникающим при включении и отключении обмоток реле.

Силовые устройства подключаются к сети переменного тока (до 250В) через контакты разъемов «K1» (первое реле) или «K2» (второе реле). У каждого разъема имеются контакты «NC» — нормально замкнутые и «NO» — нормально разомкнутые.

    О состоянии реле можно судить по светодиодам расположенным рядом с реле.
  • Если светодиод выключен, значит обмотка соответствующего реле обесточена, следовательно, выводы «NC» (Normally Closed) данного реле — замкнуты, а выводы «NO» (Normally Open) — разомкнуты.
  • Если светодиод светится, значит на обмотку соответствующего реле подано напряжение, следовательно, выводы «NC» данного реле — разомкнуты, а выводы «NO» — замкнуты.

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

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

  • Изменить адрес данного модуля, временно (пока есть питание) или постоянно.
  • Включить / отключить любое реле.

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

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

  • SCL — вход/выход линии тактирования шины I2C.
  • SDA — вход/выход линии данных шины I2C.
  • Vcc — вход питания модуля 5В.
  • GND — общий вывод питания.

По центру платы, сверху и снизу, расположены разъемы Vrelay, для подключения отдельного питания 5В обмоток реле (если переключатель питания реле находится в положении Vrelay). Напряжение подаётся на любой разъём Vrelay, а второй разъем можно использовать для подачи питания на следующий модуль реле. Если переключатель питания реле находится в положении Vcc, то подавать питание на входы Vrelay не требуется.

  • Vrelay — вход отдельного питания обмоток реле (5В постоянного тока).
  • Цепь питания Vrelay оптически развязана с питанием шины I2C (у них нет общих выводов).

В правой части платы расположены два разъема: K1 и K2, это выходы, через контакты которых подключаются силовые устройства к сети переменного тока до 250В. Устройства не должны потреблять более 10А (на каждый канал).

  • K1 — разъём первого реле с контактами «NC» (Normally Closed) — нормально замкнуты и «NO» (Normally Open) — нормально разомкнуты.
  • K2 — разъём второго реле с контактами «NC» (Normally Closed) — нормально замкнуты и «NO» (Normally Open) — нормально разомкнуты.

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

  • Напряжение питания логики: 5 В (постоянного тока).
  • Напряжение питания обмоток реле: 5 В (постоянного тока).
  • Ток потребляемый логикой модуля: до 20 мА.
  • Ток потребляемый обмоткой реле: до 80 мА (на каждый канал).
  • Коммутируемое напряжение: до 250 В (переменного тока).
  • Коммутируемый ток: до 10 А (на каждый канал).
  • Количество каналов: 2.
  • Интерфейс: I2C.
  • Скорость шины I2C: 100 кбит/с.
  • Адрес на шине I2C: устанавливается программно (по умолчанию 0x09).
  • Уровень логической 1 на линиях шины I2C: 3,3 В (толерантны к 5 В, подтянуты к 5 В).
  • Рабочая температура: от -40 до +65 °C.
  • Габариты с креплением: 55 х 55 мм.
  • Габариты без креплений: 55 х 45 мм.
  • Вес: 40 г.

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

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

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

Если в регистр 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 мс.

Регистры:

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

адрес 7 6 5 4 3 2 1 0
0x00 FLG_RESET FLG_SELF_TEST FLG_I2C_UP
0x01 SET_RESET SET_SELF_TEST BLOCK_ADR SET_I2C_UP SAVE_ADR_EN
0x02
0x03
RESERVED
0x04 MODEL[7-0]
0x05 VERSION[7-0]
0x06 ADDRESS[6-0] SAVE_FLASH
0x07 CHIP_ID[7-0]
0x08
.
0x11
RESERVED
0x12 DIGITAL-2 DIGITAL-1
0x13 WRITE_H-2 WRITE_H-1 WRITE_L-2 WRITE_L-1
0x14
.
0x2F
RESERVED
0x30 WDT[7-0]

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

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

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

  • FLG_RESET — Флаг указывает на факт выполнения успешной перезагрузки модуля. Флаг самостоятельно сбрасывается после чтения регистра 0x00 «FLAGS_0».
  • FLG_SELF_TEST — Флаг указывает на результат выполнения самотестирования модуля (0-провал, 1-успех). Не поддерживается данным модулем.
  • 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». Не поддерживается данным модулем.
  • 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] — Для модуля реле на 2 канала — идентификатор равен 0x0A.

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

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

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

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

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

  • ADDRESS[6-0] — 7 бит адреса модуля на шине I2C. При чтении возвращается текущий адрес модуля, при записи устанавливается указанный адрес модулю.
  • 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».

Регистр 0x12 «DIGITAL_ALL» — содержит биты управления реле:

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

  • DIGITAL-1. 2 — Биты определяют состояния обмоток реле: «0» — выключено, «1» — включёно.
    Пример: DIGITAL_ALL = (XXXXXX01)2 => реле 1 включено, реле 2 — выключено.
    Таким образом, можно управлять всеми реле записав всего один байт в данный регистр.

Регистр 0x13 «DIGITAL_ONE» — содержит биты управления реле:

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

  • WRITE_H-1. 2 — Установка данных битов приводит к установке соответствующих битов «DIGITAL-1. 2» регистра 0x12 «DIGITAL_ALL» и, как следствие, включению соответствующих обмоток реле.
    Биты сбрасываются самостоятельно.
  • WRITE_L-1. 2 — Установка данных битов приводит к сбросу соответствующих битов «DIGITAL-1. 2» регистра 0x12 «DIGITAL_ALL» и, как следствие, отключению соответствующих обмоток реле.
    Биты сбрасываются самостоятельно.
  • Данный регистр, в отличии от регистра 0x12 «DIGITAL_ALL», удобно использовать когда требуется изменить состояние одного реле, не меняя состояние другого.

Регистр 0x30 «WDT» — содержит время сторожевого таймера:

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

Сторожевой таймер предназначен для безопасности Вашего устройства.

  • WDT[7-0] — Значение от 0 до 254 указывает время (в сек.) оставшееся до перезагрузки модуля.
    Значение 255 (по умолчанию) означает, что сторожевой таймер отключён (не считает).
    Если записать число от 1 до 254, то каждую секунду, значение регистра будет уменьшаться на единицу, пока не достигнет 0. По достижении 0, модуль перезагрузится и все каналы, а так же таймер, будут отключены.
    ПРИМЕЧАНИЕ: Если сторожевой таймер досчитает до 0, то модуль перезагрузится и данные всех его регистров сбросятся в значения по умолчанию, по умолчанию нагрузки отключены.
    ПРИМЕР: Управляющее устройство (например, Arduino) постоянно (в цикле loop) отправляет в регистр «WDT» значение 10. Как только Arduino перестанет работать (отключится, зависнет), значение регистра «WDT» начнёт уменьшаться и через 10 секунд, нагрузки подключённые к модулю будут отключены.

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

Каждый регистр модуля хранит 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 :

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

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

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

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

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

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

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

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

Примечание:

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

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

Источник