![]() |
![]() |
El LCD (liquid crystal display) es un elemento indispensable en la electrónica cuando usamos microcontroladores ya que nos permiten mostrar información de forma muy sencilla y con un coste muy bajo. Las principales ventajas que presentan sobre los displays numéricos de LEDs es que son capaces de mostrar muchos más caracteres en varias lineas y que su consumo es muy bajo (del orden de 1mA).
Aunque existen varios integrados capaces de manejar LCDs, el más usado es el
HD44780U
de
Hitachi.
El
HD44780U
se integra con las pantallas LCD para obtener un producto completamente funcional con un interface bastante
sencillo.
Descripción del HD44780U
El HD44780U es un controlador para LCDs que puede funcionar en modo de 4 u 8 bits. Se controla por medio de tres lineas de control (RS,RW y E) y ocho de datos (DB0-DB7) aunque en el modo de cuatro bits únicamente se utilizan las cuatro de mayor peso:
RS: Selección de registro: 0 registro de instrucción, 1 registro de datos.
RW: Selecciona lectura (0) o escritura (1).
E: Habilitación.
DB0-DB3: Nibble bajo del bus de datos. Estos pines no se usan en modo 4 bits.
DB4-DB7: Nibble alto del bus de datos. DB7 también es el indicador de ocupado (busy flag).
El HD44780U dispone de dos registros de ocho bits, un registro de instrucción (IR) y un registro de datos (DR). El registro de instrucción guarda el comando recibido y la dirección del display. El registro de datos guarda temporalmente el dato que queremos escribir en la memoria del display.
Como hemos comentado antes, este integrado se monta junto con el LCD para obtener un dipositivo funcional sin necesidad de complicar la circuitería de nuestros diseños. Estos displays tienen un interface de 16 pines distribuidos de la siguiente forma:
| Conector LCD | ||
|---|---|---|
| Pin | Nombre | Descripción |
| 1 | Vss | Alimentación (GND) |
| 2 | Vcc | Alimentación (+5V) |
| 3 | Vee | Ajuste del contraste |
| 4 | RS | Selección del registro |
| 5 | R/W | Selección de lectura/escritura |
| 6 | E | Habilitación del display |
| 7-14 | DB0-DB7 | Bus de datos |
| 15,16 | A,K | Ánodo y cátodo de la iluminación posterior |
En la siguiente imagen podemos ver distintos tipos de LCDs, tenemos desde pequeños displays con una sola linea y 16 caracteres hasta los más grandes con cuatro lineas de cuarenta caracteres. Estos últimos necesitan dos chips HD44780U ya que cada uno puede manejar hasta ochenta caracteres, además tienen un pin más de habilitación para seleccionar uno u otro (las dos lineas superiores o las dos inferiores).
| Juego de instrucciones | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Instrucción | Código | Descripción | |||||||||
| RS | RW | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 | ||
| Clear display | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | Borra el display y pone a cero el address counter (pone el cursor en la posición 0). |
| Cursor home | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | - | Pone el cursor en la posición 0. |
| Entry mode set | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S | Indica el movimiento del cursor hacia la izquierda (I/D=0) o hacia la ferecha (I/D=1). También indica si el display se desplaza al sobrepasar los márgenes (S=1). |
| Display on/off control | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B | Activa o desactiva el display (D), el cursor (C) y configura el parpadeo de éste (B). |
| Cursor/display shift | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | - | - | Mueve el cursor (S/C=0) y desplaza el display hacia la izquierda (R/L=0) o hacia la derecha (R/L=1). |
| Function set | 0 | 0 | 0 | 0 | 1 | DL | N | F | - | - | Indica la longitud de los datos (DL=0 4 bits, DL=1 8 bits), número de lineas (N=0 una línea, N=1 dos líneas) y la fuente del texto (F=0 5x7, F=1 5x10). |
| Set CGRAM address | 0 | 0 | 0 | 1 | CGRAM address | Pone la dirección CGRAM, los datos se reciben o se envian después de este comando. | |||||
| Set DDRAM address | 0 | 0 | 1 | DDRAM address | Pone la dirección DDRAM, los datos se reciben o se envian después de este comando. | ||||||
| Read busy flag & address | 0 | 1 | BF | Address counter | Lee el indicador de ocupado indicando si hay alguna operación en curso y la dirección a la que apunta el contador. | ||||||
| Write data to CG or DDRAM | 1 | 0 | Write data | Escribe datos en CGRAM o DDRAM. | |||||||
| Read data from CG or DDRAM | 1 | 1 | Read data | Lee datos de CGRAM o DDRAM. | |||||||
Para conectar un LCD al puerto paralelo necesitamos poder activar y desactivar individualmente los pines de éste. Programar el puerto paralelo y manejar los pines individualmente es una tarea bastante tediosa así que usaremos la librería parapin. Es muy fácil de usar y permite usar el puerto paralelo como entradas o salidas digitales.
Normalmente el acceso al puerto paralelo se hace mediante un conector DB25 macho, de los cuales 17 pines son programables como entradas o salidas según la siguiente tabla:
| Conector DB25 | ||
|---|---|---|
| Pin | Nombre | Dirección |
| 1 | In/Out | |
| 2-9 | In/Out (todos "In" o todos "Out") | |
| 10 | Input, generador de interrupciones | |
| 11 | Input | |
| 12 | Input | |
| 13 | Input | |
| 14 | In/Out | |
| 15 | Input | |
| 16 | In/Out | |
| 17 | In/Out | |
| 18-25 | GND | |
| Críticas constructivas a carlitos (las demás a /dev/null) | ![]() |
![]() |
![]() |
![]() |
