Está en la página 1de 33

Implementación de

sistemas mecatrónicos:
Microcontroladores
Profesor: Dr. René J. Díaz Martínez
E-mail: renejdm@tec.mx
Conferencia 5: Display de cristal líquido (LCD).
Sumario:
- Visualizadores.
- Display de cristal líquido. Características de un LCD estándar.
- Organización de su memoria interna.
- Funcionamiento del LCD.
- Interfaz de atención a un LCD empleando un PIC.

Bibliografía:
- García Breijo, E. Compilador C CCS y simulador Proteus para microcontroladores
PIC. 1ª edición, Alfaomega. Material fotorreproducido.
- Brizzio, Ezequiel. Lenguaje C para Microcontroladores.
- Programando PICs en C.
- Manual del PIC 16F887.
- Manual del LCD JHD 162-A.
- Visualizadores.
Los visualizadores son los dispositivos periféricos de salida más
utilizados en cualquier sistema electrónico que emplee
microprocesadores o microcontroladores, desde un sistema de
adquisición de datos y control hasta una potente
microcomputadora, pasando por equipos de medición inteligentes
usados en la medicina, las comunicaciones o aparatos
electrodomésticos. Sus formas son variadas pudiendo mencionarse:
1. LEDs y arreglos de LEDs.
2. Lámparas de segmentos
3. Pantallas o displays de cristal líquido (Liquid Cristal Display o LCD).
4. Paneles de plasma.
5. Tubos de rayos catódicos (TRC).
Con cualquiera de ellos se pueden visualizar resultados de
operaciones o tener la opción de intercambiar mensajes con
los sistemas electrónicos.
TFT-LCD de 320x240 pixeles
LCD estándar de 16x2 caracteres
- Display de cristal líquido.
Características de un LCD estándar.

Los LCD se han destacado, por una serie de


ventajas que presentan, entre ellas:
- Bajo costo.
- Muy poco consumo (< 5mA).
- Fácil conexión.
- Pueden visualizar una amplia gama de
caracteres alfanuméricos y gráficos.
- Posibilidad de crear nuevos caracteres.
- Agradables y distintas presentaciones.
- Variedad de colores y tamaños.
Un ejemplo de LCD es el JHD 162-A cuyas características son:
1. Contiene un microprocesador 44780, que se encarga de la atención al
display y sirve como interfaz entre éste y el microprocesador o
microcontrolador al cual está conectado.
2. Puede representar hasta dos renglones de 16 caracteres cada uno.
3. La matriz de un carácter puede ser de 10x5 (10 filas x 5 columnas) o de
7x5 pixeles.
4. Dispone de dos tipos de memorias: DD RAM (RAM de video) y CG ROM
(generador de caracteres en ROM).
5. La conexión con un microcontrolador/microprocesador puede hacerse
mediante 4 (DB4-7) u 8 bits (DB0-7).
6. Presenta luz de fondo o “backlight”, lo cual mejora su visualización.
7. Tiene tres modos de operación.
8. Dispone de 16 terminales cuya función se muestra en la tabla siguiente:
Pin Símbolo Función
1 Vss Tierra (0V)
2 Vdd Alimentación (5V)
3 Vo Voltaje de ajuste del contraste
4 RS Señal para seleccionar un comando o un dato
5 R/W* Lectura o escritura en el LCD
6 E Habilitación de la operación. Funciona como un pulso de reloj al LCD.
7 D0 Bit 0 del bus de datos (LSB).
8 D1 Bit 1 del bus de datos.
9 D2 Bit 2 del bus de datos.
10 D3 Bit 3 del bus de datos.
11 D4 Bit 4 del bus de datos.
12 D5 Bit 5 del bus de datos.
13 D6 Bit 6 del bus de datos.
14 D7 Bit 7 del bus de datos (MSB)
- Organización de la memoria interna
del LCD.

El LCD dispone de dos bloques de


