Saltar al contenido

Cómo usar varios chips mcp23017 con la biblioteca adafruit mcp23017.h

Después de observar en diferentes repositorios y páginas de internet al concluir dimos con la resolución que te compartiremos más adelante.

Solución:

Cada chip debe tener una dirección única, y esto es factible de acuerdo con la página 8 del manual de Microchip. Entonces, antes que nada, debe configurar diferentes direcciones en el diseño de su hardware.

También debe crear un Adafruit_MCP23017 objeto para cada chip que desee usar y configure las direcciones correspondientes en su código.

En este caso, los pines de todos los chips tendrán direcciones en el rango 0-15. Para cambiar el estado del pin, debe hacer referencia a una instancia particular.


Actualizar

Este es el punto de partida para ti.

#include "Adafruit_MCP23017.h"
Adafruit_MCP23017 mcp1;
Adafruit_MCP23017 mcp2;
Adafruit_MCP23017 mcp3;
#define addr1 0x00
#define addr2 0x01
#define addr3 0x02
void setup() 
 mcp1.begin(addr1);
 mcp2.begin(addr2);
 mcp3.begin(addr3);


void loop() 



Comparto mi solución con 7 chips MCP23017, 7×14 pines = 98 pines usando la biblioteca adafruit.

Conexiones:

addr 0 = A2 low , A1 low , A0 low  000
addr 1 = A2 low , A1 low , A0 high 001
addr 2 = A2 low , A1 high , A0 low  010
addr 3 = A2 low , A1 high , A0 high  011
addr 4 = A2 high , A1 low , A0 low  100
addr 5 = A2 high , A1 low , A0 high  101
addr 6 = A2 high , A1 high , A0 low  110
addr 7 = A2 high, A1 high, A0 high 111

Connect pin #12 of the expander to Analog 5 (i2c clock)
Connect pin #13 of the expander to Analog 4 (i2c data)
Connect pins #15, 16 and 17 of the expander to ground (address selection)
Connect pin #9 of the expander to 5V (power) // operation voltage is 1.8 to 5.5
Connect pin #10 of the expander to ground (common ground)
Connect pin #18 through a ~10kohm resistor to 5V (reset pin, active low)

Input #0 is on pin 21 so connect a button or switch from there to ground

Código:

#include 


Adafruit_MCP23017 mcp1; // chip 1
Adafruit_MCP23017 mcp2; // chip 2

#define addr1 7 // 7 = A2 high, A1 high, A0 high
#define addr2 0 // 0 = A2 low, A1 low, A0 low
void setup() 
  
    Serial.begin(9600); 
    mcp1.begin(addr1);
    mcp2.begin(addr2);

    mcp1.pinMode(0, INPUT); //pin 21 on chip
    mcp2.pinMode(0, INPUT); //pin 21 on chip

   

  void loop()
   
      if(mcp1.digitalRead(0)== HIGH )
      Serial.println("HIGH"); 
      delay(1000);

      if(mcp2.digitalRead(0)== HIGH )
      Serial.println("HIGH 2"); 
      delay(1000);
  

Comentarios y valoraciones

Si estás contento con lo expuesto, tienes la opción de dejar un enunciado acerca de qué te ha gustado de este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *