pcf8574 expansor remoto - hmangas.com expansor pcf8574... · pero antes quiero presentar unos...

5
PCF8574 EXPANSOR REMOTO Serie Bus I 2 C Tema: INTRODUCCIÓN. Cuando estuve preparando un proyecto en el que mediaba un Arduino, un teclado y una memoria, hubo un momento en el que, me faltaban patillas de E/S, estaba preocupado con el tema de las "pocas" patillas de las que podía disponer con el Arduino. No andaba yo muy fino, en realidad no tenía conocimiento de las posibilidades que ponía a mi alcance el I 2 C-bus. Estuve indagando, como siempre, en la red hallé la respuesta. La red y mi empeño personal, por supuesto. Así que, adquirí en el comercio un dispositivo del que desconocía bastante, aunque había oído que podía expandir un puerto. Aquello me sonaba a "chino", yo conocía de los multiplexores, decodificadores síncrono y asíncronos, pero lo de expandir un puerto, la verdad, no tenía claro el tema. Consulté que dispositivos había accesibles para realizar un montaje y hacer una prueba para ver cómo funcionaba el nuevo expansor de 8 bit. Lo que más me llamó la atención es que, usaba el bus I 2 C, es decir que con dos cables, hilos o patillas, podía obtener las posibilidades de un puerto de 8bits o casi, con las funciones de un teclado, lo que se adaptaba felizmente al proyecto. A decir verdad, existen varios dispositivos en el mercado que sirven para este tipo de propósito (como el de TI PCA9535 entre otros), sin embargo, yo usaré el PCF8574A que, es del que dispongo. EL PCF8574 Entra en escena el expansor de I/O PCF8574, en el DS u hojas de datos del fabricante (Philips), me aclaró ciertos puntos, otros sin embargo, no había forma de comprender y aquí es donde empieza este, mi trabajo. Según el DS, el PCF8574 consiste en un puerto cuasi bidireccional de 8 bit, que se sirve de una interfaz I 2 C-bus. El PCF8574 tiene una baja corriente de consumo e incluye salidas cerrojo (latch) con capacidad de alta corriente para conducir directamente LEDs. Este, también posee una línea de interrupción (INT ), que puede ser conectada a la lógica interrupt del microcontrolador. Mediante el envío de una señal interrupt sobre esta línea, la E/S remota puede informar al microcontrolador si hay datos entrantes en sus puertos sin necesidad de comunicarse a través del I2C-bus. Esto quiere decir que el PCF8574 puede seguir siendo un simple dispositivo esclavo. Encapsulado en 16-DIP. El PCF8574 y PCF8574A son versiones que difieren sólo en su dirección Slave, como se muestra más abajo, en la Fig.9. Si usted tiene un PCF8574P o PCF8574AP. Debe tener en cuenta la diferencia de dirección de según cual utilice. El PCF8574P tiene su dirección a partir de 0100 0000 (hex 40h), el PCF8574AP por su parte, tiene su dirección a partir de 0111 0000 (hex 70h). No obstante esto, no afecta en absoluto al modo en que el dispositivo funciona, a menos que tenga más de 8 de estos dispositivos. Buscar

Upload: vubao

Post on 01-Oct-2018

231 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PCF8574 EXPANSOR REMOTO - hmangas.com Expansor PCF8574... · Pero antes quiero presentar unos apuntes interesantes sobre el tema, que si lo desea puede saltarse. Por cierto. En un

PCF8574 EXPANSOR REMOTO Serie Bus I2C

Tema:

INTRODUCCIÓN.

Cuando estuve preparando un proyecto en el que mediaba un Arduino, un teclado y una memoria, hubo un momento en el que, me faltaban patillas de E/S, estaba preocupado con el tema de las "pocas" patillas de las que podía disponer con el Arduino. No andaba yo muy fino, en realidad no tenía conocimiento de las posibilidades que ponía a mi alcance el I2C-bus.