memoria que se encargan del visualizado
de la información que él recibe. Estas dos
memorias son la DD RAM y la CG ROM
DD RAM (Display Data RAM o RAM de video).

Es la memoria encargada de almacenar el código ASCII


de los caracteres visualizados en la pantalla del LCD, y
los que están en una posición no visible.

El LCD tiene una capacidad de 2 renglones (o líneas)


horizontales por 40 caracteres c/u, de los cuales solo
serán visibles 16 caracteres cada renglón. Su tamaño
por lo tanto es de 2x40= 80 bytes.
Una vez conocida la disposición de almacenamiento del
display, es fácil pensar en un display de 2 renglones con 40
caracteres, sobre el que se desplaza una ventana de 2
renglones de 16 caracteres como muestra la siguiente figura.
El mapa de memoria de la DD RAM está constituido por dos bloques de 40 bytes c/u.
El primer bloque corresponde con los 40 caracteres del renglón 1, y el segundo
bloque con los del renglón 2. Las localizaciones con direcciones 00-27 (h) están
asociadas con las posiciones de visualizado (1,1) a (40,1) del display (1,1), y las
localizaciones de la 40-67 (h) con las posiciones (1,2) a (40,2), lo cual se puede
apreciar en la siguiente figura.
CG ROM (Character Generator ROM o
generador de caracteres).

Es la memoria encargada de guardar la


matriz de puntos (8 filas x 5 columnas)
correspondiente a cada uno de los
posibles caracteres que se pueden
representar en el LCD, y que están
asociados con el código ASCII, lo cual
quiere decir que para representar una
letra “A”, el LCD debe recibir el código
41h, que se guarda en la posición
correspondiente de la DD RAM, y que
permite la ubicación de la matriz de
unos y ceros en la CG ROM, para
representar la letra “A”. Los contenidos
de esta memoria se recogen en la figura.
El generador de caracteres se completa con una zona de memoria RAM (CG RAM),
en la cual el usuario puede definir sus propios caracteres. Este espacio de
memoria consta de 64 localizaciones, ubicadas en las direcciones de 00-3Fh, y se
agrupan de 8 en 8 localizaciones para cada carácter que se quiera incluir. Un
ejemplo de esto se muestra en la figura:
- Funcionamiento del LCD.
Tiene tres modos de operación fundamentales:
a) Modo comando: ocurre cuando el LCD recibe instrucciones por el bus de
datos, tales como: “Limpia pantalla”, “Retorna el cursor”, “Selecciona
modo”, etc. Para trabajar en este modo RS=0, R/W*= 0 (operación de
escritura) y E= 1.
b) Modo dato: sucede cuando el LCD recibe el código ASCII de un carácter a
escribir en la DD RAM. Para trabajar en este modo RS=1, R/W*= 0
(operación de escritura) y E= 1.
c) Modo lectura de LCD ocupado: mediante la bandera BF (bit 7 del bus de
datos) el LCD indica al microcontrolador que está ocupado. Para esto RS= 0,
R/W*= 1 (operación de lectura) y E= 1. Si BF=1, esto indica que el LCD está
ocupado realizando operaciones internas, y no puede aceptar nuevas
instrucciones ni datos, teniendo que esperar a que BF= 0 para enviárselas.
Comando Señales de Código del comando/Dirección/Dato Descripción del comando E-Cycle
control fosc=
RS R/W* DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 250KHz

Limpia pantalla 0 0 0 0 0 0 0 0 0 1 Limpia la pantalla y retorna el cursor a la posición 1.64ms


de inicio (dirección 0).
Retorna cursor 0 0 0 0 0 0 0 0 1 * Retorna el cursor y la pantalla a la posición de 1.64ms
inicio, dejando sin cambios los contenidos de la
DD RAM.
Selecciona modo 0 0 0 0 0 0 0 1 I/D S Configura la dirección de movimiento del cursor, y 40μs
si se desplaza o no el display. Esto se realizado
durante operaciones de lectura y escritura.
Encender/apagar pantalla 0 0 0 0 0 0 1 D C B Configura el estado ON/OFF de todo el display y 40μs
del cursor, y el parpadeo del carácter en la
posición del cursor.
Desplazar cursor/pantalla 0 0 0 0 0 1 S/C R/L * * Mueve el cursor y desplaza el display sin cambiar 40μs
los contenidos de la DD RAM.

