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

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

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


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

Модуль построен на базе чипа PCA9534D и использует шину I2C, с тактовой частотой до 400 кГц. В модуле реализована аппаратная возможность выбора адреса на шине, от 0x20 до 0x27, что позволяет подключить на одной шине до 8 модулей. Выбор адреса осуществляется установкой трех переключателей в соответствии с таблицей, размещенной на плате модуля. Над таблицей размещены светодиоды, включение которых соответствует единице в таблице. Для работы с модулем, нами разработана библиотека iarduino_I2C_IO, при использовании которой, Вы можете управлять выводами модуля, используя функции объекта библиотеки, или используя стандартные функции: pinMode, digitalWrite и digitalRead, используемые для управления обычными выводами 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. При подключении нескольких модулей, установите им разные адреса.

Схема подключения расширителя выводов к Arduino UnoПитание:

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

Работа с модулем:

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

Примеры:

Управление выводами модуля через функции объекта: pinMode, digitalWrite и digitalRead
#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();                 // Инициируем работу с 1 модулем
    modul_2.begin();                 // Инициируем работу с 2 модулем
    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 <iarduino_I2C_IO_Global.h>  // Подключаем библиотеку, разрешая использовать обычные функции для управления выводами модуля
                                     // При этом, адрес 1 модуля должен быть 0x20, следующего 0x21 и т.д.
                                     // Тогда выводы 0-7 принадлежат 1 модулю, 8-15 второму и т.д.
                                     // Номера выводов Arduino указываются типом uint8_t, а модулей uint16_t.
void setup() {
    iarduino_I2C_IO_Global.begin();  // Инициируем раборту с модулями расширения выводов
    pinMode(uint8_t(3),  OUTPUT);    // Конфигурируем 3 вывод Arduino как выход
    pinMode(uint8_t(7),  INPUT );    // Конфигурируем 7 вывод Arduino как вход
    pinMode(uint16_t(3), OUTPUT);    // Конфигурируем 3 вывод модуля  как выход
    pinMode(uint16_t(7), INPUT );    // Конфигурируем 7 вывод модуля  как вход
}
void loop(){
    digitalWrite(uint8_t(3), HIGH);   // Устанавливаем на 3 выводе arduino, состояние логической 1
    digitalWrite(uint16_t(3), LOW);   // Устанавливаем на 3 выводе модуля , состояние логического 0
    int a = digitalRead(uint8_t(7));  // читаем состояние 7 вывода Arduino в переменную a
    int b = digitalRead(uint16_t(7)); // читаем состояние 7 вывода модуля  в переменную b
}

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

Описание функций библиотеки, для работы с модулями через объекты:

Подключение библиотеки:
#include <iarduino_I2C_IO.h>  // Подключаем библиотеку
iarduino_I2C_IO exp( АДРЕС ); // Объявляем объект exp, с указанием адреса модуля на шине I2C. 
                              // Для каждого модуля создаётся свой объект, с указанием адреса модуля
Функция begin();
  • Назначение: Инициализация работы с модулем
  • Синтаксис: begin();
  • Параметры: Нет.
  • Возвращаемые значения: Нет.
  • Примечание: Вызывается 1 раз в коде setup.
  • Пример:
exp.begin(); // Инициируем работу модуля
Функция 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.

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

Подключение библиотеки:
#include <iarduino_I2C_IO_Global.h>  // Подключаем библиотеку, разрешая использовать обычные функции для управления выводами модуля
Функция begin();
  • Назначение: Инициализация работы с модулями.
  • Синтаксис: begin();
  • Параметры: Нет.
  • Возвращаемые значения: Нет.
  • Примечание: Вызывается 1 раз в коде setup.
  • Пример:
iarduino_I2C_IO_Global.begin(); // Инициируем работу модуля
Стандартные функции pinMode(); digitalRead(); digitalWrite();
  • Назначение: Установка режима работы выводов, чтение и установка состояний выводов.
  • Параметры:
    • №_ВЫВОДА_МОДУЛЯ - число, типа uint16_t.
    • №_ВЫВОДА_ARDUINO - число, типа uint8_t.
  • Примечание: Использование других типов, вызовет ошибку.
  • Пример:
digitalWrite( uint16_t(25) , digitalRead( uint16_t(35) )); // Копируем состояние с 35 вывода модуля на 25 вывод модуля
                                                           // 25 вывод, это 1 вывод модуля с адресом 0x23 на шине I2C
                                                           // 35 вывод, это 3 вывод модуля с адресом 0x24 на шине I2C
digitalWrite( uint8_t(3) , digitalRead( uint16_t(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

Применение:

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

Ссылки:

Обсуждение

Присоединяйся

На главную