PCF8574: Относно I2C I / O Expander за Arduino

PCF8574 TI ЧИП

Със сигурност сте чували за PCF8574 IC, чип, който може да бъде закупен отделно или вече монтиран на модул като много други Електронни компоненти за да улесните вашата интеграция с вашата платка Arduino. В този случай това е удължител на входовете и изходите за шината I2C.

Може би си мислите, че Arduino вече има своя собствена интегрирана I2C шина, и е вярно. Но PCF8574 може да помогне за разширяването на тази шина извън границите на вашата разработка, което може да бъде от голяма помощ за някои производители, които се нуждаят от нещо повече от това, което се предоставя от Arduino.

Какво представлява I2C шината?

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

Името I2C идва от Междуинтегрална схема или междуинтегрални схеми. Неговата версия 1.0 е създадена през 1992 г. от Philips. Тогава вторият 2.1 ще дойде през 2000 г. и днес той се е превърнал в стандарт (при 100 kbit / s, въпреки че позволява максимум до 3.4 Mbit / s), когато патентът изтече през 2006 г. и може да се използва свободно.

В момента той се използва широко в индустрията за комуникация, а също така много оценени от производителите за техните проекти за комуникация на различни микроконтролери и периферни устройства, интегрирани в една интегрална схема.

El I2C е автобус добре позната серийна комуникация. Той използва синхронен комуникационен протокол само с 2 канала (има трети, но той е свързан с референтен или GND), всъщност е известен също като TWI (двужилен интерфейс):

  • Един за часовника (SCL).
  • Други за данни (SDA).
И двете са с отворени изтичащи CMOS връзки и изискват изтеглящи резистори. Също така, ако едно устройство предава 0, а друго a 1, може да има проблеми, поради което линията винаги е настроена на 1 (високо ниво) и устройствата винаги предават 0 (ниско ниво).

Това предполага, че господар и роб те изпращат данни по същия кабел или писта, която се контролира от първата, която е тази, която генерира тактовия сигнал. Всяко от периферните устройства, свързани към I2C шината, ще има присвоен уникален адрес, за да насочва предаванията. Но не е необходимо капитанът винаги да е един и същ (мулти-мастер), той винаги е този, който инициира прехвърлянето.

Както вече обясних в статията на Arduino I2C Посочих по-рано, всяка платка има тези I2C връзки на различни места. Това е нещо, което трябва да имате предвид, за да можете да го използвате правилно във всяка версия на плочата:

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

  • начало (): стартирайте Wire библиотеката и посочете дали е главна или подчинена
  • заявка от (): използва се от главното устройство за искане на данни от подчиненото устройство.
  • beginTransmission (): стартиране на предаването с подчинен.
  • endTransmission (): крайно предаване.
  • напиши ()- Напишете данни от роб в отговор на заявка от главния, или можете да изпратите на опашката предаването на главния.
  • на разположение (): ще върне броя байтове за четене.
  • Прочети(): чете байт, предаден от подчинен на главен или обратно.
  • onReceive (): Извиква функция, когато подчинен получава предаване от главен.
  • onRequest (): Извиква функция, когато робът изисква данни от главен.

за MÁS información относно програмирането и функциите на Arduino можете да изтеглите нашите PDF урок.

Какво е PCF8574?

PCF8574 модул

PCF8574 е a I2C шина цифрови входове и изходи (I / O) разширител. Той може да се произвежда от различни производители, освен че го има в интегрални схеми и модули. Във всеки случай е много практично да го свържете към вашата платка Arduino и да имате капацитета да контролирате повече устройства, отколкото позволява дънната платка.

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

PCF8574 пиноут

Той има други функции че трябва да знаете:

  • Неговите връзки, тъй като са отворен канал, могат да бъдат използвани както като входове, така и като изходи.
  • La пиков ток той е 25mA, когато действа като изход (потъващ, когато токът тече към PCF8574) и 300 µA (източник, токът тече от PCF8574).
  • La напрежение захранването е 2.5 и 6v. Консумацията в режим на готовност е много ниска, само 10 µA.
  • Всички изходи имат резета, за поддържане на състоянието без необходимост от външни действия. Трябва да действате само когато искате да промените състоянието.
  • Можете да получите 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 с 5v щифт на платката 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. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.