Uno de los fantasmas que atormenta a todo diseñador de circuitos basados en microcontroladores es la falta de uno, o más pines de entrada/salida (I/O) cuando el diseño ya está en la etapa final. Por lo general, la solución termina en groseros intentos de “sacrificar” partes del hardware y en el peor de los escenarios, nos pasamos días y noches enteras intentando utilizar un único pin para realizar más de 5 trabajos diferentes. Por fortuna, para resolver estos problemas, existen los expansores de puertos y el PCA9554 de Texas Instruments es un circuito integrado ideal para resolver este tipo de situaciones. Compatible pin a pin con el popular PCF8574A, este circuito integrado te ayudará a resolver la falta de pines I/O de manera muy eficiente y en muy poco espacio. Descúbrelo.
El expansor de puertos PCA9554 de Texas Instruments además de ser, como mencionamos en el sumario, compatible pin a pin con el popular PCF8574A es una herramienta que siempre debe estar a mano de cualquier desarrollador de circuitos basados en microcontroladores. En cualquier aplicación donde la adquisición de datos es la tarea más importante de un sistema basado en un microcontrolador, los puertos de entrada y salida son elementos que adquieren un valor superlativo. Un espacio muy claro donde este tipo de dispositivos cobra una notoriedad importante es en un equipo de diagnóstico, o por decirlo de otro modo, en un sistema monitor de funcionamiento apropiado de cualquier equipo importante. Puedo citarles el ejemplo de un probador de sistemas ópticos de equipos reproductores de DVD, instrumento que hace algunos años tuve la fortuna de poder desarrollar. Entre las mediciones necesarias puedo enumerar desde los valores de tensión de alimentación, pasando por la corriente de trabajo de los diodos láser que forman la unidad óptica y hasta realizar un seguimiento profundo al régimen de funcionamiento de los motores Spindle y Sled (Giro del disco y Traslación del sistema óptico) que ocasionan múltiples fallas. De un PIC 18F2550, no quedó una sola entrada ADC sin utilizar y las entradas y salidas digitales alcanzaron en la cantidad exacta. Si hubiera deseado agregar un LED, no hubiera podido.
PCA9554: Expansor de puertos I2C
Un expansor de puertos como el PCA9554 te permitirá aumentar el número de entradas y salidas digitales de un microcontrolador de manera muy sencilla y efectiva a través del bus I2C. Como en la mayoría de los dispositivos que utilizan este tipo de bus, puedes “programar” la dirección de cada uno de ellos y colocar hasta 8 expansores (16 en el caso del PCA9554A). Esto puede llegar a brindarte hasta 64 entradas y salidas digitales adicionales a cualquier tipo de microcontrolador que hayas seleccionado para tu diseño. Es decir, si necesitas realizar un trabajo donde no sea fundamental realizar procesos con alta velocidad de datos, ni donde el poder de proceso requerido sea elevado y donde la cantidad de entradas y salidas sean una prioridad a resolver, tu pequeño microcontrolador se verá muy beneficiado con la compañía de este tipo de expansores. El funcionamiento de este circuito es muy elemental: envías una instrucción por el bus I2C y el expansor la reproduce en el puerto de salida. Lo mismo ocurre a la inversa: cualquier evento detectado a la entrada del puerto se traduce como información que viaja al microcontrolador para ser utilizada. Para organizar su trabajo, el PCA9554 posee cuatro registros muy definidos y sencillos de programar con los que podrás determinar la manera en que organizarás el trabajo para cada entrada o salida. Para poder escribir los registros en el momento de conexión inicial debes escribir los bits del registro de control y luego hacer lo necesario con los registros que desees modificar.
Al momento de aplicar tensión al circuito, todo el puerto I/O se configura como entrada y en la instrucción inicial el Master (el microcontrolador que utilizará el expansor) enviará un byte al registro de configuración donde podrás definir cuáles pines serán entradas y cuales trabajarán como salida. Cada dato enviado o recibido por el puerto será almacenado en el correspondiente registro de entrada o de salida y las polaridades de funcionamiento del puerto pueden ser invertidas por el registro correspondiente. Por supuesto, todos estos registros pueden ser leídos en cualquier circunstancia, además de ser escritos por el Master. Otra particularidad del PCA9554 es la salida INT (open drain) que se activa en estado bajo ante cada flanco ascendente o descendente correspondiente a cualquier evento ocurrido en una entrada. Esta información (de que algo ha sucedido en alguna entrada del expansor) puede ser muy útil para activar otros sistemas asociados o para activar interrupciones en el mismo microcontrolador que esté oficiando de Master. De este modo, el PCA9554 ofrece una información directa e instantánea de eventos de entrada sin demoras de tiempo que podrían establecerse en el protocolo del bus I2C. Por último, podemos destacar que cada salida puede activar en forma directa a un LED con corrientes cercanas a los 20mA por salida, al igual que lo haría cualquier microcontrolador.
Para nuestro ensayo con el PCA9554 hemos utilizado el software gratuito Amicus y un PIC 18F25K20. En el trabajo realizado empleamos 4 pulsadores de entradas y 4 diodos LED para visualizar la actividad de salida. En tu caso, puedes emplear entradas desde interruptores remotos, pulsadores, matrices de teclados, salidas de activación a relés, lámparas, motores y todo lo que cualquier puerto de un microcontrolador podría ofrecerte. El secreto estará en cómo definas la organización del puerto mediante el byte de configuración. El circuito que experimentamos es muy elemental y no requiere de mayores explicaciones salvo las tradicionales recomendaciones de utilizar la mayor cantidad posible de capacitores de desacoplo para evitar ruidos parásitos. Estos ruidos pueden provocar muchos dolores de cabeza y lo mejor que podemos hacer es tener la precaución de mantener una línea de alimentación bien filtrada y protegida contra los ruidos eléctricos.
El funcionamiento de nuestro trabajo no se limita a la simple acción de pulsar un botón y que un LED se encienda. El código fuente, que está disponible al final de este artículo, permite ver un encendido secuencial de los LEDs conectados a los pines que ofician de salidas en el puerto y cada pulsador de toque suave permite alternar entre diferentes efectos. Eso te permitirá apreciar las posibilidades que brinda esta herramienta para expansión de puertos. La mayoría de los microcontroladores de gama baja o media, traen puertos A, B, C, D y E en los encapsulados de mayor cantidad de pines. Imagina que ahora podrás disponer de casi todo el alfabeto para designar pines de entrada y salida a tus sistemas. Observa el video con la demostración de nuestro trabajo:
En la hoja de datos del PCA9554 encontrarás todos los valores recomendados de trabajo junto a ejemplos de conexión y de lectura o escritura de cada uno de los registros asociados a este dispositivo. El funcionamiento habitual es el que hemos visto aquí y tú puedes reproducirlo para estar preparado al momento en que necesites esos pines de más. Siempre en el momento y montaje menos esperado.
El funcionamiento de este circuito es muy elemental: envías una instrucción por el bus I2C y el expansor la reproduce en el puerto de salida.
Muy Bueno Mario.
Jukinch
Como siempre un excelente articulo 😀 cuando estaba estudiando vi compañeros que usaba el mismo puerto para instalar el teclado y el LCD, en otro un teclado por un puerto A/D y mucho otro casos para colocar todas la funciones en un solo pic muchas de esa traían mucho problema, esta es una buena solución.
Gracias 😀
Excelente¡ Lo que se necesitaba.
jose Omar
Grandiosa informacion y pasas muy facil de la teoria a la practica; y cuando hablas sobre la falta de pines en un micro es muy cierto, a veces solo necesitamos un poco mas para hacer cosas como encender leds indicadores, o por ejemplo cuando manejas un teclado matricial 4×4 se te comsumen 8 pines valiosisimos.
Muchas gracias,
Un abrazo
Como siempre muy buen trabajo Mario Sacco, pero tengo una duda, este micro me serviría para poder expandir los puertos del arduino uno, por ejemplo quiero hacer un brazo robótico que necesita controlar hasta 3 motores paso a paso pero los puertos con los que cuenta el arduino uno son muy pocos, y claro que existen muchas otras familias de arduino pero la única limitante es el capital con el que cuento.
#5 Saludos a todos ! :)) Exacto, este tipo de expansores te sirven para cualquier tipo de microcontrolador sin importar la marca que sean. El fundamento es saber programar los registros que se desean usar, luego es tan sencillo como enviar una instrucción directa a un puerto específico. La diferencia es que aquí la envías al bus I2C. Saludos! Mario
Mario, envialo a la gente de amicus18 para que lo agreguen a la libreria, excelente el trabajo! saludos
Notable articulo, aunque es fuera de tema alguno podría desasnarme como se utiliza el comparador con pic simulator ide del pic 16f628a
si lo se estoy lejos, pero lo unico que se empieza de arriba son los pozos, saludos desde la republica oriental
he trabajado con el bus i2c y nunca me paso por la cabeza poderlos utilizar este grandioso bus de comunicación como un expansor de puerto, gracias por el articulo
muy buieno gracias por enseñar
me parece muy bueno el articulo y de mucha ayuda ……. pero me gustaria saber si es posible conseguir una copia de un codigo con el mismo funcionamiento pero en lenguaje C .
gracias.