Sei sulla pagina 1di 16

Instituto Tecnológico de Aguascalientes

DEPARTAMENTO INGENIERÍA ELÉCTRICA ELECTRÓNICA


ING. ELECTRÓNICA
MICROCONTROLADORES

“Práctica 4: Pantalla LCD (Liquid Crystal DIsplay) 2x16”

Docente: Gustavo Adolfo Sosa Serna


Alumno: Alan David Regalado Zuñiga
Número de Control: 16150623

Aguascalientes, Ags. 7 de Marzo del 2019


4/1
INTRODUCCIÓN
A continuación se desarrollara una práctica haciendo uso de pantalla LCD 2x16 usando las primeras
funciones de esta misma denotando lo más importante, a continuación se hablara más de lo desarrollado en a la
práctica.
Objetivo:
Conocer el funcionamiento de una LCD y desarrollar una práctica sencilla para el mejor entendimiento de este
componente.

Marco Teórico:
LCD(Liquid Crystal Display): Pantalla de cristal líquido, es una de las herramientas mayormente utilizadas para
desplegar algún tipo de información.
LCD 16x2: Este tipo de LCD, permite visualizar datos de hasta 16 caracteres por dos líneas, cada carácter está
compuesto por una matriz de leds 8*5 permitiendo formar cualquier letra que se le asigne desde el
microcontrolador.
El backlight es el color de fondo que tendrá el LCD, entre ellos están los de color azul, amarillo, blanco, naranja,
verde y rojo. Y de acuerdo al color varia su precio en el mercado. No es indispensable que un LCD que tenga luz
de fondo o blacklight, ya que si el usuario no lo conecta y ahorra energía.
El LCD cuenta con un circuito integrado según el modelo de LCD. Un controlador especializado muy común es el
HD44780 (Renesas, Antes Hitachi). El microcontrolador HD44780 puede manejar directamente una pantalla LCD
de 1 o 2 líneas de 8 caracteres cada una. Si la pantalla es mayor hacen falta circuitos auxiliares, como el driver
HD44100 que permite manejar otros 8 caracteres por línea. Por ejemplo la figura a muestra en bloques de un
módulo LCD LM016L que utiliza un controlador HD44780 y un driver HD44100 para manejar una LCD de 2
líneas con 16 caracteres cada una.

Figura a) Componentes del módulo de cristal líquido ML016L para una interfaz de 8 bits.
El microcontrolador HD44780 tiene una memoria RAM interna para datos (DDRAM), en la que se pueden
almacenar los códigos ASCII de hasta 80 caracteres alfanuméricos. Esta memoria se puede organizar en 1 o 2
líneas. Cada línea opera como una memoria circular. En una memoria (o buffer) circular, una vez se alcanzando la
posición final, la escritura o lectura de un nuevo dato se realiza en la posición inicial de la memoria.

4/2
Si la DDRAM se organiza en una sola línea, entonces funciona como una memoria circular de 80 bytes, con las
direcciones consecutivas de 00h hasta 4Fh.
Si la DDRAM se organiza en dos líneas, se tienen dos memorias circulares de 40 caracteres cada una y las
direcciones no son consecutivas, la primera línea ocupas las direcciones 00h a 27h, mientras que la segunda ocupa
de 40h a 67h de la DDRAM, que se muestra en la figura b.

Figura b) organización en dos líneas, cada línea funciona con una memoria circular de 40 bytes, con las
direcciones indicas. La línea discontinua indica la parte visible de una LCD 2x16.
El HD44780 también tiene un generador de caracteres en ROM (Memoria ROM donde están alamcenada la matriz
de puntos de cada carácter) y otro en RAM (CGRAM). El generador de caracteres RAM defina caracteres no
estándar, que no están diseñados en el generador de caracteres ROM.

Características del HD44780:

 Posibilidad de conectarse en puertos paralelos de 4 o 8 bits.

 Almacenamiento de hasta 80 caracteres en una memoria RAM interna (DDRAM) de 80 bytes.

 Generador de caracteres de ROM interna con:

160 caracteres de tipo 5*8


32 caracteres del tipo 5*10

 Muy bajo consumo (usan tecnología CMOS), por lo que pueden alimentarse con baterías.

 Circuito de RESET interno automático en el encendido.

 Amplio repertorio de órdenes.

4/3
El controlador HD44780 dispone de un registro interno denominado contador de direcciones (AC: Adress
Counter), donde está la dirección de la DDRAM o CGRAM donde se escribirá o leerá un dato.

Busy Flag (BF):


