PCF8574: О расширителе ввода / вывода I2C для Arduino

ЧИП PCF8574 TI

Вы наверняка слышали о IC PCF8574, микросхему, которую можно приобрести отдельно или уже установить на модуле, как и многие другие Электронные компоненты чтобы облегчить вашу интеграцию с платой Arduino. В данном случае это расширитель входов и выходов для шина I2C.

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

Что такое шина I2C?

Arduino UNO Миллис функции

Название I2C происходит от Межинтегральная схема или межинтегральные схемы. Его версия 1.0 была создана в 1992 году компанией Philips. Затем в 2.1 году появится вторая версия 2000, и сегодня она стала стандартом (со скоростью 100 кбит / с, хотя позволяет максимальную скорость до 3.4 Мбит / с), когда срок действия патента истек в 2006 году, и ее можно свободно использовать.

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

El I2C - это автобус хорошо известно из последовательной связи. Он использует протокол синхронной связи только с 2 каналами (есть и третий, но он связан с эталоном или GND), на самом деле он также известен как TWI (двухпроводный интерфейс):

  • Один для часов (SCL).
  • Другое для данных (SDA).
Оба являются подключениями CMOS с открытым стоком и требуют подтягивающих резисторов. Кроме того, если одно устройство передает 0, а другое 1, могут возникнуть проблемы, поэтому линия всегда установлена ​​на 1 (высокий уровень), а устройства всегда передают 0 (низкий уровень).

Это означает, что господин и раб они отправляют данные по одному и тому же кабелю или дорожке, которая контролируется первым, генерирующим тактовый сигнал. Каждому из периферийных устройств, подключенных к шине I2C, будет назначен уникальный адрес для управления передачей. Но не обязательно, чтобы учитель всегда был одним и тем же (мульти-учитель), всегда именно он инициирует передачу.

Как я уже объяснял в статье о Ардуино I2C Я упоминал ранее, каждая плата имеет эти соединения I2C в разных местах. Это то, что вы должны иметь в виду, чтобы иметь возможность правильно использовать его в каждой версии планшета:

  • Arduino UNO: SDA в A4 и SCK в A5
  • Ардуино Нано: то же, что и предыдущее.
  • Ардуино Мини Про: одно и тоже.
  • Arduino Mega: SDA находится на контакте 20, а SCK - на 21.
  • Подробнее о тарелках.

Вы уже знаете, что вы можете легко использовать I2C для своих эскизов, поскольку Библиотека Wire.h с различными функциями для этой последовательной связи:

  • начинать (): запустить библиотеку Wire и указать, является ли она ведущим или ведомым
  • запрос от (): используется мастером для запроса данных у ведомого.
  • beginTransmission (): начать передачу с ведомого.
  • endTransmission (): конец передачи.
  • записывать()- Запишите данные с ведомого устройства в ответ на запрос от ведущего или вы можете поставить в очередь передачу ведущего
  • имеется в наличии (): вернет количество байтов для чтения.
  • читать(): прочитать байт, переданный от ведомого к ведущему или наоборот.
  • onReceive (): Вызывает функцию, когда ведомое устройство принимает передачу от ведущего.
  • по требованию (): Вызывает функцию, когда ведомое устройство запрашивает данные у ведущего.

к Дополнительную информацию о программировании и функциях Arduino вы можете скачать наши PDF-учебник.

Что такое PCF8574?

Модуль PCF8574

PCF8574 - это Расширитель цифровых входов и выходов (I / O) шины I2C. Он может быть изготовлен различными производителями в дополнение к тому, что он доступен в виде микросхем и модулей. В любом случае очень практично подключить его к плате Arduino и получить возможность управлять большим количеством устройств, чем позволяет материнская плата.

