Diferencia entre revisiones de «HD44780U»

De Proyectos
Ir a la navegación Ir a la búsqueda
Línea 94: Línea 94:


= Instrucciones =
= Instrucciones =
**Solo el IR y el DR pueden ser controlados por el MPU
**Antes de empezar la operación interna del HD4478U, la información de control es temporalmente guardada en estos registros para permitir la conexión entre varios MPUS, que operen a diferentes velocidades, o diferentes dispositivos de control de periféricos
**La operación interna del HD44780U se determina por señales enviadas desde la MPU
**Estas señales, las cuales incluyen la señal RS, R/W y el bus de datos (DB= a DB7), consituyen las instrucciones del HD44780U
[[File:tabla_6.jpg | 600px]]<br/>
[[File:tabla_6_2.jpg | 600px]]
== Instrucciones referentes a IR ==
== Instrucciones referentes a IR ==
=== Clear Display ===
=== Clear Display ===
*Clear Display
**Escribe 0x20 (espacio) en todas las direcciones de la DDRAM
**Pone la dirección 0 de la DDRAM en AC
**El display vuelve a su estado original si estuviera desplazado
**Pone I/D en 1 y S no cambia
=== Return Home ===
=== Return Home ===
**Pone en AC la direccion 0 de DDRAM
**El display vuelve a su estado original si estuviera desplazado
**El contenido de DDRAM no cambia
=== Entry Mode Set ===
=== Entry Mode Set ===
**I/D: Incremento (I/D = 1) o decremento (I/D = 0) la direción de la DDRAM cuando el codigo de un caracter es escrito en (o leido de) DDRAM
**Lo mismo pasa cuando se lee o escribe en CGRAM
**S: Si S = 1 el display se desplaza a la derecha (cuando I/D = 1) y a la izquierda (cuando I/D = 0). El display no hace nada si S = 0
**El display no se desplaza cuando leemos de DDRAM
**Leer de (o escribir en) CGRAM no desplaza el display
=== Display On/Off Control ===
=== Display On/Off Control ===
**D: D = 1 display on y D = 0 display off. Cuando esta en off los datos permanecen en DDRAM
**C: C = 1 el cursor se muestra y C = 0 el cursor no se muestra
**B: B = 1 el caracter que marca el cursor parpadea
=== Cursor or Display Shift ===
=== Cursor or Display Shift ===
**El cursor o el display se desplazan a la derecha o izquierda sin que se lean o escriban datos según la imagen a continuación
**En un display de dos lineas el cursor se mueve a la segunda cuando este pasa el digito 40 de la primera linea
**En el display shift el contenido de AC no cambia
[[File: tabla_7.jpg | 600px]]
=== Function Set ===
=== Function Set ===
**DL: DL = 1 los datos se envian y reciben en 8bits y DL = 0 se envian y reciben en 4bits
**N: Numero de lineas del display. N = 1, 2 lienas y N = 0, 1 linea
**F: Tamaño de los caracteres. F = 1 5x10 puntos y F = 0 5x8 puntos
**Esta función se tiene que llamar en la cabecera del programa antes de ejecutar cualquier otra instrucciones (exceptuando leer Busy Flag y dirección de instrucción). A partir de este punto, esta función no se puede ejecutar a no ser que se cambie la longitud de datos de la interfaz
=== Set CGRAM Address ===
=== Set CGRAM Address ===
**Pone la direccón de CGRAM en AC
**Los datos son luego escritos en (o leidos de) la MPU por la CGRAM
=== Set DDRAM Address ===
=== Set DDRAM Address ===
**Pone la dirección de DDRAM en AC
**Los datos son luego escritos en (o leidos de) la MPU por la DDRAM
**Cuando N = 0 (1 linea) la dirección puede ir desde 0x00 a 0x4F. Cuando N = 1, la dirección puede ir desde 0x00 a 0x27 para la primera liena y 0x40 a 0x67 para la segunda linea
=== Read Busy Flag and Address (instruccion de lectura) ===
=== Read Busy Flag and Address (instruccion de lectura) ===
**Lee la BF (que indica si el sistema esta realizando en ese momento una operacion interna)
**Si BF = 1 la operación interna se esta realizando
**No se acepta ningun instrucción nueva hasta que BF = 0
**A parte de la señal BF, al leer también se obtiene la dirección del AC. Esta dirección es el valor de la anterior instrucción
== Instrucciones referentes a DR ==
== Instrucciones referentes a DR ==
=== Write Data to CGRAM or DDRAM ===
=== Write Data to CGRAM or DDRAM ===
**Escribe 8 bits de datos en la CG o DDRAM
**Después de escribir la dirección aumenta (o decrece) automaticamente en 1
=== Read Data from CGRAM or DDRAM (instrucción de lectura) ===
=== Read Data from CGRAM or DDRAM (instrucción de lectura) ===
**Lee 8 bits de datos de CG o DDRAM
**La designación anterior determina si se ha de leer CG o DDRAM
**Antes de esta instrucción, tienen que ejecutarse Set DDRAM Address o Set CGRAM Address. Sino se ejecutan la primera lectura de datos es invalida
**Cuando se ejecutan instrucciones de lectura en serie, la siguiente dirección normalmente la lee la segunda instrucción de lectura
**Las instrucciones de Set Address no son necesarias ejecutarlas antes de esta instrucción de lectura cuando la operación Cursor or Display Shift desplaza el cursor (cuando se esta leyendo de DDRAM)
**La operación Cursor or Display Shift es la misma que Set DDRAM Address
**Después de leer, el '''entry mode''' incrementa o decrementa la dirección en 1 automáticamente. Sin embargo, el shift display no se ejecuta sin importar el modo entrada.
**El AC se incrementa o decrementa en 1 automáticamente después de las instrucciones de escritura de CGRAM o DDRAM
**Los datos de la RAM selecionados por AC no se pueden leer en este momento, incluso si las instrucciones de lectura se ejecutan
**Por lo tanto, para leer correctamente los datos, o bien ejecutar el conjunto de instrucciones de dirección o instrucción de desplazamiento del cursor (sólo con DDRAM), justo antes de la lectura de los datos deseados, se ha de ejecutar la instrucción de lectura desde la segunda vez que se envía la instrucción de lectura
= Documentación =
= Documentación =
* [http://www.geocities.com/dinceraydin/djlcdsim/djlcdsim.html Simulador LCD].- Es una página muy interesante porque te permite simular el funcionamiento del LCD sin tener que implementarlo. Va muy bien para ver como funciona el lcd.
* [http://www.geocities.com/dinceraydin/djlcdsim/djlcdsim.html Simulador LCD].- Es una página muy interesante porque te permite simular el funcionamiento del LCD sin tener que implementarlo. Va muy bien para ver como funciona el lcd.

Revisión del 08:23 10 feb 2013

Explicar enable, rs y rw

Explicar IR y DR

Explicar BF

Explicar AC

Explicar DDRAM y CGRAM

Explicar CGROM

Imagen instrucciones

Explicar instrucciones(añadiendo la instruccion se ejecuta cuando hay un flanco de bajada de enable)

Faltaria saber como se leen los datos

Pines

Pines de instrucciónes

Estos pines son los que sirven para ejecutar instrucciones. Como se ve en la tabla de inferior, dependiendo del valor de estos pines se selecionaran unas instrucciones a ejecutar u otras

RS RW Operación
0  0  Modo de instrucciones (display clear, ...)
0  1  Se lee el Busy Flag (DB 7 ) y el Address Counter(DB0 to DB6)
1  0  DR escribe en DDRAM o CGRAM
1  1  DR lee de DDRAM o CGRAM

Pin RS

El pin RS selecciona los registros (IR y DR). Cuando RS = 0 se ejecutan las instrucciones de IR, cuando RS = 1 se ejecutan las instrucciones de DR

Pin R/W

Este pin indica si la instrucción a ejecutar será de escritura, R/W = 0, o de lectura, R/W = 1

Pin Enable

Es el encargado de iniciar las instrucciones de lectura/escritura. Para cada instrucción que queramos hacer tenemos que seguir este procedimiento:
Con los pines RS/RW seleccionamos que tipo de instrucción enviaremos --> Colocamos la instrucción (o datos) a transmitir en los pines de datos --> Ponemos en HIGH el pin Enable --> Ponemos en LOW el pin Enable (en el flanco de bajada es cuando los datos se transmiten)

digitalWrite(E, LOW);
delayMicroseconds(1);
digitalWrite(E, HIGH);
delayMicroseconds(1);
digitalWrite(E, LOW);
delayMicroseconds(100);

Pines de datos

Los pines de datos son los que van del DB7 al DB 0 (teniendo en cuenta que estamos utilizando una conexión de 8bit).
En estos pines es donde colocamos los datos a transmitir. Por ejemplo, si queremos transmitir la instrucción Display Clear (que es 0000001), en cada pin pondremos el valor correspondiente a la instrucción.

Registros

Instruction Register(IR)

Guarda las instrucciones (display clear, cursor shift, ...)
Guarda la información de la dirección de la DDRAM y de la CGRAM
Solo puede ser escrito desde la MPU

Data Register (DR)

Guarda temporalmente los datos que se leen/escriben en la DDRAM o la CGRAM
Los datos escritos en la DR desde la MPU son automáticamente escritos en la DDRAM o la CGRAM
Cuando la inforamción de la dirección se escribe en la IR, los datos se leen y se guardan en la DR desde la DDRAM o la CGRAM a través de una operacion interna
La transferencia de datos entre la MPU se completa cuando la MPU lee la DR
Después de la lectura, los datos de la DDRAM o CGRAM de la siguiente dirección se envian a la DR para la siguiente lectura desde la MPU
A través del pin RS se seleccionan estos dos registros

Busy Flag (BF)

Si BF vale 1, HD44780U está en modo internal operation y la siguiente instruccion no se aceptará
Cuando RS = 0 y RW = 1, el BF sale por DB7. La siguiente instrucción tiene que ser escrita después de asegurarse de que BF es 0

Address Counter (AC)

Asigna las direciones a DDRAM y CGRAM
Cuando la dirección de una instrucción se escribe en la IR, la información de la dirección se envia desde la IR a la AC
La selección de cualquiera de los dos DDRAM o CGRAM también se determina al mismo tiempo por la instruccion --> La instrucción enviada a la IR a parte de ser instrucción también selecciona la DDRAM o CGRAM
Después de escribir en (leer de) la DDRAM o CGRAM, el AC se incrementa automaticamente a 1 (decrementa 1) --> La AC pasa a valer la siguiente (o anterior) dirección después de ejecutar una operación de escritura (o lectura)
Cuando RS = 0 y R/W = 1 el contenido de AC se envia por los pines DB0...DB6

DDRAM y CGRAM

    • Guarda los datos a mostrar codificados en 8 bits
    • Su capacidad es de 80 x 8 bits, o 80 caracteres
    • DDRAM que no se usa para mostrar datos se puede usar como RAM del sistema
    • La dirección DDRAM se guarda en AC en hexadecimal

(Páginas 10, 11 y 12 de momento me la salto porque no acabo de ver la utilidad de la información)

  • Character Generator RAM (CGRAM)
    • El usuario puede escribir patrones de caracteres
    • Puede escribir 8 caracteres de 5x8 puntos
    • Puede escribir 4 caracteres de 5x10 puntos
    • Donde se guardan estos caracteres son en las direcciones que van desde 0000 0000(Uper 4 Bits Lower 4 Bits) hasta 0000 1111(Uper 4 bits Lower 4 Bits) (En la tabla 4 del datasheet se puede entender mejor)<--Creo que esto es así*
    • Las areas que no se usan como display se pueden usar como RAM general

/*(Tabla 5 de las paginas 19 y 20 no las entiendo)

CGROM

  • Character Generator ROM (CGROM)
    • Tiene almacenados patrones de caracteres de 5x8 puntos o 5x10 puntos
    • Guarda 108 patrones de caracteres de 5x8 puntos y 32 patrones de 5x10 puntos

Instrucciones

    • Solo el IR y el DR pueden ser controlados por el MPU
    • Antes de empezar la operación interna del HD4478U, la información de control es temporalmente guardada en estos registros para permitir la conexión entre varios MPUS, que operen a diferentes velocidades, o diferentes dispositivos de control de periféricos
    • La operación interna del HD44780U se determina por señales enviadas desde la MPU
    • Estas señales, las cuales incluyen la señal RS, R/W y el bus de datos (DB= a DB7), consituyen las instrucciones del HD44780U


Instrucciones referentes a IR

Clear Display

  • Clear Display
    • Escribe 0x20 (espacio) en todas las direcciones de la DDRAM
    • Pone la dirección 0 de la DDRAM en AC
    • El display vuelve a su estado original si estuviera desplazado
    • Pone I/D en 1 y S no cambia

Return Home

    • Pone en AC la direccion 0 de DDRAM
    • El display vuelve a su estado original si estuviera desplazado
    • El contenido de DDRAM no cambia

Entry Mode Set

    • I/D: Incremento (I/D = 1) o decremento (I/D = 0) la direción de la DDRAM cuando el codigo de un caracter es escrito en (o leido de) DDRAM
    • Lo mismo pasa cuando se lee o escribe en CGRAM
    • S: Si S = 1 el display se desplaza a la derecha (cuando I/D = 1) y a la izquierda (cuando I/D = 0). El display no hace nada si S = 0
    • El display no se desplaza cuando leemos de DDRAM
    • Leer de (o escribir en) CGRAM no desplaza el display

Display On/Off Control

    • D: D = 1 display on y D = 0 display off. Cuando esta en off los datos permanecen en DDRAM
    • C: C = 1 el cursor se muestra y C = 0 el cursor no se muestra
    • B: B = 1 el caracter que marca el cursor parpadea

Cursor or Display Shift

    • El cursor o el display se desplazan a la derecha o izquierda sin que se lean o escriban datos según la imagen a continuación
    • En un display de dos lineas el cursor se mueve a la segunda cuando este pasa el digito 40 de la primera linea
    • En el display shift el contenido de AC no cambia

Function Set

    • DL: DL = 1 los datos se envian y reciben en 8bits y DL = 0 se envian y reciben en 4bits
    • N: Numero de lineas del display. N = 1, 2 lienas y N = 0, 1 linea
    • F: Tamaño de los caracteres. F = 1 5x10 puntos y F = 0 5x8 puntos
    • Esta función se tiene que llamar en la cabecera del programa antes de ejecutar cualquier otra instrucciones (exceptuando leer Busy Flag y dirección de instrucción). A partir de este punto, esta función no se puede ejecutar a no ser que se cambie la longitud de datos de la interfaz

Set CGRAM Address

    • Pone la direccón de CGRAM en AC
    • Los datos son luego escritos en (o leidos de) la MPU por la CGRAM

Set DDRAM Address

    • Pone la dirección de DDRAM en AC
    • Los datos son luego escritos en (o leidos de) la MPU por la DDRAM
    • Cuando N = 0 (1 linea) la dirección puede ir desde 0x00 a 0x4F. Cuando N = 1, la dirección puede ir desde 0x00 a 0x27 para la primera liena y 0x40 a 0x67 para la segunda linea

Read Busy Flag and Address (instruccion de lectura)

    • Lee la BF (que indica si el sistema esta realizando en ese momento una operacion interna)
    • Si BF = 1 la operación interna se esta realizando
    • No se acepta ningun instrucción nueva hasta que BF = 0
    • A parte de la señal BF, al leer también se obtiene la dirección del AC. Esta dirección es el valor de la anterior instrucción

Instrucciones referentes a DR

Write Data to CGRAM or DDRAM

    • Escribe 8 bits de datos en la CG o DDRAM
    • Después de escribir la dirección aumenta (o decrece) automaticamente en 1

Read Data from CGRAM or DDRAM (instrucción de lectura)

    • Lee 8 bits de datos de CG o DDRAM
    • La designación anterior determina si se ha de leer CG o DDRAM
    • Antes de esta instrucción, tienen que ejecutarse Set DDRAM Address o Set CGRAM Address. Sino se ejecutan la primera lectura de datos es invalida
    • Cuando se ejecutan instrucciones de lectura en serie, la siguiente dirección normalmente la lee la segunda instrucción de lectura
    • Las instrucciones de Set Address no son necesarias ejecutarlas antes de esta instrucción de lectura cuando la operación Cursor or Display Shift desplaza el cursor (cuando se esta leyendo de DDRAM)
    • La operación Cursor or Display Shift es la misma que Set DDRAM Address
    • Después de leer, el entry mode incrementa o decrementa la dirección en 1 automáticamente. Sin embargo, el shift display no se ejecuta sin importar el modo entrada.
    • El AC se incrementa o decrementa en 1 automáticamente después de las instrucciones de escritura de CGRAM o DDRAM
    • Los datos de la RAM selecionados por AC no se pueden leer en este momento, incluso si las instrucciones de lectura se ejecutan
    • Por lo tanto, para leer correctamente los datos, o bien ejecutar el conjunto de instrucciones de dirección o instrucción de desplazamiento del cursor (sólo con DDRAM), justo antes de la lectura de los datos deseados, se ha de ejecutar la instrucción de lectura desde la segunda vez que se envía la instrucción de lectura

Documentación

  • Simulador LCD.- Es una página muy interesante porque te permite simular el funcionamiento del LCD sin tener que implementarlo. Va muy bien para ver como funciona el lcd.
  • Reading from HD44780-based LCDs.- Discusión de como se leen los datos
  • Datasheet.- Datasheet del HD4478
  • LiquidCrystal Library.- Libreria del lcd que traem implementada Arduino. A mi me ha servido de mucho mirar el código fuente para aprender el funcionamiento del lcd