Cuando se encuentra a “1” indica que el LCD está ocupado realizando operaciones internas y no puede aceptar
nuevas instrucciones. Hay que esperar que el Busy Flag valga “0” para enviar la siguiente instrucción.

Contador de Dirección (AC):


Indica la dirección donde serán leídos o escritos los datos sobre DD RAM o CG RAM. Este registro puede
modificarse realizando una escritura en el IR.

Además, cuando se escriben o se leen datos en el DD RAM o CG RAM, el AC se incrementa o decrementa de


manera automática de acuerdo con el Modo de Entrada (Entry Mode Set).

Ram de Datos del Display (DD RAM):


Tiene una capacidad de 80 bytes, 40 por cada línea; lógicamente dependiendo del modelo sólo 16,32,40 ó 80
caracteres podrán ser visualizados a la vez, aunque desplazando (shift) el display podrán irse visualizando todos los
caracteres escritos.

Generador de caracteres en ROM (CG ROM):


Tiene definido 160 caracteres, en matrices de 5x8 puntos.

Generador de caracteres en RAM (CG RAM):


Permite definir ocho caracteres, cuyos códigos van desde el 00 al 08.

4/4
La tabla 1.1 muestra el repertorio de ordenes aceptadas por los módulos LCD que utiliza el controlador
HD44780.
Tabla 1.1 Ordenes a implementar a LCD.

4/5
Escritura en IR cuando RS=0 y R/W=0.
Limpiar Display:
Borra display, manda cursor al inicio, y pone el Modo de Entrada en Incrementar.

Cursor a posición inicial

MODO DE ENTRADA (ENTRY MODE SET)

Establece las características de escritura de los datos.


S=1. El display se desplaza al escribir un nuevo carácter.
S=0. El disp. no se desplaza al escribir un nuevo carácter.
I/D=1. Incremento automático del registro AC al escribir.
I/D=1. Decremento automático del registro AC al escribir.
CONTROL DEL DISPLAY

B=0. Blink OFF, no hay efecto de parpadeo del cursor.


B=1. Blink ON, efecto de parpadeo del cursor rectangular.
C=0. Cursor OFF, el cursor no se visualiza.
C=1. Cursor ON, el cursor es visualizado.
D=0. Display OFF, el display se apaga.
D=1. Display ON, el display se enciende.
Deslizamiento (Shift) del Cursor/Display

R/L=0. A la izquierda.
R/L=1. A la derecha.
S/C=0. El deslizamiento se aplica sobre el cursor.
S/C=1. El deslizamiento se aplica sobre todo el display.

Control para 4 o 8 bits.

Cuando el LCD no se conecta al bus de datos de un microcontrolador o microprocesador de 8 bits, sino que lo hace
a un micro de 4 bits, es posible indicarle al LCD que solamente vamos a utilizar los bits DB7, DB6, DB5 y DB4,
para enviarle los datos, y que lo haremos enviando primero el nible alto, y a continuación el nible bajo del dato.
DL=0. Control con 4 bits. N=0. Una línea. F=0. 5x8 dots.
DL=1. Control con 8 bits. N=1. Dos líneas. F=1. 5x10 dots.

4/6
Poner Dirección CG RAM

El registro AC queda apuntando a la dirección indicada sobre la CG RAM.

Poner Dirección DD RAM

El registro AC queda apuntando a la dirección indicada sobre la DD RAM la cual corresponde a la dirección del
cursor.
Lectura del IR RS = 0 y R/W = 1.

Lectura de BF y AC.

El dato recibido indica el contenido del registro AC, es decir, la dirección a donde está apuntando, bien CG RAM o
DD RAM, según lo que hayamos seleccionado con anterioridad. Además, en el bit de mayor peso se recibe el
estado del Busy Flag, indicando si está ocupado o puede recibir un nuevo dato.
ESCRITURA SOBRE DR => RS = 1 Y R/W = 0.

Escritura sobre CG RAM o DD RAM:

Lectura del DR => RS = 1 y R/W = 1.

Lectura desde CG RAM o DD RAM:

A continuación en la tabla 1.2 presentamos una tabla correspondiente a las funciones que realizan cada uno de los
pines del LCD.
Tabla 1.2 Descripción de cada pin del LCD.

4/7
COMANDOS DE CONTROL
En la siguiente tabla 1.3 se muestran los comandos que contiene el LM016L.

Tabla 1.3 Comandos del LM016L.

4/8
Material y Equipo Necesario.

