PCF8574: aconsegueix més pins de connexió per a Arduino

pcf8574

Potser t'has trobat en alguna situació en què t'agradaria ampliar la quantitat d'entrades i sortides de què disposa el teu placa Arduino, ja que estàs realitzant un projecte que necessita més dispositius dels esperats. En aquests casos només podies fer una cosa, i és pensar comprar una placa d'un model superior amb més quantitat d'aquestes connexions. Però ara amb el PCF8574 pots expandir l'E/S d'Arduino d'una manera fàcil i barata.

Aquí us mostrarem què és el PCF8574 per si no el coneixies, a més d'ensenyar com es pot connectar a la teva placa Arduino explicat pas a pas i com funciona…

Què és el PCF8574?

pcf8574

El PCF8574 és un expansor d'entrades i sortides (E/S) digitals per al bus I2C1. Aquest dispositiu, fabricat per Philips, permet connectar un processador com Arduino per controlar més dispositius emprant menys pins2. El PCF8574 incorpora 8 pins quasi-direccionals basats en sortides CMOS en configuració de drenador obert.

A més, el PCF8574 és un dispositiu de baix consum que admet operacions de VCC de 2.5 V a 6V. Compte amb un port d'E/S quasi-bidireccional de 8 bits, sortides enganxades, sortida d'interrupció de drenador obert i capacitat de conducció d'alt corrent per a LEDs. D'altra banda, el seu consum a stand-by és molt baix, de menys de 10 µA.

És molt útil ampliar les capacitats de la teva placa Arduino més enllà dels seus límits, la qual cosa pot ser de gran ajuda per als creadors que necessiten alguna cosa més que el que ofereix Arduino. El corrent màxim que pot subministrar cada pin, dependrà de la configuració:

  • Quan actua com a sortida, és de 25mA quan actua com a sink (embornal), és a dir, quan el corrent elèctric flueix cap al PCF8574. Aquesta és la configuració per defecte.
  • Quan actua com a source (font) és de 300µA, és a dir, quan el corrent flueix des del PCF8574. Així mateix, cal saber que totes les sortides disposen de Latches, és a dir, mantenen l'estat per elles mateixes en un registre. Només cal que ens actuem quan vulguem modificar l'estat d'unes de les sortides.

La comunicació es realitza a través del bus I2C, de manera que és senzill obtenir les dades dels dispositius connectats a ell. Així mateix, cal destacar que disposa de 3 pins de direcció, cosa que dóna 8 possibles connectats al mateix bus I2C. Això vol dir que és possible controlar 64 dispositius usant únicament 2 pins.

Configuració d'adreces

Alguns models d'aquest mòdul PCF8574 solen incloure pins de configuració i jumpers com els que veus a la imatge superior. En canvi, altres models inclouen un switch que facilita les coses amb els tres microinterruptors… Sigui com sigui, serveixen per configurar les adreces dels pins d'E/S:

A0 A1 A2 Adreça
0 0 0 0x20
0 0 1 0x21
0 1 0 0x22
0 1 1 0x23
1 0 0 0x24
1 0 1 0x25
1 1 0 0x26
1 1 1 0x27

Preu i on comprar

Es pot trobar per només uns euros. És un dispositiu bastant barat per a la pràctica que pot resultar per a alguns models d'Arduino que compten amb menor nombre d'E/S. Així que si estàs buscant un PCF8574, pots trobar-lo a botigues especialitzades o també a grans plataformes online com Amazon, Aliexpress oa eBay. Per exemple, aquí te'n recomanem un:

Connexió del PCF8574 a Arduinno

Per a la connectar l'expansor PCF8574 a la teva placa d'Arduino, l'esquema de connexió és força simple. Només hauràs de connectar:

  • El pin SCL marcat a la placa PCF8574 al pin SCL d'Arduino. Aquest pin pot canviar segons el model, però generalment és a l'A5 en els models més populars com l'UN.
  • El pin SDA de l'expansor s'ha de connectar amb el pin SDA d'Arduino. El mateix que he comentat anteriorment, podeu canviar segons el model, però generalment és l'A4. Si dubtes, consulta el pinout del teu model.
  • El pin GND del PCF8574 anirà connectat per descomptat al marcat com a GND a Arduino, és a dir, és la connexió de terra.
  • El pin Vcc de l'expansor va connectat a 5V d'Arduino, així, amb GND i Vcc tenim ja alimentada la placa expansora perquè pugui començar a funcionar.

Funcionament

Un cop el PCF8574 està connectat a la placa Arduino, ara toca conèixer com és el seu funcionament. Per això, has de tenir en compte que podràs comptar amb 8 pins extra, a canvi d'haver-ne fet servir dos d'Arduino, a més dels d'alimentació. D'altra banda, has de tenir en compte alguna cosa, i és que a cadascun dels 8 pins del PCF8574 tens un transistor MOSFET juntament amb una resistència pull-up de molt baixa resistència. Això suposa una intensitat de corrent de 100 microA quan el transistor és actiu.

I això ens deixa el següent panorama:

  • Configuració com a sortida: quan el pin s'usa com a sortida, actua com un embornal de corrent, com he comentat anteriorment, és a dir, el corrent flueix cap a dins.
    • LOW: quan està a baix voltatge, no condueix el corrent, la càrrega = Vdd.
    • HIGH: quan està a alt voltatge, pot passar fins a 25mA de corrent, la càrrega quedarà connectada a GND.
  • Configuració com a entrada: s'ha de posar sempre a HIGH o alt, i en aquest cas actuarà com una font, és a dir, el corrent flueix cap a fora.
    • tancada: quan la càrrega externa no es dóna, la tensió al pin passa a GND.
    • oberta: quan es produeix una càrrega externa, la tensió del pin passa a Vdd.

Codi Arduí IDE

Arduino IDE, tipus de dades, programació

Si el que vols és alguns exemples de com crear codi per utilitzar aquest PCF8574 a Arduino, és tan senzill com utilitzar aquests exemples de codi que podràs modificar segons les teves necessitats:

  • Configuració com a sortida:
#include <Wire.h>

const int pcfAddress = 0x38;

void setup()
{
  Wire.begin();
  Serial.begin(9600);
}

void loop()
{
  for (short channel = 0; channel < 8; channel++)
  {
    // Escribir dato en canal 'channel'
    Wire.beginTransmission(pcfAddress);
    Wire.write(~(1 << channel));
    Wire.endTransmission();
    
    // Leer dato de canal
    delay(500);
  }
}
  • Configuració com a entrada:
#include <Wire.h>

const int pcfAddress = 0x38;

void setup()
{
  Wire.begin();
  Serial.begin(9600);
}

void loop()
{
  short channel = 1;
  byte value = 0;

  // Leer dato de canal 'channel'
  Wire.requestFrom(pcfAddress, 1 << channel);
  if (Wire.available())
  {
    value = Wire.read();
  }
  Wire.endTransmission();

  // Mostrar el valor por puerto serie
  Serial.println(value);
}

Recorda que també pots fer servir la biblioteca creada especialment per al PCF8574 que també inclou exemples pràctics…


Sigues el primer a comentar

Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.