Cómo utilizar un expansor de puerto I2C MCP23017 con el Raspberry Pi – Parte 2

Rate this post

InHow To Use A MCP23017 I2C Port Expander With The Raspberry Pi – Part 1 Expliqué cómo configurar su Pi para usar I2C para que pueda conectar un expansor de puertos de 16 bits MCP23017 a él. Si has seguido ese artículo y tienes tu circuito listo, estás a sólo unos pasos de controlar el chip usando un simple script Python.

En este post nos concentraremos en controlar las salidas. Estamos utilizando los tres primeros pines del conjunto “GPA”. Hay otro conjunto de ocho pines (GPB0 – GPB7) que pueden ser controlados de la misma manera con unos pocos ajustes de código.

Para este tipo de proyectos una calculadora que puede convertir entre binario, decimal y hexadecimal es extremadamente útil. Hay un montón de calculadoras que pueden hacer esto disponible para su sistema operativo, ya sea que esté usando una computadora de escritorio o portátil. Un convertidor binario fácil de usar se puede encontrar en nuestro sitio hermano.

Script Python para salidas

Aquí hay un script de ejemplo que contará de 1 a 8 configurando los primeros tres pines de GPA a medida que avanza :

1234567891011121314141516171818192021222324252627import smbusimport time#bus = smbus.SMBus(0) # Rev 1 Pi usa 0bus = smbus.SMBus(1) # Rev 2 Pi utiliza 1DEVICE = 0x20 # Dirección de dispositivo (A0-A2)IODIRA = 0x00 # Dirección de clavija registerOLATA = 0x14 # Registro de salidasGPIOA = 0x12 # Registro de entradas# Configurar todos los pines GPA como salidas ajustando# todos los bits del registro IODIRA a 0bus.write_byte_data(DEVICE,IODIRA,0x00)# Establecer la salida de todos los 7 bits de salida a 0bus.write_byte_data(DEVICE,OLATA,0)para MyData en el rango(1,8):# Contar de 1 a 8 que en binario contará# desde 001 hasta 111bus.write_byte_data(DEVICE,OLATA,MyData)print MyDatatime.sleep(1)# Establecer todos los bits en zerobus.write_byte_data(DEVICE,OLATA,0)

Puede descargar directamente a su Pi usando :

wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/mcp23017/mcp23017_outputs.py

Puede ejecutar el script usando el siguiente comando :

sudo python mcp23017_outputs.py

El script anterior realiza las siguientes acciones :

  • Importa las librerías smbus y time
  • Crea un objeto smbus llamado “bus”
  • Configura algunas constantes
  • Establece todos los pines GPA como salidas
  • Establece todos los pines de GPA a cero
  • Cuenta de 1 a 8 y ajusta los pines de GPA al equivalente binario esperando 1 segundo entre cada paso
  • .

  • Finalmente pone todo el GPA a cero

Lo que debería ver es que los LEDs se iluminan en una secuencia binaria :

000,001,010,011,100,101,110,111

Lo más importante a tener en cuenta es que cuando se envían datos a un registro hay que configurar los 8 bits de una sola vez. Para configurar todos los pines GPA como salidas se envía 0000000 al registro IODIRA. Para configurarlas todas como entradas es necesario enviar 1111111 binario, o 255 decimal o 0xFF hex. Para configurar GPA0-3 como salidas y GPA4-8 como entradas es necesario configurar 1111000 binarios, 240 decimales o 0xF0 hexadecimales.

Es la misma historia para ajustar los pines de las salidas. Si ha configurado los pines GPA como salidas y desea configurar el GPA1 a nivel alto y todos los demás pines a nivel bajo, deberá enviar 0000000010 al registro OLATA. Si quiere poner el GPA2 y el GPA7 a un nivel alto, enviaría 10000100.

Visite la página Cómo usar un expansor de puertos I2C MCP23017 con el Raspberry Pi – Parte 3 que explica cómo configurar los pines como entradas y leer su estado.

Deja un comentario

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