Estuve indagando, como siempre, en la red hallé la respuesta. La red y mi empeño personal, por supuesto. Así que, adquirí en el comercio un dispositivo del que desconocía bastante, aunque había oído que podía expandir un puerto. Aquello me sonaba a "chino", yo conocía de los multiplexores, decodificadores síncrono y asíncronos, pero lo de expandir un puerto, la verdad, no tenía claro el tema. 

Consulté que dispositivos había accesibles para realizar un montaje y hacer una prueba para ver cómo funcionaba el nuevo expansor 

de 8 bit. Lo que más me llamó la atención es que, usaba el bus I2C, es decir que con dos cables, hilos o patillas, podía obtener las posibilidades de un puerto de 8bits o casi, con las funciones de un teclado, lo que se adaptaba felizmente al proyecto. A decir verdad, existen varios dispositivos en el mercado que sirven para este tipo de propósito (como el de TI PCA9535 entre otros), sin embargo, yo usaré el PCF8574A que, es del que dispongo. 

EL PCF8574

Entra en escena el expansor de I/O PCF8574, en el DS u hojas de datos del fabricante (Philips), me aclaró ciertos puntos, otros sin embargo, no había forma de comprender y aquí es donde empieza este, mi trabajo. 

Según el DS, el PCF8574 consiste en un puerto cuasi bidireccional de 8 bit, que se sirve de una interfaz I2C-bus. El PCF8574 tiene una baja corriente de consumo e incluye salidas cerrojo (latch) con capacidad de alta corriente para conducir directamente LEDs. Este, también posee una línea de interrupción (INT), que puede ser conectada a la lógica interrupt del microcontrolador. Mediante el envío de una señal interrupt sobre esta línea, la E/S remota puede informar al microcontrolador si hay datos entrantes en sus puertos sin necesidad de comunicarse a través del I2C-bus. Esto quiere decir que el PCF8574 puede seguir siendo un simple dispositivo esclavo.

Encapsulado en 16-DIP. El PCF8574 y PCF8574A son versiones que difieren sólo en su dirección Slave, como se muestra más abajo, en la Fig.9. Si usted tiene un PCF8574P o PCF8574AP. Debe tener en cuenta la diferencia de dirección de según cual utilice. El PCF8574P tiene su dirección a partir de 0100 0000 (hex 40h), el PCF8574AP por su parte, tiene su dirección a partir de 0111 0000 (hex 70h). No obstante esto, no afecta en absoluto al modo en que el dispositivo funciona, a menos que tenga más de 8 de estos dispositivos.

Buscar

Page 2: PCF8574 EXPANSOR REMOTO - hmangas.com Expansor PCF8574... · Pero antes quiero presentar unos apuntes interesantes sobre el tema, que si lo desea puede saltarse. Por cierto. En un

Analicemos un poco más esto del direccionado. En primer lugar debemos ignorar el primer bit (bit Start) y también el último bit (bit Acknowledge), ya que son los bits de comunicación y no forman parte de la dirección que queremos estudiar. Veamos: 

| 0 | 1 | 1 | 1 |A2 |A1 |A0 | R/W |

Suponiendo que los pines A2, A1 y A0 están unidos a masa, habremos direccionado: 

| 0 | 1 | 1 | 1 | 0 | 0 | 0 | R/W |

Esta es la dirección 0x38 en hexadecimal, según el valor de R/W, esto se entiende como que es 0, se trata de escritura y cuando este bit es 1, la dirección es 0x39 ya sabemos que se trata de lectura. 

| 0 | 1 | 1 | 1 |A2 |A1 |A0 | R/W |

  | 0 | 1 | 1 | 1 | 0 | 0 | 0 |  0  | <= Escritura (38h)

  | 0 | 1 | 1 | 1 | 0 | 0 | 0 |  1  | <= Lectura   (39h)

