Icono del sitio ELECTROALL

PCF8574 circuito expansor de pines

YouTube
YouTube
Instagram
Instagram
GitHub
GitHub
DESCRIPCIÓN

Es un circuito integrado con bus bidireccional que es capas de expandir entradas o salidas a través de la comunicación I2C, este dispositivo esta diseñado para operar desde 2.5V – 6V.

Cuyo propósito general de este dispositivo es el de aumentar la cantidad de pines de entradas/salidas para microcontroladores, tales como ATmega, PIC, etc. Para el control de estas E/S se hará uso del interfaz 2C [reloj serie =(SCL), Datos en serie (SDA)].
con este dispositivo podremos controlar 8 entradas u 8 salidas ya que es un circuito integrado bidireccional.

CARACTERÍSTICAS

•  Bajo consumo de corriente en espera de 10 μA máx.
•  Interfaz de bus I2C de 100 kHz (bus I2C en modo estándar)
• Salida de interrupción de drenaje abierto
• Compatible con la mayoría de los microcontroladores
• Salidas enclavadas con unidad de alta corriente
Tensión de alimentación, 2,5 V a 6 V con E / S no tolerantes a sobretensión en VDD con 100 µA fuente de corriente
• Pines de E / S remotas de 8 bits que por defecto son entradas en el encendido
    Las salidas enclavadas conectadas conducen directamente los LED
• Temperatura de trabajo -40 °C a +85  °C 

ESQUEMA GENERAL
FUNCIONES PINES
  • PINES ADDRESS INPUT 0 – 2; Todo tipo de comunicación requiere una dirección de identificación para poder establecer una comunicación eficiente con un determinado dispositivo. En tal sentido este dispositivo no es la excepción, por lo tanto tendremos  8 direcciones en formato Hex para poder usar en el IDE de arduino o cualquier u otro microcontrolador que tenga la comunicación I2C. A continuación se muestra el cambio y la configuración de las direcciones con estados lógicos de [ 0 logico(0V), 1 logico(+5V)].

Ejemplo: configuración de las direcciones (0x20), (0x21), (0x27).

//visto desde la programación (0x20)
PCF8574 pcf8574(0x20);
//visto desde la programación (0x21)
PCF8574 pcf8574(0x21);
//visto desde la programación (0x27)
PCF8574 pcf8574(0x27);
  • PINES BIDIRECTIONALS I/O 0 – 7; Prácticamente estos pines son propiamente de expansión de 8 bits. Quiere decir, que podemos controlar 8 entradas u 8 salidas, según a lo que sea requerido por el electrónico. Al final de la página mostraremos todos los ejemplos posibles.
  • COMUNICACIÓN BUS I2C; Este bus me permite la comunicación entre dos dispositivos a través de 2 vías; linea de datos en serie(SDA), linea de reloj en serie(SCL). Estos dos pines necesariamente tienen que estar conectado a 5V con resistencias de PULL-UP de 4.7kOhm tal como se muestra en la siguiente imagen.
  • INTERRUPTOR OUT (INT); Es un pin de drenaje abierto por lo que se necesita conectar una resistencia de PULL-UP, esto se realizar para lograr un nivel alto(5V) constante.
    Este puerto funciona de la siguiente manera; Cuando detecta un flanco ya sea ascendente o descendente este pin(INT) inmediatamente activa un mosfet interno de canal N, por ende tendremos un 0V cada vez que se obtenga un cambio de estado en los pines (P1 – P7).

    NOTA; si se usa un microcontrolador(ATmega) que sea programado a través del IDE de arduino ya no será necesario colocar una resistencia de PULL-UP, ya que internamente cuenta una resistencia de PULL-UP, dicha resistencia interna se podrá activar desde la programación.
    int pin_INT =2;// INTERRUPTOR DEL CI PCF8574
    pinMode( pin_INT, INPUT_PULLUP);

     

EJEMPLOS PRÁCTICOS:

