PCF8574: Про розширювач вводу-виводу I2C для Arduino

PCF8574 TI ЧІП

Ви напевно чули про ІС 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, буде призначена унікальна адреса для того, щоб направляти передачі. Але необов’язково, щоб учитель завжди був однаковим (мульти-вчитель), це завжди він, хто ініціює переведення.

Як я вже пояснював у статті про Arduino I2C Я згадував раніше, кожна плата має ці з'єднання I2C в різних місцях. Це те, про що ви повинні пам’ятати, щоб мати можливість правильно використовувати його в кожній версії таблички:

  • Arduino UNO: SDA - у форматі A4, а SCK - у форматі A5
  • ArduinoNano: те саме, що і попереднє.
  • Arduino MiniPro: те саме.
  • arduino мега: SDA знаходиться на контакті 20, а SCK - на 21.
  • Більше інформації про таблички.

Ви вже знаєте, що можете легко використовувати I2C для своїх ескізів, оскільки Бібліотека Wire.h з різними функціями для цього послідовного зв'язку:

  • почати (): запустіть бібліотеку проводів і вкажіть, чи є вона головною чи веденою
  • requestFrom (): використовується майстром для запиту даних у підлеглого.
  • beginTransmission (): почати передачу з веденим.
  • endTransmission (): кінцева передача.
  • write ()- Запишіть дані від веденого пристрою у відповідь на запит ведучого, або ви можете поставити в чергу передачу ведучого.
  • доступний (): поверне кількість байтів для читання.
  • читати (): прочитати байт, переданий від веденого до ведучого або навпаки.
  • 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. З іншого боку, шпильки модуля SDF і SCL PCF8574 можуть бути з'єднати шпильками 14 (A5 SCL) та 15 (A4 SDA). Тільки з цим це почне працювати, очевидно, ви можете використовувати Px для підключення пристроїв, з якими ви хочете спілкуватися ...

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

#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. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.