según esto cabe destacar que disponemos 8 direcciones posibles para 8 dispositivos. 

A2 |A1 |A0 |R/W|

| 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | = 0x38

| 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | = 0x39

| 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | = 0x3A

| 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | = 0x3B

| 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | = 0x3C

| 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | = 0x3D

| 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | = 0x3E

| 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | = 0x3F

Como la biblioteca serie de Arduino empuja a la izquierda cuando realiza la comunicación I2C, debemos asegurarnos de que cuando se trata de la izquierda ponemos los valores correctos y a continuación, "empujamos" todo a derecha antes. Perdemos R/W (que básicamente no nos interesa porque el pin actúa de todos modos). 

Pero antes quiero presentar unos apuntes interesantes sobre el tema, que si lo desea puede saltarse.

Por cierto. En un foro, donde se discute las posibilidades de este dispositivo, he encontrado unas notas que vienen a corroborar las posibilidades del PCF8574, estas son de alguna manera parte de lo que se discute entre entendidos (lo aporto para un mayor y más rico contenido de este tema), dice así... 

... , si tiene alguna necesidad adicional de entradas y salidas digitales, este chip PCF8574, puede ser una respuesta a sus oraciones.

sólo requiere de dos conexiones de su microcontrolador (los cables de bus I2C) y le proporcionará un puerto de 8 pines que, pueden configurarse individualmente para ser Entrada o Salida.

Lo grandioso de este chip es que, si usted necesita incluso más entradas o salidas bastará con añadir otro de estos, sin necesidad de 

conexiones adicionales a su microcontrolador. La dirección hardware de esclavos I2C puede ser configurada para cualquiera de las 8

diferentes direcciones, lo que significa que, puede tener un total de 8 de estos chips en el mismo bus I2C.

Sólo tiene que conectar el bus I2C, pines (SDA y SCL) de su microcontrolador a cada una de los correspondientes pines SDA y SCL del dispositivo PFC8574 y además, usted necesitará un par de resistencias RPU en estos cables ([comenta uno], he usado resistencias de 82k para hacer compatible mi sensor LEGO).

Esto significa por ejemplo que usted puede, controlar ocho segmentos LED con sólo dos pines del microcontrolador (pero no todo el hardware I2C utiliza el mismo prefijo de dirección fija como el PCF8574). 

El PCF8574 necesita configurar una dirección, mediante la conexión a ALTO o a BAJO de los pines A2, A1 y A0, de acuerdo a lo que usted desee. El PCF8574A comienza en la dirección 0111xxx0 donde xxx depende de como usted conecte A2, A1, A0. (por su parte el PCF8574 empieza en la dirección 0100xxx0, como se muestra en la Figura 9). 

Page 3: PCF8574 EXPANSOR REMOTO - hmangas.com Expansor PCF8574... · Pero antes quiero presentar unos apuntes interesantes sobre el tema, que si lo desea puede saltarse. Por cierto. En un

Llegados a este punto, vamos a proceder con un ejemplo, creo que es un método adecuado, cuando la teoría llega a su parte más teórica o empírica. Así que, pondré un código que permita hacer algo con el PCF8574A que, como dije, es el que tengo a mano, pero antes quiero mostrar cuan fácil y cómo he realizado esta práctica. 

He buscado ayuda en el foro Arduino y hago constar la gran ayuda que me han prestado los componentes del foro. Sigamos. Conservo el teclado de un viejo telefonillo, creo recordar, venía con un radio-despertador con teléfono. Como se aprecia en la foto, lo he desguazado y lo aprovecharé para realizar esta práctica. El lector que emprenda esta práctica, debe utilizar el teclado que mejor se adapte a sus necesidades o posibilidades.

Teclado de 3x4 con 10 salidas.

Vista de las pistas de los contactos.

El Esquema.

Adaptado a mi teclado que se muestra en la imagen de arriba.

Circuito práctico 

PRACTICA