Programador
Fuente de Voltaje de 5v.
1 microcontrolador PIC18F4550
Cable para protoboard
1 Resistencia de 470Ω
1 LCD de 2x16
1 Potenciómetro de 10kΩ
1 protoboard

4/9
Datasheet de Componentes a utilizar.

PIC18F4550

Potenciómetro

LCD 2X16

4/10
Metodología.
1. Usar la hoja de datos del controlador que contiene la LCD el HD44780 de Hitachi para el desarrollo del
programa.
2. Desarrolle el programa por medio de software poniendo sus iniciales y mostrándolas en la LCD.
3. Mediante el siguiente circuito que aparece en la figura 1.1, arme en el protoboard para comprender el
funcionamiento de una LCD.
LCD1
LM016L

VDD
VSS

VEE

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7
E
1
2
3

4
5
6

7
8
9
10
11
12
13
14
RV1

R1 U1
2 15
8%

RA0/AN0 RC0/T1OSO/T1CKI RS
3 16

D0
D1
D2
D3
D4
D5
D6
D7
RS

E
RW
1K RA1/AN1 RC1/T1OSI/CCP2/UOE RW
4 17
RA2/AN2/VREF-/CVREF RC2/CCP1/P1A E
5 23
RA3/AN3/VREF+ RC4/D-/VM
10K 6 24
RA4/T0CKI/C1OUT/RCV RC5/D+/VP
7 25
RA5/AN4/SS/LVDIN/C2OUT RC6/TX/CK
14 26
RA6/OSC2/CLKO RC7/RX/DT/SDO
13
OSC1/CLKI
33 19
RB0/AN12/INT0/FLT0/SDI/SDA RD0/SPP0 DO
34 20
RB1/AN10/INT1/SCK/SCL RD1/SPP1 D1
35 21
RB2/AN8/INT2/VMO RD2/SPP2 D2
36 22
RB3/AN9/CCP2/VPO RD3/SPP3 D3
37 27
RB4/AN11/KBI0/CSSPP RD4/SPP4 D4
38 28
RB5/KBI1/PGM RD5/SPP5/P1B D5
39 29
RB6/KBI2/PGC RD6/SPP6/P1C D6
40 30
RB7/KBI3/PGD RD7/SPP7/P1D D7
8
RE0/AN5/CK1SPP
9
RE1/AN6/CK2SPP
10
RE2/AN7/OESPP
18 1
VUSB RE3/MCLR/VPP
PIC18F4550

Figura 1.1 LCD 16x2.

Procedimiento
Paso 1. Conectar los pines de alimentación del microcontrolador ya que al no conectarse no encenderá. Se pueden
verificar en el datasheet del PIC18F4550. Que son respectivamente los pines 11 y 32 (Vdd), 12 y 31 (Vss).
Paso 2. Conectar el puerto D al pin7 al 14 de la LCD.
Paso 3. Conectar 2 y 3 a positivo del LCD y el 1 a negativo.
Paso 4. Colocar un potenciómetro que por el pin de en medio de potenciómetro se conectara al pin 2 RA0
mediante una resistencia de 1k usando un potenciómetro de 10k. Las terminales 1 y 3 se conectaran una a positivo
y otra a negativo respectivamente.
Paso 5. Conectar el RC0, RC1 y RC2 al 4, 5 y 6 del LCD.
4. Discutir el resultado del programa conllevado a la práctica.

4/11
Discusión de Resultados.
1. Desarrollo del programa mediante la hoja de datos del HD44780.

4/12
Establece la longitud de los datos de la interfaz (DL)
Número de líneas de visualización (N)
Fuente de caracteres (F)
El comando de inicio hará uso del conjunto de funciones (function set) y de una conexión de 8 bits DL = 1
“0000110000” que este número es igual a 0x30 en hexadecimal con un una línea a usar N = 0 y un conjunto de
puntos de 5x8 F = 0.

Ahora se hará uso del comando de inicio con el uso de dos líneas N = 1 dando un numero en binario de
“0000111000” = 0x38

Activa / desactiva toda la pantalla (D)


Cursor on / off (C)
Parpadeo de la posición del cursor personaje (B).
Activamos la pantalla apagamos el cursor y sin blink (sin parpadeo) “0000001000” este número es igual a 0x08 en
hexadecimal

4/13
Limpiamos la pantalla 0x01

Ajusta la dirección de movimiento del cursor. Y especifica el cambio de pantalla. Estas operaciones son realizadas
durante la escritura de datos y leer.
I=1 = incremento
D= 0 = Decremento
S=1 display se desplaza
S= 0 display no se desplaza
Y existe un 1 por default obteniendo un numero de “0000000110” igual a 0x06 en hexadecimal