Activar función 0 0 0 0 1 DL N F * * Configura el número de bits enviados al LCD, la 40μs


cantidad de renglones y la matriz del carácter.

Ajusta dirección de CG 0 0 0 1 Dirección generador de caracteres en Ajusta la dirección del generador de caracteres. El 40μs
ROM ROM dato CG ROM es enviado y recibido después de
este ajuste.
Ajusta dirección de DD 0 0 1 Dirección de datos RAM Ajusta la dirección de la DD RAM. La dirección es 40μs
RAM enviada y recibida después de este ajuste.

Lee bandera de ocupado 0 1 BF AC Lectura de la bandera de ocupado (BF) del LCD, 40μs
y contenido del contador indicando su estado, y del contenido del contador
de direcciones de direcciones.
Escribe en CG ROM/DD 1 0 Escritura de dato Escribe datos en la CG ROM o en la DD RAM. 40μs
RAM
Lectura de CG ROM/DD 1 1 Lectura de dato Lectura de datos de la CG ROM o de la DD RAM. 40μs
RAM
Significado de las abreviaturas:
I/D= 1 incrementa R/L= 1 desplazamiento a la der.
I/D= 0 decrementa R/L= 0 desplazamiento a la izq.
S= 1 desplaza mensaje en la pantalla DL= 1 datos de 8 bits
S= 0 mensaje fijo en la pantalla DL= 0 datos de 4 bits
D= 1 enciende (activa) la pantalla N= 1 dos renglones
D= 0 apaga (desactiva) la pantalla N= 0 un renglón
C= 1 activa el cursor F= 1 matriz del carácter de 10x5
C= 0 desactiva el cursor F= 0 matriz del carácter de 7x5
B=1 activa parpadeo del carácter BF: bandera de ocupado del LCD
indicado por el cursor AC: contador de direcciones
B= 0 inactiva parpadeo del carácter DD RAM: RAM de video del LCD
SC= 1 desplaza pantalla CG ROM: generador de caracteres
SC= 0 desplaza cursor en ROM del LCD
Para que el LCD funcione es necesario darle la secuencia de
inicialización; esta consiste en una serie de instrucciones
enviadas al display que permitirán su normal operación.
Dichas instrucciones solo se ejecutan luego del encendido
del LCD, y no podrán cambiarse posteriormente. Entre ellas
están:
1.Activar función del LCD que comprende:
a) Seleccionar la longitud del bus de datos (4 u 8 bits).
b) Escoger el número de renglones a visualizar en el LCD,
así como la matriz del carácter.
2. Encender el LCD.
Las siguientes instrucciones también podrán ser
colocadas en la inicialización, con la diferencia
que se pueden cambiar en cualquier parte del
programa:

1.Mantener el mensaje fijo y desplazar el cursor.


2.Desplazar el mensaje y mantener el cursor fijo.
3.Hacer que el carácter señalado parpadee o no.
- Interfaz de atención a un LCD empleando el PIC 16FXXX.

RA2

RA1
- Interfaz de atención a un LCD empleando el PIC 16F887.
;Declaración de constantes
PORTB EQU 0X06 ;dirección del puerto B
TRISB EQU 0X06 ;registro de configuración del puerto B
PORTA EQU 0X05 ;dirección del puerto A
TRISA EQU 0X05 ;registro de configuración del puerto A
STATUS EQU 0X03 ;dirección del registro STATUS.
SCTRL_E EQU 2 ;bit 2 del puerto A para control de E
SCTRL_RW EQU 1 ;bit1 del puerto A para control de R/W*
SCTRL_RS EQU 0 ;bit 0 del puerto A para control de RS.
RETARDO1 EQU 0X0D ;constante del temporizador 1
RETARDO2 EQU 0X00 ;constante del temporizador 2

