Beruflich Dokumente
Kultur Dokumente
http://www.geekfactory.mx/tutoriales/tutoriales-pic/pantalla-lcd-16x2-con-piclibreria/
Cuando los simples indicadores luminosos con led ya no son suficientes, habitualmente el
siguiente paso para todo programador es ir por una pantalla lcd 162. Llegados a este
punto, encontramos que existen mdulos LCD que facilitan la interfaz con este perifrico.
El estndar en la industria para estos mdulos con controlador a bordo es el chipset
HD44780 (y otros ms compatibles desarrollados a partir de este), para los cuales
encontramos soporte en prcticamente cualquier plataforma: Arduino, PIC, AVR, MSP430,
etc.
En esta entrada introducimos la librera de control altamente portable a cualquier
microcontrolador, la cual puede ser utilizada tanto para PIC, como AVR y prcticamente
cualquier otro microcontrolador o computadora embebida que se nos ocurra.
Nuestra foto de portada para el artculo muestra mdulos LCD con iluminacin azul y
letras color blanco.
Las conexiones para el mdo de 8 bits son algo ms complicadas, ya que requerimos las 8
lineas de datos activas. En este caso utilizaremos los 8 bits del puerto B, aunque se puede
usar cualquier combinacin de pines con nuestra librera. RA0 ahora funciona como seal
de seleccin de registro (RS) y RA1 como seal de habilitacin (E).
Cursor
home
0 0 0 0
0 0 0 0
Descripcin
Entry mode
0
set
0 0 0 0
Incrementar/Decrementar
direccin (I/D); Habilitar
1 I/D S corrimiento de pantalla (S). Estas
operaciones se realizan al leer o
escribir datos
Display
on/off
control
0 0 0 0
Cursor/displ
0
ay shift
0 0 0 1
Function
set
0 0 1
0 1
Set CGRAM
address
Tiempo
de
Ejecuci
n
S/ R/
*
C L
D
N
L
37 s
37 s
37 s
37 s
CGRAM address
37 s
Set DDRAM
0
address
DDRAM address
CGRAM/DDRAM
address
37 s
Read busy
flag
&address
counter
Write
CGRAM
orDDRAM
Write Data
37 s
Read from
CG/DDRAM
Read Data
37 s
B
F
0 s
https://github.com/geekfactory/LCD
Para obtener la ultima versin de la librera podemos usar git con el siguiente comando:
git clone --recursive https://github.com/geekfactory/LCD.git
Como ya dijimos, a veces utilizamos esta librera en otros microcontroladores, por esta
razn puedes encontrar otros archivos en github, pero estos 4 son los que se requieren para
trabajar en cualquier proyecto con PIC.
Para adecuar la librera para pantalla lcd 162 a nuestro circuito hay que editar el
archivo LCD-PIC16.h. Dentro de este, encontramos las definiciones de los pines utilizados
en la interfaz con el controlador de pantalla. En este caso definimos un bus de 4 bits en la
parte baja del puerto A (RA0 RA3) y lineas de control RS y E en los pines RB1 y RB0
respectivamente. Esto corresponde a la ilustracin del modo de 4 bits que se encuentra
arriba en esta pgina.
/**
* Definitions for common control lines
*/
#define
#define
#define
#define
LCD_PIN_RS PORTBbits.RB1
LCD_TRIS_RS
TRISBbits.TRISB1
LCD_PIN_E PORTBbits.RB0
LCD_TRIS_E TRISBbits.TRISB0
/**
* Configuration example for 4 bit mode
*/
#define LCD_TRIS_D4
TRISAbits.TRISA0
#define LCD_TRIS_D5
TRISAbits.TRISA1
#define LCD_TRIS_D6
TRISAbits.TRISA2
#define LCD_TRIS_D7
TRISAbits.TRISA3
#define LCD_PIN_D4 PORTAbits.RA0
#define LCD_PIN_D5 PORTAbits.RA1
#define LCD_PIN_D6 PORTAbits.RA2
#define LCD_PIN_D7 PORTAbits.RA3
Para utilizar la librera con un bus de 8 bits, es necesario definir los pines restantes del bus
de datos: LCD_PIN_D0 a LCD_PIN_D3.
Escribir caracteres a la pantalla
Cada uno de los caracteres que escribimos a la pantalla son almacenados en una ubicacin
en la memoria RAM apuntada por la direccin del cursor. Cuando escribimos un carcter,
el cdigo ASCII correspondiente a este, se almacena en la memoria interna conocida como
Display Data RAM o DDRAM. Para escribir caracteres a la DDRAM utilizamos las
funciones lcd_write() y lcd_puts(), que escriben un caracter y una cadena, respectivamente.
// Podemos mover el cursor a donde deseamos comenzar a escribir
lcd_goto( 0, 0 );
// Enviamos texto a la pantalla (DDRAM)
lcd_puts( "Hola Mundo" );
// Enviar un solo caracter (signo de admiracion)
lcd_write("!");
El controlador HD44780 en la pantalla lcd 162 nos permite tambin definir caracteres
especiales definidos por el usuario (hasta 8 caracteres). Cuando deseamos escribir un
carcter personalizado, el mapa de bits que lo compone se almacenan en otro segmento de
memoria independiente conocida como Character Generator RAM o simplemente
CGRAM. Cada carcter se define como un grupo de 8 bytes que se envan a la memoria
CGRAM. Por ejemplo, podemos crear un cono con una carita feliz de la siguiente forma:
caracter con la funcin lcd_write(). El cdigo para mostrar el carcter que acabamos de
crear quedara de la siguiente manera:
// Cargar el caracter a CGRAM
// El primer parmetro es el cdigo del caracter (0 - 7)
// El segundo es el apuntador a donde se guarda el bitmap (el array declarado
anteriormente)
lcd_create_char(0, smile);
// Borrar la pantalla despues de terminar de escribir a CGRAM
lcd_clear();
// Escribir el cdigo de carita feliz (nmero 0 de 7)
lcd_write(0);
La librera viene con funciones que permiten definir caracteres especiales. En el ejemplo de
la librera hemos definido 4 caracteres personalizados (flechas) que aparecen durante el
programa de demostracin. Sin embargo, la creatividad de cada persona permitir crear
caracteres que pueden utilizarse como iconos para los ms diversos usos.
Nuestra librera de LCD esta alojada en github. Cualquier persona puede realizar
correcciones o mejoras al cdigo fuente y aportarlas al repositorio. Alguien en nuestro
equipo revisar los cambios propuestos y los integrar al cdigo principal en caso de ser
necesario.
Conclusin
En este artculo, sentamos las bases para que puedas incluir de manera sencilla pantallas
LCD de 162 caracteres en tus diseos con microcontroladores PIC. Nosotros lo hacemos
habitualmente y encontrars muchos ejemplos que funcionan con esta librera dentro de
nuestro sitio web.
Como ya dijimos, te invitamos a crear una cuenta en Github y a mejorar la librera y aportar
cualquier mejora que creas conveniente. Ser un placer tambin recibir tus comentarios a
travs de este medio o mediante correo electrnico.