Ponemos el display en on D = 1 y el cursor y blink en off B = 0 C = 0 dándonos un numero en binario de


“0000001100” que en decimal seria un 12 pero en hexadecimal un 0x0C

Establece la dirección CGRAM. Los datos del CGRAM son enviados y recibido después de este ajuste

Establece la dirección DDRAM. Los datos DDRAM se envían y recibido después de esta configuración.

Ponemos el mensaje en la posición 6 pero activamos el leer dato y escribir dato, más el numero donde lo
posicionaremos que nos da un numero en binario de “0011000110” que nos da un numero de 0xC6 en
hexadecimal

Pin 4: "RS" (trabaja paralelamente al Bus de datos del módulo LCD, Pines 7 al 14, es decir, cuando RS es cero, el
dato presente en el bus corresponde a un registro de control o instrucción, pero cuando RS es uno, el dato presente
en

4/14
2. Programa desarrollado por medio de software.
Programa 4: LCD 16x2
#include <cuatro.h>
//procedimiento de flanco de bajada

void pulso()
{
output_bit(PIN_C2, 1); //enable=1
output_bit(PIN_C2, 0); //enable=0 pulso de bajada
Delay_ms(5); //delay time miliseconds
}

void main()
{
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL|ADC_TAD_MUL_0);
delay_ms(15);
//manda comandos
output_bit(PIN_C0, 0); //RS=0 write command
output_bit(PIN_C1, 0); // RW=0 write to LCD
output_D(0x30); //comando de inicio
pulso();
output_D(0x30); //comando de inicio
pulso();
output_D(0x30); //comando de inicio
pulso();
output_D(0x38); //comando de inicio dos lineas y font 5x8
pulso();
output_D(0x08); //only display on
pulso();
output_D(0x01); //clear display and set home
pulso();
output_D(0x06); //incremento sin corrimiento
pulso();
output_D(0x0C); //display on cursor on blink off
pulso();
output_D(0xC6); //manda a la posicion 06
pulso();
//mandar datos
output_bit(PIN_C0, 1); //RS=1 write data
output_D('A'); //manda a la A
pulso();
output_D('L'); //manda a la M
pulso();
output_D('N'); //manda a la R
pulso();

while(TRUE)
{
output_bit(PIN_C0, 0); //RS=0 read comanda
output_D(0x08); //display cursor on
pulso();
Delay_ms(300);
output_D(0x0C); //display cursor off
pulso();
Delay_ms(300);
//TODO: User Code
}

}
4/15
3. En la siguiente figura 1.2 se muestra la práctica desarrollada en el protoboard.

Figura 1.2 Circuito en protoboard del comportamiento de la LCD.

Observaciones.

1. El blacklight no lo tienen todas las LCD ya que al probar el mío no lo contenía pero solo medí cuenta a la hora
del desarrollo de la práctica.

2. Se le debe dar un tiempo para iniciar la LCD.

Conclusión.
Yo no tenía conocimiento de que se le debía dar un tiempo al LCD a la hora de prender y mucho menos que la
LCD contenía un microcontrolador HD44780 y que este contaba con datasheet. Comprendí el funcionamiento de
una LCD desde abajo, tomando la hoja de datos y configurando cada una de las órdenes que se le pueden
implementar a la LCD. Esta práctica me deja totalmente satisfecho para yo después hacer uso de otros tipo de LCD
como una LCD grafica que se necesita usar la hoja de datos para implementarla en un sistema embebido.

Referencias.
Fernando E. Valdés Pérez, Ramón Pallas Areny. MICROCONTROLADORES FUNDAMENTOS Y
APLICACIONES CON PIC. España. Editorial: Alfaomega. (2007).
Jose M. Angulo Usategui. MICROCONTROLADORES PIC Diseño practico de aplicaciones. USA. Editorial:
McGraw Hill. (2006).
Enrique Palacios. Microcontrolador PIC16F84 Desarrollo de Proyectos. España. Editorial: Alfaomega. (2004).
Carlos Valdivieso. Microprocesadores fundamentos y aplicaciones “diseño embebidos con simulaciones
interactivas”.
Santiago Corrales V. Electrónica Práctica con Microcontroladores PIC. Ecuador. Editorial: Microchip. (2006).
Revista: Microprocesadores y Microcontroladores.
Christian Bodington Esteva. Basic para microcontroladores PIC.

4/16

Potrebbero piacerti anche