Увеличение портов ввода-вывода на Arduino (PCF8574)

В этой статье рассмотрим модуль расширения портов на чипе PCF8574. С помощью которого можно увеличить количество портов ввода-вывода микроконтроллера на 8 штук (максимально 64), используя шину I2C, которая требует только 2 вывода.

Технические параметры 

► Микросхема: PCF8574;
► Напряжение питания: 3 — 5.5 В;
► Интерфейс: I2C;
► Количество портов GPIO: 8;
► Размеры: 55 x 15 x 12 мм;
► Вес: 5 грамм.

Обзор модуля PCF8574

Основная и единственная микросхема на модуле это PCF8574, которая является расширителем ввода-вывода с двухпроводным интерфейсом I2C. Данная микросхема позволяет увеличить количество портов на 8 штук, а если подключить несколько микросхем PCF8574, можно увеличить до 64 портов. Так же, на модуле установлены два подтягивающих резистора на 1 кОм, необходимые для работы шины I2C. Так же, микросхема PCF8574 используется в интерфейсном модуле LCD1602 и LCD2004.

Модуль содержит три разъема, назначение каждого вывода можно посмотреть ниже:

Четырех контактный разъем (дублируются)
Vcc — вывод питания 3 — 5.5 В;
GND — заземляющий вывод питания;
SDA — вывод данных I2C подключается к линии I2C;
SCL — вывод I2C, подключается к линии I2C микроконтроллера, рабочие напряжение 3 В или 5 В.

Девяти контактный разъем:
P0 — P7 — вывод входа выхода;
INT — прерывание инвертированный сигнал.

Смена адреса I2C
По умолчанию, на модуле установлен адрес 0x20, при необходимости его можно изменить, это позволяет подключать до восьми устройств. Для смен адреса, необходимо поменять перемычку на (A0-A2), которая подтягивает линии A0, A1, A2 к питанию или наоборот. Ниже приведена таблица с адресами:

A0 — 0 // A1 — 0 // A2 — 0 // — 0x20
A0 — 0 // A1 — 0 // A2 — 1 // — 0x21
A0 — 0 // A1 — 1 // A2 — 0 // — 0x22
A0 — 0 // A1 — 1 // A2 — 1 // — 0x23
A0 — 1 // A1 — 0 // A2 — 0 // — 0x24
A0 — 1 // A1 — 0 // A2 — 1 // — 0x25
A0 — 1 // A1 — 1 // A2 — 0 // — 0x26
A0 — 1 // A1 — 1 // A2 — 1 // — 0x27

Подключение модуля PCF8574 к Arduino

Необходимые детали:
► Arduino UNO x 1 шт.
► Модуль расширения портов ввода вывода на базе PCF 8574 x 1 шт.
► Провода DuPont M-F, 20 см x 1 шт.

Описание:
В примере покажу как подключить модуль PCF 8574 к Arduino. Так же приведу программу, которая будет включать светодиоды при нажатии кнопок.

Подключение.
Сначала подключить питание, выводы +5 В и GND (Arduino) подключаем к выводам Vcc и GND (PCF 8574), далее подключаем интерфейс I2C, выводы A4 и A5 (Arduino) подключаем к выводам SDA и SCL (PCF 8574). Теперь подключаем кнопки, вывода P0-P3 подключаем к кнопкам, а второй вывод от кнопок подключаем к GND. Далее подключаем светодиоды, вывода P4-P7 подключаем к светодиоду, второй вывод через резистор подключаем к 5В.

Установка библиотек:
Для работы с модулем необходимо установить библиотеку «PCF8574», для установки библиотеки, перейдите в Скетч —> Подключить библиотеку —> Управление библиотеками.

В строке поиска введите «PCF 8574», найдите библиотеку «PCF8574 library» и установите данную библиотеку.

Программа:
Теперь запускаем среду разработку Arduino IDE и загружаем скетч в контроллер.

 Скачать скетч

Описание скетча:
Скетч начинается с включения библиотеки PCF8574, далее создаем объект, для работы с модулем, в котором указываем адрес устройства 0x20.

В void setup(), инициализируем работу последовательного порта. Так же, указываем как работать с портами «pcf8574.pinMode(Px, INPUT)» — вход и «pcf8574.pinMode(P4, OUTPUT)» — выход. В конце функцией «pcf8574.begin()» инициализируем модуль, если инициализация прошла успешно программа продолжит работу, если нет то зациклится с ошибкой.

В void loop(), создаем переменные val0 — val3 и считываем значение с выводов.

Далее, идут четыре одинаковых блока, при нажатии кнопки P0-P3, включается светодиод P4-P7.

Ссылки
  Библиотека PCF8574 v.2.2.2

Купить на Aliexpress
  Контроллер Arduino UNO R3 на CH340G
  Контроллер Arduino UNO R3 на Atmega16U2
  Комплект проводов DuPont, 2,54 мм, 20 см
  Модуль расширения портов ввода вывода на базе PCF8574

Купить в Самаре и области
  Контроллер Arduino UNO R3 на CH340G
  Контроллер Arduino UNO R3 на Atmega16U2
  Провода DuPont, 2,54 мм, 20 см
  Модуль расширения портов ввода вывода на базе PCF8574

7 комментариев для “Увеличение портов ввода-вывода на Arduino (PCF8574)”
  1. Здравствуйте! После загрузки скетча, светодиоды начинают моргать с частотой в пол секунды. При этом нажатие на какую-либо кнопку включает соответствующий светодиод и он горит постоянно до тех пор, пока не отпустишь кнопку. Остальные светодиоды продолжают промаргивать с частотой в пол секунды.

    1. Это наводки в проводах кнопок из-за неправильного их подключения.Нужно входа расширителя подтянуть через резисторы на 5-10 ком к минусу, а через кнопки подавать плюс.

      1. А на плате нет встроенных подтягивающих резисторов как на самом Ардуино? К Ардуино ведь можно и без резисторов кнопки подключать, если использовать режим пина INPUT_PULLUP.

        1. #include
          PCF8574 ex0(0x20);// 1 модуль
          PCF8574 ex1(0x21);// 2 модуль

          int k = 0;

          void setup() {
          pinMode(ex1, 7, INPUT_PULLUP);// модуль 2 кнопка
          pinMode(ex0, 0, OUTPUT);// модуль 1 светодиод
          digitalWrite(ex0, 0, 0);// светодиод выключен
          }

          void loop() {
          k = digitalRead(ex1, 7);
          delay(10);
          if (k == 0) {
          pinMode(ex0, 0, OUTPUT);
          digitalWrite(ex0, 0, 1);// светодиод включен
          } else {
          pinMode(ex0, 0, OUTPUT);
          digitalWrite(ex0, 0, 0);// светодиод выключен
          }
          }
          Рабочий скетч с 2 модулями без всяких морганий и наводок…

  2. Неправильно составлена таблица с адресами:
    имеется A0 A1 A2
    должно быть A2 A1 A0

  3. а обязательно подключать к аналоговым в Ардуино?
    или можно через порты sda и scl

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *