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.

 

leer_expansor_sensor.c

 

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' .

leer_expansor.vi