1.- USO DEL CI PCF8574 COMO ENTRADAS;

  •  Esquemático electrónico.
  • Código IDE Arduino
/* 
                CREADO POR      :{==[=======>>>> ELECTROALL <<<<<=======]==}
                INSTAGRAM       : https://www.instagram.com/carlos_j_fuentess/ ó  @carlos_j_fuentess
                FACEBOOK        : https://web.facebook.com/ELECTROALL.ELECTRONICA/?_rdc=1&_rdr
                PÁGINA WEB      : https://www.electroallweb.com/
                YOUTUBE         : https://www.youtube.com/c/ELECTROALL
           _________________________________________________________________

           *** {==[=======> (ENTRADAS  PCF8574) <=======]==}  ***
           ___________________________________________________________________
*/

#include "Arduino.h"
#include "PCF8574.h"
//DESCARGAR LA LIBRERÍA AHORA: https://github.com/ELECTROALL/LIBRERIAS/blob/master/PCF8574_library-master.rar

PCF8574 pcf8574(0x20);// dirección de la configuración del dispositivo
int led=13;
void setup(){
  pcf8574.begin();// inicializamos la comunicación entre el uc y el CI PCF8574

 pinMode(led,OUTPUT);         ////se declará el pin 13 como SALIDA

  pcf8574.pinMode(P0, INPUT); //se declará el pin PO del CI PCF8574 como entrada
  pcf8574.pinMode(P1, INPUT); //se declará el pin P1 del CI PCF8574 como entrada
  pcf8574.pinMode(P2, INPUT); //se declará el pin P2 del CI PCF8574 como entrada
  pcf8574.pinMode(P3, INPUT); //se declará el pin P3 del CI PCF8574 como entrada
  pcf8574.pinMode(P4, INPUT); //se declará el pin P4 del CI PCF8574 como entrada
  pcf8574.pinMode(P5, INPUT); //se declará el pin P5 del CI PCF8574 como entrada
  pcf8574.pinMode(P6, INPUT); //se declará el pin P6 del CI PCF8574 como entrada
  pcf8574.pinMode(P7, INPUT); //se declará el pin P7 del CI PCF8574 como entrada

}

void loop(){
  uint8_t PIN_P0 = pcf8574.digitalRead(P0);            // Lee el valor del pin P0
  uint8_t PIN_P1 = pcf8574.digitalRead(P1);            // Lee el valor del pin P1      
  uint8_t PIN_P2 = pcf8574.digitalRead(P2);            // Lee el valor del pin P2 
  uint8_t PIN_P3 = pcf8574.digitalRead(P3);            // Lee el valor del pin P3 
  uint8_t PIN_P4 = pcf8574.digitalRead(P4);            // Lee el valor del pin P4 
  uint8_t PIN_P5 = pcf8574.digitalRead(P5);            // Lee el valor del pin P5 
  uint8_t PIN_P6 = pcf8574.digitalRead(P6);            // Lee el valor del pin P6 
  uint8_t PIN_P7 = pcf8574.digitalRead(P7);            // Lee el valor del pin P7 

       if (PIN_P0 == HIGH){            // Si se presiona el boton P0,
 digitalWrite(led, HIGH); //entonces que se ponga en alto el PIN 13 
  }
       if (PIN_P1 == HIGH){           // Si se presiona el boton P1,
 digitalWrite(led, HIGH);//entonces que se ponga en alto el PIN 13 
  }
       if (PIN_P2 == HIGH){         // Si se presiona el boton P2,
 digitalWrite(led, HIGH);//entonces que se ponga en alto el PIN 13 
  }
        if (PIN_P3 == HIGH){         // Si se presiona el boton P3,
 digitalWrite(led, HIGH);//entonces que se ponga en alto el PIN 13  
  }
        if (PIN_P4 == HIGH){         // Si se presiona el boton P4,
 digitalWrite(led, HIGH);//entonces que se ponga en alto el PIN 13 
  }
        if (PIN_P5 == HIGH){         // Si se presiona el boton P5,
 digitalWrite(led, HIGH);//entonces que se ponga en alto el PIN 13 
  }
        if (PIN_P6 == HIGH){         // Si se presiona el boton P6,
 digitalWrite(led, HIGH);//entonces que se ponga en alto el PIN 13 
  }
        if (PIN_P7 == HIGH){         // Si se presiona el boton P7,
 digitalWrite(led, HIGH);//entonces que se ponga en alto el PIN 13 
  }
delay(1);// Tiempo para que la comunicación se establezca con normalidad

if(PIN_P0||PIN_P1||PIN_P2||PIN_P3||PIN_P4||PIN_P5||PIN_P6||PIN_P7==0){
digitalWrite(led, LOW);// si el estado de cualquiera entrada es 0, q se apague el LED.  
  }
}

2.- USO DEL CI PCF8574 COMO SALIDAS;

  •  Esquemático electrónico.
  • Código IDE Arduino
/* 
                CREADO POR      :{==[=======>>>> ELECTROALL <<<<<=======]==}
                INSTAGRAM       : https://www.instagram.com/carlos_j_fuentess/ ó  @carlos_j_fuentess
                FACEBOOK        : https://web.facebook.com/ELECTROALL.ELECTRONICA/?_rdc=1&_rdr
                PÁGINA WEB      : https://www.electroallweb.com/
                YOUTUBE         : https://www.youtube.com/c/ELECTROALL
           _________________________________________________________________

           *** {==[=======> (SALIDAS PCF8574) <=======]==}  ***
           ___________________________________________________________________
*/

#include "Arduino.h"
#include "PCF8574.h"
//DESCARGAR LA LIBRERÍA AHORA: https://github.com/ELECTROALL/LIBRERIAS/blob/master/PCF8574_library-master.rar

PCF8574 pcf8574(0x20);// dirección de la configuración del dispositivo

void setup(){
  pcf8574.begin();// inicializamos la comunicación entre el uc y el CI PCF8574

  pcf8574.pinMode(P0, OUTPUT);  //se declará el pin PO del CI PCF8574 como SALIDA
  pcf8574.pinMode(P1, OUTPUT);  //se declará el pin P1 del CI PCF8574 como SALIDA
  pcf8574.pinMode(P2, OUTPUT);  //se declará el pin P2 del CI PCF8574 como SALIDA
  pcf8574.pinMode(P3, OUTPUT);  //se declará el pin P3 del CI PCF8574 como SALIDA
  pcf8574.pinMode(P4, OUTPUT);  //se declará el pin P4 del CI PCF8574 como SALIDA
  pcf8574.pinMode(P5, OUTPUT);  //se declará el pin P5 del CI PCF8574 como SALIDA
  pcf8574.pinMode(P6, OUTPUT);  //se declará el pin P6 del CI PCF8574 como SALIDA
  pcf8574.pinMode(P7, OUTPUT);  //se declará el pin P7 del CI PCF8574 como SALIDA

}

void loop(){
  pcf8574.digitalWrite(P0, HIGH);//PIN P0 EN ALTO
 delay(500);
  pcf8574.digitalWrite(P1, HIGH);//PIN P1 EN ALTO
 delay(500);
  pcf8574.digitalWrite(P2, HIGH);//PIN P2 EN ALTO
 delay(500);
  pcf8574.digitalWrite(P3, HIGH);//PIN P3 EN ALTO
 delay(500);
  pcf8574.digitalWrite(P4, HIGH);//PIN P4 EN ALTO
 delay(500);
  pcf8574.digitalWrite(P5, HIGH);//PIN P5 EN ALTO
 delay(500);
  pcf8574.digitalWrite(P6, HIGH);//PIN P6 EN ALTO
 delay(500);
  pcf8574.digitalWrite(P7, HIGH);//PIN P7 EN ALTO
 delay(500);

  pcf8574.digitalWrite(P0, LOW); //PIN P0 EN BAJO
 delay(500);
  pcf8574.digitalWrite(P1, LOW); //PIN P1 EN BAJO
 delay(500);
  pcf8574.digitalWrite(P2, LOW); //PIN P2 EN BAJO
 delay(500);
  pcf8574.digitalWrite(P3, LOW); //PIN P3 EN BAJO
 delay(500);
  pcf8574.digitalWrite(P4, LOW); //PIN P4 EN BAJO
 delay(500);
  pcf8574.digitalWrite(P5, LOW); //PIN P5 EN BAJO
 delay(500);
  pcf8574.digitalWrite(P6, LOW); //PIN P6 EN BAJO
 delay(500);
  pcf8574.digitalWrite(P7, LOW); //PIN P7 EN BAJO
 delay(500);

}

