Módulo I2C PCF8574T «expansor de pines», Pic C Compiler

En esta sección aprenderás a programar el modulo I2C PCf8574T  conectado con una pantalla LCD que mostrara el valor de una entrada analógica conectada con un potenciómetro. El objetivo es utilizar el módulo i2c expansor de pines para enviar datos a la pantalla LCD mediante comunicación I2C.

Módulo I2C PCF8574T

Este expansor de entrada / salida (E / S) de 8 bits para el bus bidireccional de dos líneas (I2C) está diseñado para una operación VCC de 2,5 V a 6 V.

El dispositivo PCF8574 proporciona expansión de Entradas y Salidas remotas de propósito general para la mayoría de las familias de microcontroladores mediante la interfaz I2C [reloj (SCL), datos (SDA)].

Circuito de conexión

Procedimiento

En el archivo .h de la carpeta de nuestro proyecto se debe asignar un ADC de 8bits para poder transmitir el valor correctamente por la comunicación I2C.

#device ADC=8

El primer paso es asignar los parámetros para establecer la comunicación I2C.

#use i2c(Master,Fast, sda=PIN_B0, scl=PIN_B1,force_sw)//Parametros I2C

Lo siguiente es incluir la librería  del módulo I2C. 

#include "i2c_Flex_LCD.c" //libreria Modulo I2C

Se colocan las instrucciones que permiten la conversión analógica digital para la entrada analógica en el pin AN0 conectado con un potenciómetro.

setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);//lectura Vout del potenciometro en pin AN0

Lo siguiente es asignar la dirección del modulo i2c y el tamaño de la pantalla LCD.

lcd_init(0x4E,16,2); //direccion del modulo y tamaño del display lcd
lcd_backlight_led(ON);//LED del display lcd

Dado que la comunicación I2C utiliza 8 bits de transmisión se utiliza una variable de 8 bits para guardar el dato de la lectura en la entrada analógica.

int8 dato;

La instrucción para hacer la lectura de la entrada analógica.

dato=read_adc();//lectura del potenciometro

Finalmente se muestra el valor del potenciómetro en la pantalla LCD colocando %u para mostrar un numero real sin signo.

lcd_gotoxy(1,1); printf(LCD_PUTC,"\fINPUT PIN_AN0");
lcd_gotoxy(1,2); printf(LCD_PUTC,"VALOR=%u",dato);

Código completo


#FUSES NOMCLR

#use i2c(Master,Fast, sda=PIN_B0, scl=PIN_B1,force_sw)//Parametros I2C

#include "i2c_Flex_LCD.c" //libreria Modulo I2C

void main()
{
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);//lectura Vout del potenciometro en pin AN0
    
   lcd_init(0x4E,16,2); //direccion del modulo y tamaño del display lcd
   lcd_backlight_led(ON);//LED del display lcd
    
   int8 dato;
   while(TRUE)
   {    
      dato=read_adc();//lectura del potenciometro
      lcd_gotoxy(1,1); printf(LCD_PUTC,"\fINPUT PIN_AN0");
      lcd_gotoxy(1,2); printf(LCD_PUTC,"VALOR=%u",dato);
      delay_ms(100);
   }

}
Scroll al inicio