El código en cuestión es de Angel Sancho <[email protected]> y aparece en el Playground de Arduino.

/*

* i2ckeypad.pde - keypad/I2C expander interface example for Arduino

*

* Copyright (c) 2009 Angel Sancho <[email protected]>

* All rights reserved.

*

Page 4: PCF8574 EXPANSOR REMOTO - hmangas.com Expansor PCF8574... · Pero antes quiero presentar unos apuntes interesantes sobre el tema, que si lo desea puede saltarse. Por cierto. En un

*

* LICENSE

* -------

* This program is free software: you can redistribute it and/or modify

* it under the terms of the GNU General Public License as published by

* the Free Software Foundation, either version 3 of the License, or

* (at your option) any later version.

*

* This program is distributed in the hope that it will be useful,

* but WITHOUT ANY WARRANTY; without even the implied warranty of

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

* GNU General Public License for more details.

*

* You should have received a copy of the GNU General Public License

* along with this program. If not, see <http://www.gnu.org/licenses/>.

*

*

* EXPLICACION

* -----------

*

* Este ejemplo fue probado con PCF8574P y el teclado numerico SPARKFUN 4x3

* alambrado como se puede ver en la imagen i2ckeypad_example_schema.png y

* como trazar un mapa de pines por defecto de la libreria i2ckeypad.

*

* R1, R2 and R3 son 10K

*

* Los pines analgicos del Arduino, (SDA) pin1 analgico conectado al pin15

* del PCF8574 y (SCL) pin0 anal?ico conectado al pin14 del PCF8574.

*

* http://www.arduino.cc/playground/Main/I2CPortExpanderAndKeypads

*

*/

#include <Wire.h>

#include <i2ckeypad.h>

#define ROWS 4

#define COLS 3

// Con A0, A1 y A2 del PCF8574A a masa I2C se direcciona 0x38, el PCF8574 se direcciona 0x20.

#define PCF8574A_ADDR 0x38

i2ckeypad kpd = i2ckeypad(PCF8574A_ADDR, ROWS, COLS);

void setup()

{

Serial.begin(9600);

Wire.begin();

kpd.init();

Serial.print("Testear keypad/PCF8574A I2C port expansor lib Arduino\n\n");

}

void loop()

{

char key = kpd.get_key();

if(key != '\0')

{

Serial.print(key);

}

}

Poco más que la aplicación de las librerías <Wire.h> y <i2ckeypad.h>. Si queremos utilizar por ejemplo, un teclado de 4x4, se debe modificar la línea de definición:

 #define COLS 3

por esta otra: #define COLS 4

Page 5: PCF8574 EXPANSOR REMOTO - hmangas.com Expansor PCF8574... · Pero antes quiero presentar unos apuntes interesantes sobre el tema, que si lo desea puede saltarse. Por cierto. En un

En esta última fotografía, puede apreciarse que en la protoboard, aparece un pequeño circuito en la parte alta, pertenece al RTC 

basado en el DS1307 que, se encuentra conectado al bus I2C. Con cada tecla del teclado numérico, se produce un destello del LED de la placa Arduino, lo que puede tomarse como referencia de haber sido presionada una llave o tecla. A continuación, una aproximación de lo descrito.

Estaría bien, hacer una aplicación para ver cómo utilizar este magnifico dispositivo PCF8574A. Esto será motivo para un futuro documento con el que tratar este dispositivo, quizá el proyecto que se comenta al principio. 

  

Esto es todo, por este simple tutorial, los que quieren más información pueden leer la hoja de datos EEPROM y los detalles del código proporcionado. Si tiene interés en leer más sobre Arduino, revele esta sección. ( Mostrar/Ocultar)

Volver al índice de artículos Arduino. 

 

Creada el: 28-09-09  Actualizada el: 04-10-09      

©Copyright 2007, |Hispavila.com.| Reservados todos los derechos.| LSSI | Póngase en contacto con nosotros