UNIDAD 9: I2C EXPANSOR LEER DATOS
OBJETIVO
El objetivo de esta unidad es el de manejar un periférico i2c para ampliar el número de pines de un puerto.El
microcontrolador con 2 pines(bus I2C) es capaz de disponer de una ampliación
8 pines.
Además se hace uso de el sistema de interrupciones externas del microcontrolador
para adquirir el dato
cuando haya cambiado la entrada del expansor PCF8574; el cual dispone también de una señal que indica el
cambio producido en sus pines configurados como entradas.
FUNDAMENTO TEÓRICO
Las características del PCF8574 son :
-Tensión de alimentación 2.5-6 voltios
-Expansor bidireccional
-Puerto remoto de 8 bits de E/S para el bus I2C
-Salidas con latches con capacidad de conducción de alta corriente
-Posibilidad de conexión de hasta 8 dispositivos gracias a sus tres hilos de direccionamiento hardware.
Cabe resaltar el pin de interrupción que dispone el PCF8574 que incorpora una salida a adrenador abierto (/INT)
que puede conectarse al sistema de interrupciones del microcontrolador.Cuando detecta un cambio en las lineas de
Entrada/Salida, activa la línea (/INT) para informar que se puede realizar la lectura de un nuevo dato a través del
bus I2C.
El PCF8574 se maneja como el resto de dispositivos I2C , tiene un byte de dirección
En nuestro caso la dirección hardware (A2,A1,A0) va a ser 0, y los pines correspondientes, puestos a masa (0voltios).
Los 4 primeros pines (MSB) son fijos (0100 en binario, 4 en hexadecimal) del dispositivo PCF8574.
C
El programa en C, diseñado para el microcontrolador , es el que a continuación se muestra .
#include <i2c.h>
#include <i2c.c>
#include<stdlib.h>
unsigned char valor;
interrupcion()interrupt 0{
int i;
EX0=0;
EA=0;
GetcharIIC(0x41,&valor);
printf("a%cz",valor);
for(i=0;i<9900;i++){}
EX0=1;
EA=1;}
void main(void){
int i;
IICInit();
serie();
IT0=1;/*flanco de bajada interrupcion 0*/
EX0=1;
EA=1;
PutcharIIC(0x40,0);
do{
//printf("a%ca",valor);
for(i=0;i<9900;i++){}
for(i=0;i<9900;i++){}
}while(1);
}
Se envía vía serie el dato recibido por el bus I2C a través
de la interrupción externa del microcontrolador.
La patilla 13 del PCF8574 se activa a nivel bajo cuando recibe una variación en los pines de entrada. Esta patilla 13 se une
a la patilla del microcontrolador de interrupción externa P3.2. Cuando el microcontrolador recibe la señal del expansor
activa la rutina de respuesta a la interrupción y captura el dato enviándolo
via serie a la aplicación en LabVIEW.
LabVIEW
Primero se configura la comunicación serie .
Se reciben los tres bytes (a, %c ,z)del microcontrolador a través del puerto serie.
{printf("a%cz",valor);}
El string se pasa a array; el array a cluster y con unbundle obtenemos los datos por separado.
Por último se cierra el puerto.
En el panel frontal podemos ver , a través del array de leds las entradas que se activan.
En el display digital cerca de los leds aparece el valor numérico (15 o 12 en el segundo ejemplo) .
Los otros dos dígitos corresponden a ; 97 'a' , y 122 'z' .