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

Расширитель на 8 Входов/Выходов (Trema-модуль)

Расширитель выводов на 8 каналов

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

Trema-модуль расширитель на 8 входов/выходов - позволяет увеличить количество цифровых выводов Arduino. Каждый вывод расширителя является полноценным двунаправленным выводом, а не квазидвунаправленным, то есть его можно использовать как обычный, цифровой, вывод Arduino, без ограничений.

Видео:

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

  • Напряжение питания: 2,3 ... 5,5 В
  • Потребляемый ток: до 175 мкА
  • Потребляемый ток в режиме ожидания: до 1 мкА
  • Выходной ток на выводах: до 50 мА
  • Напряжение на выводах I/O: до 5,5 В
  • Общая потребляемая мощьность: до 200 мВт
  • Уровень логической 1 на шине I2C: 0.7Vcc ... 5.5 В
  • Уровень логического 0 на шине I2C: -0.5 ... 0.3Vcc В
  • Частота шины I2C: 100, 400 кГц
  • Рабочая температура: -40 ... 85 °С
  • Температура хранения: -65 ... 150 °С
  • Габариты: 65х30х19 мм (с учётом выводов)
  • Вес: 7 г

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

Модуль подключается к аппаратной или программной шине I2C Arduino.

Модуль удобно подключать 3 способами, в зависимости от ситуации:

Способ - 1: Используя проводной шлейф и Piranha UNO

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

Способ - 2 : Используя Trema Set Shield

Модуль можно подключить к любому из I2C входов Trema Set Shield.

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

Используя 4-х проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.

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

Способ - 4: Подключение к программной шине I2C

При использовании программной шины I2C, модуль можно подключить к любым выводам Arduino, но потребуется дополнительно установить библиотеку iarduino_I2C_Software.h, для создания программной шины I2C, указав номера выбранных вами выводов. О том как это сделать читайте ниже в разделе «Подключение библиотеки», а так же на странице Wiki - Расширенные возможности библиотек iarduino для шины I2C.

Питание:

Входное напряжение питания 5 В, или 3,3 В постоянного тока, подаётся на выводы Vcc и GND модуля.

При питании модуля от напряжения 3,3 В, выводы модуля толерантны к напряжению 5 В.

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

Модуль построен на базе чипа PCA9534D и использует шину I2C, с тактовой частотой до 400 кГц. В модуле реализована аппаратная возможность выбора адреса на шине, от 0x20 до 0x27, что позволяет подключить к одной шине I2C до 8 модулей. Выбор адреса осуществляется установкой трех переключателей в соответствии с таблицей, размещенной на плате модуля. Над таблицей размещены светодиоды, включение которых соответствует единице в таблице.

Для работы с модулем, нами разработана библиотека iarduino_I2C_IO, при использовании которой, Вы можете управлять выводами модуля, используя функции объекта библиотеки, или используя стандартные функции: pinMode(), digitalWrite() и digitalRead(), используемые для управления обычными выводами Arduino.

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

Примеры:

Управление выводами модуля через функции объекта: pinMode, digitalWrite и digitalRead

#include <Wire.h>                    // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_I2C_IO.
#include <iarduino_I2C_IO.h>         // Подключаем библиотеку для работы с модулями.
iarduino_I2C_IO modul_1(0x24);       // Создаём объект modul_1, указывая установленный адрес на модуле 0x24
iarduino_I2C_IO modul_2(0x26);       // Создаём объект modul_2, указывая установленный адрес на модуле 0x26
                                     // Для каждого модуля создаётся свой объект, с указанием адреса модуля
void setup() {
    modul_1.begin(&Wire);            // Инициируем работу с 1 модулем, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire).
    modul_2.begin(&Wire);            // Инициируем работу с 2 модулем, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire).
    modul_1.pinMode(5,  OUTPUT);     // Конфигурируем 5 вывод 1 модуля как выход
    modul_1.pinMode(7,  INPUT );     // Конфигурируем 7 вывод 1 модуля как вход
    modul_2.pinMode(5,  OUTPUT);     // Конфигурируем 5 вывод 2 модуля как выход
    modul_2.pinMode(7,  INPUT );     // Конфигурируем 7 вывод 2 модуля как вход
}
void loop(){
    modul_1.digitalWrite(5, HIGH);   // Устанавливаем на 5 выводе 1 модуля, состояние логической 1
    modul_2.digitalWrite(5, LOW);    // Устанавливаем на 5 выводе 2 модуля, состояние логического 0
    int a = modul_1.digitalRead(7);  // читаем состояние 7 вывода 1 модуля в переменную a
    int b = modul_2.digitalRead(7);  // читаем состояние 7 вывода 2 модуля в переменную b
}

Управление выводами модуля через стандартные функции: pinMode, digitalWrite и digitalRead

#include <Wire.h>                                           // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_I2C_IO_Global.
#include <iarduino_I2C_IO_Global.h>                         // Подключаем библиотеку, разрешая использовать обычные функции для управления выводами модуля
                                                            // При этом, адрес 1 модуля должен быть 0x20, следующего 0x21 и т.д.
                                                            // Тогда выводы 0-7 принадлежат 1 модулю, 8-15 второму и т.д.
                                                            // Номера выводов Arduino указываются типом uint8_t, а модулей pinNum.
uint8_t i=2;                                                // Создаём переменную i, с типом uint8_t, указывая ей 2 вывод arduino.
pinNum  j=2;                                                // Создаём переменную j, с типом pinNum , указывая ей 2 вывод модуля.
                                                            //
void setup(){                                               //
     iarduino_I2C_IO_Global.begin(&Wire);                   // Инициируем работу с модулями расширения выводов, указав ссылку на объект для работы с шиной I2C на которой находятся модули (по умолчанию &Wire).
     pinMode(i,           OUTPUT);                          // Переводим 2 вывод arduino в режим выход.
     pinMode(j,           OUTPUT);                          // Переводим 2 вывод модуля  в режим выход.
     pinMode((uint8_t) 3, OUTPUT);                          // Переводим 3 вывод arduino в режим выход.
     pinMode((pinNum ) 3, OUTPUT);                          // Переводим 3 вывод модуля  в режим выход.
}                                                           //
                                                            //
void loop(){                                                //
     switch((millis()/1000)%8){                             // Значение в switch() меняется каждую секунду в пределах 0-7.
         case 0: digitalWrite(i,           HIGH); break;    // Устанавливаем на 2 выводе arduino, состояние логической  1.
         case 1: digitalWrite(i,           LOW ); break;    // Устанавливаем на 2 выводе arduino, состояние логического 0.
         case 2: digitalWrite(j,           HIGH); break;    // Устанавливаем на 2 выводе модуля , состояние логической  1.
         case 3: digitalWrite(j,           LOW ); break;    // Устанавливаем на 2 выводе модуля , состояние логического 0.
         case 4: digitalWrite((uint8_t) 3, HIGH); break;    // Устанавливаем на 3 выводе arduino, состояние логической  1.
         case 5: digitalWrite( uint8_t(3), LOW ); break;    // Устанавливаем на 3 выводе arduino, состояние логического 0.
         case 6: digitalWrite( pinNum(3) , HIGH); break;    // Устанавливаем на 3 выводе модуля , состояние логической  1.
         case 7: digitalWrite((pinNum) 3 , LOW ); break;    // Устанавливаем на 3 выводе модуля , состояние логического 0.
         default:                                 break;    //
     }                                                      //
}                                                           //

В первом примере, обращение к каждому модулю осуществляется через его объект, а во втором, обращение осуществляется через стандартные функции управления цифровыми выводами, при этом, выводы Arduino указываются типом uint8_t, а выводы модулей типом pinNum.

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

В данном разделе описаны функции библиотеки iarduino_I2C_IO для работы с модулем расширителя на 8 входов/выходов.

Библиотека iarduino_I2C_IO может использовать как аппаратную, так и программную реализацию шины I2C. О том как выбрать тип шины I2C рассказано ниже в разделе «Подключение библиотеки», а так же на странице Wiki - расширенные возможности библиотек iarduino для шины I2C.

Работа с модулями через стандартные функции:

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

  • Если используется аппаратная шина I2C:
#include <Wire.h>                          // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_I2C_IO_Global.h
#include <iarduino_I2C_IO_Global.h>        // Подключаем библиотеку для работы с модулями.
                                           // Объекты создавать не нужно!
void setup(){                              //
     ...                                   //
     iarduino_I2C_IO_Global.begin(&Wire);  // Инициируем работу с расширителем выводов, указав ссылку на объект для работы с шиной I2C на которой находится расширитель (по умолчанию &Wire).
     ...                                   // Доступны объекты: &Wire, &Wire1, &Wire2...
}                                          //
  • Если используется программная шина I2C:
#include <iarduino_I2C_Software.h>         // Подключаем библиотеку для работы с программной шиной I2C, до подключения библиотеки iarduino_I2C_IO_Global.h
SoftTwoWire sWire(3,4);                    // Создаём объект программной шины I2C указав выводы которым будет назначена роль линий: SDA, SCL.
                                           //
#include <iarduino_I2C_IO_Global.h>        // Подключаем библиотеку для работы с модулем.
                                           // Объекты создавать не нужно!
void setup(){                              //
     ...                                   //
     iarduino_I2C_IO_Global.begin(&sWire); // Инициируем работу с расширителем выводов, указав ссылку на объект для работы с шиной I2C на которой находится расширитель (по умолчанию &Wire).
     ...                                   //
}                                          //
  • В обоих примерах сначала подключается библиотека для работы с шиной I2C. Для аппаратной шины библиотека Wire.h (предустановлена в Arduino IDE), а для программной шины библиотека iarduino_I2C_Software.h, с созданием объекта которому указываются выбранные вами выводы шины, в примере выводы (3-SDA, 4-SCL).
  • Далее подключается библиотека iarduino_I2C_IO_Global без создания объекта.
  • В коде Setup(), при инициализации работы с модулями указывается ссылка на объект работы с выбранной шиной I2C begin(&ШИНА). Остальные строки кода одинаковы для любой шины I2C.

Функция begin();

  • Назначение: Инициализация работы с модулями на указанной шине I2C.
  • Синтаксис: begin( [ &ШИНА ] );
  • Параметры:
    • &ШИНА - Ссылка на объект для работы с шиной I2C на которой находятся модули.
      • Для аппаратной шины: &Wire, &Wire1, &Wire2..., если подключена библиотека Wire.h
      • Для программной шины: ссылка на объект библиотеки iarduino_I2C_Software.h.
      • Параметр является не обязательным, по умолчанию используется ссылка &Wire.
  • Возвращаемые значения: Нет.
  • Примечание:
    • Если все модули находятся на одной шине I2C, то функция вызывается 1 раз в коде setup.
    • На одной шине могут находится до 8 модулей, с адресами от 0x20 до 0x27 включительно.
    • Но можно создать несколько программных шин или работать с разными аппаратными шинами, тогда на каждой шине можно разместить по 8 модулей. В этом случае функция begin() указывает на ту шину I2C которую нужно сделать активной в данный момент, тогда эта функция может вызываться неоднократно.
  • Пример:
pinNum i=0, j=1;
iarduino_I2C_IO_Global.begin(&Wire);  // Инициируем работу с модулями на шине Wire.
digitalWrite( i, LOW  );              // Устанавливаем LOW  на 0 выводе модуля 0x20 на шине Wire.
digitalWrite( j, HIGH );              // Устанавливаем HIGH на 1 выводе модуля 0x20 на шине Wire.
iarduino_I2C_IO_Global.begin(&Wire1); // Инициируем работу с модулями на шине Wire 1.
digitalWrite( i, LOW  );              // Устанавливаем LOW  на 0 выводе модуля 0x20 на шине Wire 1.
digitalWrite( j, HIGH );              // Устанавливаем HIGH на 1 выводе модуля 0x20 на шине Wire 1.

Стандартные функции pinMode(); digitalRead(); digitalWrite();

  • Назначение: Установка режима работы выводов, чтение и установка состояний выводов.
  • Параметры:
    • №_ВЫВОДА_МОДУЛЯ - число, типа pinNum.
    • №_ВЫВОДА_ARDUINO - число, типа uint8_t.
  • Примечание:
    • Использование других типов, вызовет ошибку.
    • Тип pinNum на самом деле является классом и создавая "переменную" с этим типом, вы на самом деле создаёте экземпляр класса, который имитирует поведение переменной. Такие "переменные" поддерживают все стандартные действия (объявление, присвоение, арифметические и логические операции).
  • Пример:
digitalWrite( pinNum(25) , digitalRead( pinNum(35) )); // Копируем состояние с 35 вывода модуля на 25 вывод модуля
                                                       // 25 вывод, это 1 вывод модуля с адресом 0x23 на шине I2C
                                                       // 35 вывод, это 3 вывод модуля с адресом 0x24 на шине I2C
digitalWrite( uint8_t(3) , digitalRead( pinNum(53) )); // Копируем состояние с 53 вывода модуля на 3 вывод Arduino
                                                       // 53 вывод, это 5 вывод модуля с адресом 0x26 на шине I2C

При использовании стандартных функций работы с выводами, нумерация выводов всех модулей сквозная, по порядку адресов на шине I2C (см. таблицу). Допускается пропускать адреса модулей на шине I2C, например, установить два модуля с адресами 0x21 и 0x23, но и обращаться придется к выводам с номерами 8-15 и 24-31.

Номера выводов, указываемые в стандартных функциях, зависят от адреса модуля на шине I2C:

Адрес модуля: 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27
Вход/Выход № 0 0 8 16 24 32 40 48 56
Вход/Выход № 1 1 9 17 25 33 41 49 57
Вход/Выход № 2 2 10 18 26 34 42 50 58
Вход/Выход № 3 3 11 19 27 35 43 51 59
Вход/Выход № 4 4 12 20 28 36 44 52 60
Вход/Выход № 5 5 13 21 29 37 45 53 61
Вход/Выход № 6 6 14 22 30 38 46 54 62
Вход/Выход № 7 7 15 23 31 39 47 55 63

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

Работа с модулями через объекты библиотеки:

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

#include <iarduino_I2C_IO.h>  // Подключаем библиотеку
iarduino_I2C_IO exp( АДРЕС ); // Создаём объект exp, с указанием адреса модуля на шине I2C. 
                              // Для каждого модуля создаётся свой объект, с указанием адреса модуля.
                              // Примечание:
                              // Допускается создание одного объекта без указания адреса модуля, который сможет работать с любым модулем на шине.
                              // При этом, адрес 1 модуля должен быть 0x20, следующего 0x21 и т.д.
                              // Тогда выводы 0-7 принадлежат 1 модулю, 8-15 второму и т.д.

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

  • Если используется аппаратная шина I2C:
#include <Wire.h>                  // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_I2C_IO.h
#include <iarduino_I2C_IO.h>       // Подключаем библиотеку для работы с модулем.
                                   //
iarduino_I2C_IO exp(0x20);         // Создаём объект exp для работы с функциями и методами библиотеки iarduino_I2C_IO, указывая адрес модуля на шине I2C.
// iarduino_I2C_IO exp;            // Если адрес модуля не известен, то его можно не указывать, он будет найден автоматически.
                                   // Если адрес не указан, то на шине должен находиться только один модуль.
void setup(){                      //
     ...                           //
     exp.begin(&Wire);             // Инициируем работу с модулем, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire).
     ...                           // Доступны объекты: &Wire, &Wire1, &Wire2...
}                                  //
  • Если используется программная шина I2C:
#include <iarduino_I2C_Software.h> // Подключаем библиотеку для работы с программной шиной I2C, до подключения библиотеки iarduino_I2C_IO.h
SoftTwoWire sWire(3,4);            // Создаём объект программной шины I2C указав выводы которым будет назначена роль линий: SDA, SCL.
                                   //
#include <iarduino_I2C_IO.h>       // Подключаем библиотеку для работы с модулем.
iarduino_I2C_IO exp(0x20);         // Создаём объект exp для работы с функциями и методами библиотеки iarduino_I2C_IO, указывая адрес модуля на шине I2C.
// iarduino_I2C_IO exp;            // Если адрес модуля не известен, то его можно не указывать, он будет найден автоматически.
                                   // Если адрес не указан, то на шине должен находиться только один модуль.