;Declaración de variables
ORG 0X0C ;inicio del espacio de memoria para la declaración de variables
CONT1 RES 1 ;reserva un byte para la variable CONT1
CONT2 RES 1 ;reserva un byte para la variable CONT2
ORG 0X00
;Programa principal BANKSEL TRISB
BSF STATUS,5 ;cambio al banco 1 BCF STATUS,6
MOVLW b’00000000’
MOVWF TRISA ;configuración del puerto A en salida
MOVLW b’00000000’
MOVWF TRISB ;configuración del puerto B en salida
BCF STATUS,5 ;cambio al banco 0

;Inicialización del LCD


CALL TEMPO2 ;llamada a subrutina de 15ms para que el LCD estabilice sus voltajes una vez energizado
MOVLW b’00110000’ ;valor cargado en w que representa el comando de LCD para que trabaje con bus de
;datos de 8 bits
CALL LCDI ;llamada a la subrutina LCDI encargada de almacenar un comando en el LCD
MOVLW b’00111000’ ;valor cargado en w que representa el comando de LCD para que trabaje con 2 renglones

CALL LCDI
MOVLW b’00001110’ ;valor cargado en w que representa el comando de LCD para encender la pantalla y el
;cursor del LCD
CALL LCDI
MOVLW b’00000110’ ;valor cargado en w que representa el comando de LCD para que el cursor se desplace a
;la derecha
CALL LCDI
;Escritura de un mensaje en el LCD
MOVLW "H" ;coloca el carácter ASCII de la H en W
CALL LCDC
MOVLW "O" ;coloca el carácter ASCII de la O en W
CALL LCDC
MOVLW "L" ;coloca el carácter ASCII de la L en W
CALL LCDC
MOVLW "A" ;coloca el carácter ASCII de la A en W
CALL LCDC
CICLO GOTO CICLO
;Subrutina LCDI, escribe comando guardado en w en el LCD
LCDI BCF PORTA,SCTRL_RW ;coloca "0" en el pin R/W*
BCF PORTA,SCTRL_RS ;coloca "0" en el pin RS
BSF PORTA,SCTRL_E ;coloca "1" en el pin E
MOVWF PORTB ;coloca el contenido de "W" en el bus de datos del LCD
BCF PORTA,SCTRL_E ;coloca "0" en el pin E
CALL TEMPO1 ;llamada de una subrutina de tiempo de 40 μs
RETURN

;Subrutina LCDC, escribe dato guardado en w en el LCD


LCDC BCF PORTA,SCTRL_RW ;coloca "0" en el pin R/W*.
BSF PORTA,SCTRL_RS ;coloca “1" en el pin RS.
BSF PORTA,SCTRL_E ;coloca "1" en el pin E
MOVWF PORTB ;coloca el contenido de "W" en el bus de datos del LCD
BCF PORTA,SCTRL_E ;coloca "0" en el pin E
CALL TEMPO1 ;llamada de una subrutina de tiempo de 40 μs
RETURN
;Subrutina de demora de 58μs ;Subrutina de demora de 15.37ms
TEMPO1 MOVLW RETARDO1 TEMPO2 MOVLW RETARDO2
MOVWF CONT1 MOVWF CONT2
CICLOT1 NOP CICLOT2 CALL TEMPO1
DECFSZ CONT1,1 DECFSZ CONT2,1
GOTO CICLOT1 GOTO CICLOT2
RETURN RETURN
Programa para atender un LCD con lenguaje C

char *text = “Bienvenidos a Mecatrónica";


