LABORATORIO 3
DISPLAY LCD I2C
OBJETIVO. – Al termino de esta práctica el estudiante comprenderá:
• La incorporación del display LCD 16x2 comunicación I2C al circuito del µC.
• La programación en el compilador CCS para el manejo del LCD I2C con su directiva especifica.
• Programar aplicaciones de arranque de motores, visualizando la información del circuito en el
LCD I2C.
INTRODUCCIÓN. – El LCD(Liquid Crystal Display) o pantalla de cristal líquido es un dispositivo
empleado para la visualización de contenidos o información de una forma gráfica, mediante
caracteres, símbolos o pequeños dibujos dependiendo del modelo. Está gobernado por un
microcontrolador el cual dirige todo su funcionamiento.
En la siguiente imagen de Proteus se puede observar la estructura de sus pines.
Lo podemos dividir en los Pines de alimentación, pines de control y los pines del bus de datos
bidireccional. Por lo general podemos encontrar además en su estructura los pines de Ánodo de led
backlight y cátodo de led backlight.
Pines de alimentación:
Vss: Gnd
Vdd: +5 voltios
Vee: corresponde al pin de contraste, lo regularemos con un potenciómetro de 10K conectado a Vdd.
Pines de control:
RS: Corresponde al pin de selección de registro de control de datos (0) o registro de datos(1). Es
decir el pin RS funciona paralelamente a los pines del bus de datos. Cuando RS es 0 el dato presente
en el bus pertenece a un registro de control/instrucción. y cuando RS es 1 el dato presente en el bus
de datos pertenece a un registro de datos o un carácter.
RW: Corresponde al pin de Escritura(0) o de Lectura(1). Nos permite escribir un dato en la pantalla o
leer un dato desde la pantalla.
E: Corresponde al pin Enable o de habilitación. Si E(0) esto quiere decir que el LCD no esta activado
para recibir datos, pero si E(1) se encuentra activo y podemos escribir o leer desde el LCD.
Pines de Bus de datos:
El Bus de datos bidireccional comprende desde los pines D0 a D7. Para realizar la comunicación con
el LCD podemos hacerlo utilizando los 8 bits del bus de datos (D0 a D7) o empleando los 4 bits mas
significativos del bus de datos(D4 a D7). En este caso vamos a explicar la comunicación con el bus
de 4 bits.
I2C para LCD. - I²C (también lo verás escrito como I2C) es un bus de comunicaciones en serie que
utiliza dos líneas para transmitir la información: una para los datos (SDA) y por otra la señal de reloj
(SCL).
SCL (System Clock) es la línea de los pulsos de reloj que sincronizan el sistema. SDA (System Data)
es la línea por la que se mueven los datos entre los dispositivos. GND (Masa) común de la
interconexión entre todos los dispositivos «enganchados» al bus.
El Módulo adaptador LCD a I2C que usaremos está basado en el controlador I2C PCF8574, el cual es un
Expansor de Entradas y Salidas digitales controlado por I2C. Por el diseño del PCB este módulo se usa
especialmente para controlar un LCD Alfanumérico.
Este módulo permite la comunicación entre un microcontrolador y un LCD1602 por medio de I2C, lo
cual facilita las conexiones a la hora de llevar a cabo cualquier tipo de aplicación. Este adaptador
permite administrar de una manera mucho más óptima la distribución de puertos ya que se pueden
llevar a cabo la presentación de datos a través de solamente dos cables.
a) PROGRAMACION HOLA MUNDO CON LCD I2C.
#include <16F877A.h>
#fuses HS
#use delay(clock=20M)
//directivas
#define PCF_SDA PIN_C2
#define PCF_SCL PIN_C1
#use i2c(master, sda=PCF_SDA, scl=PCF_SCL)
#define PCF_ID 7
#define PCF 64 // Puede ser 112 ó 64 (PCF8574T=64, PCF8574A=112, PCF8574=64)
#define blacking P3
#define LCD_RS P0
#define LCD_RW P1
#define LCD_E P2
#define LCD_DB4 P4
#define LCD_DB5 P5
#define LCD_DB6 P6
#define LCD_DB7 P7
///////////////
#include <LCD_PCF.c>
void main(){
lcd_init();
while(TRUE){
lcd_gotoxy(1,1);
lcd_putc("Hola mundo EIS");
lcd_gotoxy(1,2);
lcd_putc("ELECTRICIDAD IND"); CIRCUITO DE CONTROL
delay_ms(200);
}
}
b) Autorretención.
CIRCUITO DE FUERZA
PROGRAMA EN PIC C
#include<16f877a.h>
#fuses XT void main(){
#fuses nowdt, noprotect bit_clear(OPTION_REG,7);
#use delay(clock=4000000) bit_set(TRISB,0);
#byte TRISB=0X86 bit_set(TRISB,1);
#byte PORTB=0X06 bit_clear(TRISB,2);
#byte OPTION_REG=0X81 rele=0;
#bit start = 0x06.0 lcd_init();
#bit stop = 0x06.1 lcd_gotoxy(1,1);
#bit rele = 0x06.2 lcd_putc("Circuito Autoret");
//directivas while(1){
#define PCF_SDA PIN_C2 if(start==0){
#define PCF_SCL PIN_C1 rele=1;
#use i2c(master, sda=PCF_SDA, scl=PCF_SCL) lcd_gotoxy(1,2);
#define PCF_ID 7 lcd_putc("Motor en marcha");
#define PCF 64 // Puede ser 112 ó 64 delay_ms(200);
#define blacking P3 }
#define LCD_RS P0 if(stop==0){
#define LCD_RW P1 rele=0;
#define LCD_E P2 lcd_gotoxy(1,2);
#define LCD_DB4 P4 lcd_putc("Motor parado ");
#define LCD_DB5 P5 delay_ms(200);
#define LCD_DB6 P6 }
#define LCD_DB7 P7 }
/////////////// }
#include <LCD_PCF.c>
c) ARRANQUE DIRECTO CON INVERSION DE GIRO:
CIRCUITO DE FUERZA CIRCUITO DE CONTROL PROGRAMA EN PIC C
EQUIPOS Y MATERIALES:
Multímetro.
Protoboard.
Jumpers.
Fuente DC estable 5V.
Microcontrolador PIC 16F877A.
Display LCD 16x2
Modulo I2C para LCD
Grabador PICKit 3.
Rele de 5Vcc.
Oscilador de cristal de 20Mhz.
Capacitor cerámico de 22pF.
Switch y pulsadores para protoboard.
Led´s (rojo, amarillo y verde).
Resistencias de ¼ w. (220R, 330R, 470R, 2k2, 10k).
Optoacoplador 4N25.
Transistor BC547.
PROCEDIMIENTO EXPERIMENTAL:
1. Arme el circuito y programe el microcontrolador del inciso (a) Hola mundo con LCD I2C.
2. Arme el circuito y programe el microcontrolador del inciso (b) autorretención.
3. Complemente los circuitos y la programación en PIC C del inciso (c).
4. Reemplace los leds por reles de 5Vcc según circuito para cargas alternas y conecte la carga de
220Vac (en este caso será un contactor), luego compruebe su funcionamiento.
5. Analice su funcionamiento y saque conclusiones.