void setup(){                      //
     ...                           //
     exp.begin(&sWire);            // Инициируем работу с модулем, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire).
     ...                           //
}                                  //
  • В обоих примерах сначала подключается библиотека для работы с шиной I2C. Для аппаратной шины библиотека Wire.h (предустановлена в Arduino IDE), а для программной шины библиотека iarduino_I2C_Software.h, с созданием объекта которому указываются выбранные вами выводы шины, в примере выводы (3-SDA, 4-SCL).
  • Далее подключается библиотека и создаются объекты для работы с модулями. Для каждого модуля создаётся свой объект. Стоит отметить, что можно использовать сразу несколько шин I2C, разместив на каждой шине до 8 модулей с адресами от 0x20 до 0x27.
  • В коде Setup(), при инициализации работы с модулем указывается ссылка на объект работы с выбранной шиной I2C begin(&ШИНА). Остальные строки кода одинаковы для любой шины I2C.

Функция begin();

  • Назначение: Инициализация работы с модулем
  • Синтаксис: begin( [ &ШИНА ] );
  • Параметры:
    • &ШИНА - Ссылка на объект для работы с шиной I2C на которой находится модуль.
      • Для аппаратной шины: &Wire, &Wire1, &Wire2..., если подключена библиотека Wire.h
      • Для программной шины: ссылка на объект библиотеки iarduino_I2C_Software.h.
      • Параметр является не обязательным, по умолчанию используется ссылка &Wire.
  • Возвращаемые значения: Нет.
  • Примечание: Вызывается 1 раз в коде setup.
  • Пример:
exp1.begin(&Wire ); // Инициируем работу модуля, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire).
exp2.begin(&Wire1); // Инициируем работу модуля, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire).

Функция pinMode();

  • Назначение: Установка режима работы вывода модуля (вход или выход).
  • Синтаксис: pinMode( №_ВЫВОДА_МОДУЛЯ , РЕЖИМ_РАБОТЫ );
  • Параметры:
    • №_ВЫВОДА_МОДУЛЯ - число от 0 до 7, соответствующее конфигурируемому выводу.
    • РЕЖИМ_РАБОТЫ - устанавливаемый режим работы вывода модуля: (INPUT или OUTPUT).
  • Возвращаемые значения: Нет.
  • Примечание: Работает как одноимённая функция pinMode.
exp.pinMode(0, INPUT ); // Конфигурируем 0 вывод модуля как вход
exp.pinMode(1, OUTPUT); // Конфигурируем 1 вывод модуля как выход

Функция digitalRead();

  • Назначение: Чтение логического состояния на выводе модуля (LOW или HIGH).
  • Синтаксис: digitalRead( №_ВЫВОДА_МОДУЛЯ );
  • Параметры:
    • №_ВЫВОДА_МОДУЛЯ - число от 0 до 7, соответствующее выводу модуля, состояние которого требуется прочитать.
  • Возвращаемые значения: bool - логическое состояние на выводе (LOW или HIGH).
  • Примечание: Работает как одноимённая функция analogRead.
  • Пример:
bool val = exp.digitalRead(0); // Читаем состояние нулевого входа модуля в переменную val

Функция digitalWrite();

  • Назначение: Установка логического состояния на выводе модуля (LOW или HIGH).
  • Синтаксис: digitalWrite( №_ВЫВОДА_МОДУЛЯ , СОСТОЯНИЕ);
  • Параметры:
    • №_ВЫВОДА_МОДУЛЯ - число от 0 до 7, соответствующее выводу, состояние которого требуется установить.
    • СОСТОЯНИЕ - устанавливаемое логическое состояние на выводе (LOW или HIGH).
  • Возвращаемые значения: Нет.
  • Примечание: Работает как одноимённая функция digitalWrite.
exp.digitalWrite(1, HIGH); // Устанавливаем на первом выводе модуля состояние логической единицы

Нумерация выводов для каждого модуля начинается с 0.

Применение:

  • Увеличение количества цифровых входов/выходов Arduino.
  • Уменьшение числа проводов, между Arduino и цифровыми устройствами.
  • Усиление помехозащищенности, если устройства находятся на значительном удалении от arduino.

Ссылки:




Обсуждение

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