3.- USO DEL CI PCF8574 COMO ENTRADAS Y SALIDAS;

  •  Esquemático electrónico.
  • Código IDE Arduino
/* 
                CREADO POR      :{==[=======>>>> ELECTROALL <<<<<=======]==}
                INSTAGRAM       : https://www.instagram.com/carlos_j_fuentess/ ó  @carlos_j_fuentess
                FACEBOOK        : https://web.facebook.com/ELECTROALL.ELECTRONICA/?_rdc=1&_rdr
                PÁGINA WEB      : https://www.electroallweb.com/
                YOUTUBE         : https://www.youtube.com/c/ELECTROALL
           _________________________________________________________________

           *** {==[=======> (ENTRADAS Y SALIDAS PCF8574) <=======]==}  ***
           ___________________________________________________________________
*/

#include "Arduino.h"
#include "PCF8574.h"
//DESCARGAR LA LIBRERÍA AHORA: https://github.com/ELECTROALL/LIBRERIAS/blob/master/PCF8574_library-master.rar

PCF8574 pcf8574(0x20);// dirección de la configuración del dispositivo
//unsigned long timeElapsed;

void setup(){
  pcf8574.begin();// inicializamos la comunicación entre el uc y el CI PCF8574

  pcf8574.pinMode(P0, INPUT); //se declará el pin PO del CI PCF8574 como entrada
  pcf8574.pinMode(P7, OUTPUT);//se declará el pin P7 del CI PCF8574 como salida

  pcf8574.pinMode(P1, INPUT); //se declará el pin P1 del CI PCF8574 como entrada
  pcf8574.pinMode(P6, OUTPUT);//se declará el pin P6 del CI PCF8574 como salida

  pcf8574.pinMode(P2, INPUT); //se declará el pin P2 del CI PCF8574 como entrada
  pcf8574.pinMode(P5, OUTPUT);//se declará el pin P5 del CI PCF8574 como salida

}

void loop(){
  uint8_t PIN_P0 = pcf8574.digitalRead(P0);            // Lee el valor del pin P0
  uint8_t PIN_P1 = pcf8574.digitalRead(P1);            // Lee el valor del pin P1      
  uint8_t PIN_P2 = pcf8574.digitalRead(P2);            // Lee el valor del pin P2               
  if (PIN_P0 == HIGH){              // Si se presiona el boton P0,
    pcf8574.digitalWrite(P7, HIGH); //entonces que se ponga en alto el P7 
  }
  else   {
    pcf8574.digitalWrite(P7, LOW);  //caso contrario q se ponga en bajo el P7
  }
  delay(10);

    if (PIN_P1 == HIGH){           // Si se presiona el boton P1,
    pcf8574.digitalWrite(P6, HIGH);//entonces que se ponga en alto el P6
  }
  else   {
    pcf8574.digitalWrite(P6, LOW);//caso contrario q se ponga en bajo el P6
  }
  delay(10);

      if (PIN_P2 == HIGH){         // Si se presiona el boton P2,
    pcf8574.digitalWrite(P5, HIGH);//entonces que se ponga en alto el P5 
  }
  else   {
    pcf8574.digitalWrite(P5, LOW);//caso contrario q se ponga en bajo el P5
  }
  delay(10);
}
VIDEO
Salir de la versión móvil