El Распиновка PCF8574 прост, поскольку он включает только 8 сосны квази-направленный (P0-P7, к которому подключены микросхемы для связи), и, с другой стороны, у вас есть SDA и SCL, которые вы должны подключить к плате Arduino, а также VCC и GND для питания модуля. И не забудьте три контакта адресации A0, A1, A2, чтобы выбрать, к какому из устройств будет направлена ​​связь ...

Распиновка PCF8574

Он владеет другие особенности что вам следует знать:

  • Его соединения, будучи открытым стоком, могут быть используются как входы и выходы.
  • La пиковый ток он составляет 25 мА, когда он действует как выход (приемник, когда ток течет к PCF8574), и 300 мкА (источник, ток течет от PCF8574).
  • La напряжение блок питания 2.5 и 6в. Потребление в режиме ожидания очень низкое, всего 10 мкА.
  • Все вылеты есть защелки, чтобы поддерживать состояние без необходимости внешних действий. Вам нужно действовать только тогда, когда вы хотите изменить состояние.
  • Вы можете получить 8 возможные направления, то есть до 8 устройств для связи или использование 8 модулей для расширения до 64 устройств. Адреса (контакты A0, A1, A2) будут:
    • 000: адрес 0x20
    • 001: адрес 0x21
    • 010: адрес 0x22
    • 011: адрес 0x23
    • 100: адрес 0x24
    • 101: адрес 0x25
    • 110: адрес 0x26
    • 111: адрес 0x27
  • Признает прерывание (INT) специальной строкой для обнаружения данных без постоянного мониторинга.

Интеграция с Arduino

Скриншот Arduino IDE

Связь с Arduino очень проста, вам просто нужно подключить Vcc к выводу 5 В на плате Arduino, а GND с GND Arduino. С другой стороны, контакты модуля PCF8574 SDA и SCL могут быть соединить с контактами 14 (A5 SCL) и 15 (A4 SDA). Только после этого он начнет работать, очевидно, вы можете использовать Px для подключения устройств, с которыми хотите общаться ...

Тогда это будет только отсутствовать начните с примера эскиза в Arduino IDE. Вы можете сделать это без использования дополнительной библиотеки, такой как ...

#include <Wire.h>
 
const int address = 0x38;
 
void setup()
{
   Wire.begin();
   Serial.begin(9600);
}
 
void loop()
{
   for (short channel = 0; channel < 8; channel++)
   {
      // Escribir dato en cada uno de los 8 canales
      Wire.beginTransmission(address);
      Wire.write(~(1 << channel));
      Wire.endTransmission();
      
      // Lee dato del canal
      delay(500);
   }
}

В качестве ввода:

#include <Wire.h>
 
const int address = 0x38;
 
void setup()
{
   Wire.begin();
   Serial.begin(9600);
}
 
void loop()
{
   short channel = 1;
   byte value = 0;
 
   // Leer el dato del canal
   Wire.requestFrom(pcfAddress, 1 << channel);
   if (Wire.available())
   {
      value = Wire.read();
   }
   Wire.endTransmission();
 
   // Mostrar el valor leido por el monitor serie
   Serial.println(value);
}

Или также использовать библиотеки, например PCF8574, который можно скачать здесь и используйте код, похожий на этот из самого примера, который поставляется вместе с этой библиотекой:

#include <Wire.h>
#include "PCF8574.h"
 
PCF8574 expander;
 
void setup() 
{
  Serial.begin(9600);
  
  expander.begin(0x20);
  
  /* Setup some PCF8574 pins for demo */
  expander.pinMode(0, OUTPUT);
  expander.pinMode(1, OUTPUT);
  expander.pinMode(2, OUTPUT);
  expander.pinMode(3, INPUT_PULLUP);
 
  /* Blink hardware LED for debug */
  digitalWrite(13, HIGH);  
  
  /* Toggle PCF8574 output 0 for demo */
  expander.toggle();
  
  /* Blink hardware LED for debug */
  digitalWrite(13, LOW);
}
 
 
 
void loop() 
{
}


Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Будьте первым, чтобы комментировать

Оставьте свой комментарий

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

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.