domingo, 10 de febrero de 2013

Lcd 16x2

En esta entrada vamos a explicar el funcionamiento y conexionado de un LCD con una resolución de 16x2.


¿Que es un LCD?


El LCD(Liquid Crystal Dysplay) 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 este caso vamos a emplear un LCD de 16x2, esto quiere decir que dispone de 2 filas de 16 caracteres cada una. Los píxeles de cada símbolo o carácter, varían en función de cada modelo.

¿Cómo es su conexionado?

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 ademas en su estructura los pines de Anodo 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.

¿DDRAM y CGROM?

Son las dos zonas de memoria del LCD.
La memoria DDRAM(Data Display Ram): corresponde a una zona de memoria donde se almacenan los caracteres que se van a representar en pantalla. Es decir es la memoria donde se almacenan los caracteres a mostrar con su correspondiente posición.

La memoria CGROM es una memoria interna donde se almacena una tabla con los caracteres que podemos visualizar en el lcd. En la imagen podemos ver un ejemplo de la tabla con un contenido de 192 caracteres.


La memoria CGRAM(Character Generator Ram): en ella se pueden almacenar nuestros propios caracteres.

La librería del LCD:

Para poder visualizar los caracteres o símbolos en el LCD es necesario que en el programa de código fuente a emplear, incluyamos la librería de este. 
En este caso empleamos la librería "lcd.c", la cual hemos modificado. Siempre que utilicemos una librería de este tipo tendremos que analizarla para saber cuales son los pines de control y los pines para el Bus de datos, en este caso podemos observar que están definidos al comienzo de la misma.


#define LCD_ENABLE_PIN  PIN_D0
#define LCD_RS_PIN      PIN_D1
#define LCD_RW_PIN      PIN_D2
#define LCD_DATA4       PIN_D4   
#define LCD_DATA5       PIN_D5  
#define LCD_DATA6       PIN_D6 
#define LCD_DATA7       PIN_D7 

En el resto de la librería se puede encontrar todas las estructuras necesarias así como las funciones que nos permiten utilizar nuestro LCD.
Podemos encontrar funciones como :

lcd_init: inicializa el lcd.
lcd_gotoxy: establece la posicion de escritura en el lcd.
lcd_putc: nos muestra un dato en la siguiente posición del lcd, podemos emplear funciones como \f para limpiar el display, \n cambio a la segunda línea, \b mueve una posición atrás.
lcd_getc(x,y): devuelve caracteres a la posición x,y.
Otras funciones: lcd_send_nibble(BYTE n), lcd_send_byte(BYTE address, BYTE n). 


Aquí se puede ver un ejemplo de una sencilla programación en una Pic control, y muestra de datos en el LCD, son datos inespecíficos que no muestran ninguna información.



Espero haberte ayudado, me despido dejándote unos links directos a distintos modelos de LCD16x2.

-LCD 16x2

https://s.click.aliexpress.com/e/_mNIsqqe 

Si adquieres otro modelo y quieres seguir este tutorial, asegúrate que el que escojas no sea I2c. Ya que cambiaría su conexionado.

22 comentarios:

  1. Gracias por la información (pero cuida los errores gramaticales)

    ResponderEliminar
  2. gracias va para mi reporte

    ResponderEliminar
  3. te pido permiso para tomar esta informacion para un trabjo muchas fgracias

    ResponderEliminar
  4. como hago para activar la pantalla lcd con un micro ''16f887", la programacion la tengo bien y cuando lo simulo en proteus se me refleja lo que programe pero a la hora de montarlo no se me refleja nada y me sale un caracter negro, ya revise conexiones y todo lo tengo bien alguien me puede colaborar.
    saludos.

    ResponderEliminar
  5. Donde descargo la libreria del lcd modificado?

    ResponderEliminar
  6. Muchas gracias por la información

    Me ha sido de gran ayuda

    ResponderEliminar
  7. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  8. Me ayudaste un buen con mi tésis, 10/10. Todo un profesional

    ResponderEliminar
  9. Me ayudaste bastante con mi tésis 10/10. Todo un profesional

    ResponderEliminar
  10. de casualidad alguien me podría ayudar tengo que dar un código con un pic18f452 en donde tengo que reflejar 4 posiciones en la pantalla lcd con unos conteos en forma ascendente y descendente en cada una de las posiciones de la pantalla

    ResponderEliminar
  11. HOLA QUE TAL! PODRÍAS EXPLICAR , LOS CARACTERES SE ACTIVAN EN UN SOLO TIEMPO O ES PUNTO POR PUNTO,LOS CARACTERES ¿SON PUNTOS A PUNTOS QUE SE VE EN LA PANTALLA?, OTRA COSA COMO ¿SABER DE CUANTOS CARACTERES ES UN DISPLAY?, INTENTO UTILIZAR UN DISPLAY DE ESTÉREO, QUIERO PONER MI NOMBRE EN EL O HACER ALGO DIDÁCTICO SALUDOS BUEN DIA.

    ResponderEliminar