void main()
{
ANSEL = 0; //SOLO PUERTOS DIGITALES
ANSELH = 0;
osccon = 0x77; //OSCILADOR INTERNO
TRISB = 0; // PUERTO B SALIDAS
Lcd_Init(&PORTB); // Lcd_Config(&PORTB, 2, 3, 0, 7, 6, 5, 4); ES LO MISMO
Lcd_Cmd(Lcd_CLEAR);
Lcd_Cmd(Lcd_CURSOR_OFF);
Lcd_Out(1, 1, text);
}
Problema Propuesto:
Se quiere diseñar un sistema con PIC 16F72 que permita
adquirir 25 muestras de 8 variables digitales de entrada las
cuales cambian constantemente. Las muestras serán tomadas
cada 200 ms. Si la muestra tiene valor par se guarda a partir de
la dirección 30h del banco 0 de SRAM; si es impar no se guarda
pero sí se cuenta como muestra adquirida. El proceso termina
encendiendo un LED de color verde, además, si hubo muestras
impares se encenderá un led rojo.
Datos del PIC: VOH= 4.5 V, VOL=0.2 V, IOH= IOL= 25 mA y VDD= 5 V.
Datos de los LEDs: 2 V/10 mA
LIST P=16F72
INCLUDE P16F72.INC

__CONFIG _CONFIG1, _CP_OFF & _CCP1_RB0 & _DEBUG_OFF &


_WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON &
_MCLR_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_IO__CONFIG
_CONFIG2, _IESO_OFF & _FCMEN_OFF
;Programa de atención a 8 VDE
;Definición de registros
loops equ 20h
loops2 equ 21h
cont equ 22h ;contador de muestras
VLEDR equ 23h ;var. Para indicar valores impares
org 0 ;vector de RESET en la dirección 00h
goto Inicio ;salta al inicio del programa
org 5 ;el programa comienza en la dirección de memoria 5

Retardo ;subrutina de retardo de 200 ms


movlw D´200´ ;valor decimal a cargar en el registro loops
movwf loops ;loops contiene el número de ms del retardo
top2: movlw D’110’ ;valor decimal para completar los ms
movwf loops2
top: nop
nop
nop
nop
nop
nop
decfsz loops2 ;pregunta si terminó 1 ms
goto top ;repite desde ciclo
decfsz loops ;pregunta si terminó el retardo
goto top2
return ;también puede ser retlw 0
Inicio BANKSEL TRISB
movlw 0x06h
movwf ADCON1 ;regs. para bits de PORTA digit. E3: movf PORTB, W
movlw 00h ;carga w con 00h btfsc W,0
movwf TRISA ;programa los pines de ptoA como goto E1
movwf INDF ;escribe dato en buffer
;salida incf FSR ;increm. Apuntador de buffer
movlw 0FFh ;carga w con FFh goto E2
movwf TRISB ;programa los pines de ptoB como E1: bsf VLEDR,0
;entrada movwf VLEDR ;limpiar variable SOBRA
BANKSEL PORTB E2: call Retardo ;retardo de 200ms
movlw D´25´ ;contador de muestras decfsz CONT ;dec. Cont. De muestras
movwf CONT ;declarar contador en 50 goto E3 ; si CONT dist. 0 va a E3
movlw 00h btfsc VLEDR,0 ; si var. Dist. Cero prende LEDR
movwf VLEDR ;limpiar variable bcf PORTA,1 ;prende LEDR
movlw 0FFh bcf PORTA,0 ;prende LEDV
movwf PORTA end
bcf STATUS,IRP ;para el direcc. indirecto
movlw 30h ;apuntar a la primera localización
movwf FSR ;donde se guardarán los datos
Práctica de laboratorio 2
1. Monte el problema diseñado en clases, pero en lugar de
LEDs añada una bocina que se active al terminar el proceso
y se apague con un interruptor atendido por un bit de
puerto.
2. Diseñe el sistema visto en clases pero en lenguaje C.
Añadale un display LCD donde indique la cantidad de
muestras pares que se leyeron.
Datos del PIC: VOH= 4.5 V, VOL=0.2 V, IOH= IOL= 25 mA y VDD= 5 V.
Datos del LED: 2 V/10 mA

También podría gustarte