jueves, 24 de enero de 2019

Interfaz LCD

Esta sección describe los modos de operación de la LCD y luego como programarlos para poder conectarlo a un microcontrolador.

El controlador de pantalla de cristal líquido y matriz de puntos HD44780U LSI muestra caracteres alfanuméricos, caracteres kana japoneses y símbolos. Se puede configurar para controlar una pantalla de cristal líquido de matriz de puntos bajo el control de un microprocesador de 4 u 8 bits. Dado que todas las funciones como pantalla RAM, carácter el generador y el controlador de cristal líquido, necesarios para controlar una pantalla de cristal líquido de matriz de puntos, están provistos internamente en un chip, un sistema mínimo puede interconectarse con este controlador / controlador. 
Un solo HD44780U puede mostrar hasta una línea de 8 caracteres o dos líneas de 8 caracteres. El HD44780U tiene compatibilidad con la función pin con el HD44780S, que le permite al usuario reemplazar fácilmente un LCD-II con un HD44780U. La ROM del generador de caracteres HD44780U se extiende para generar 208, 5X8 fuentes de caracteres de puntos y 32 fuentes de caracteres de puntos 5X10 para un total de 240 fuentes de caracteres diferentes. La fuente de alimentación baja (2.7V a 5.5V) del HD44780U es adecuada para cualquier producto portátil con batería que requiera una baja disipación de energía.

Operación LCD.

En los últimos años se esta encontrando un reemplazo másivo de los LED-7segmentos o multisegmentos, esto es debido a las siguientes razones:
  • El bajo precio de las LCD.
  • La habilidad de las LCDs para mostrar números, caracteres y gráficos. Esto en contraste a los LEDs, que estan limitados a números y pocos caracteres.
  • Incorporación de un controlador de actualización en la pantalla LCD, lo que libera a la CPU de la tarea de actualizar la pantalla LCD. en contraste, el LED debe ser actualizado por la CPU (o de alguna otra manera) para seguir mostrando los datos.
  • Facil de programar caracteres y gráficos.

Pines de descripción de la LCD.

El LCD tiene 14 pines. La función de cada pin ese muestran en la tabla:
Descripción de pines de la LCD.


Vcc,Vss y Vee

Mientras Vcc proporciona +5v, Vss proporciona GND y Vee es usado para controlar el contraste de la LCD.

Selección de registro RS

  • Si RS=0. Se selecciona el registro de código de comando de instrucción, permitiendo al usuario mandar comandos tales como "clear display" entre otros.
  • Si RS=1. Se selecciona  el registro de datos, permitiendo al usuario mandar datos a la LCD.

Lectura/escritura(R/~W)

  • Si R/~W =1, el usuario podrá leer información de la LCD.
  • Si R/~W =0, el usuario podrá escribir información en la LCD.

Habilitación E.

El pin de habilitación es usado por la LCD cuando los datos se suministran a los pines de datos, este pulso de habilitación debe tener como mínimo un ancho de pulso de 450ns.
Pulso de Habilitación de 450ns.

D0-D7

Los pines de datos de 8 bits D0-D7 son usados para enviar información a la LCD o leer el contenido de los registro internos de la LCD.
código de comando lcd

  • Mientras RS=1 ,se puede mostrar letras y números, nosotros enviamos código ASCII para las letras A-Z,a-z y numeros 0-9. 
  • Estos son comandos de instrucciones que pueden enviar a la LCD para limpiar el display o mover la posición del cursor o parpadeo.
Veremos como hacemos la interfaz con un microcontrolador esta puede ser conectado de dos maneras usando 4 bit de datos u 8 bits de datos, el interfaz con 8 bits es facil para programar pero usa 4 pines mas.

Enviando comandos y datos a las LCD.

Para enviar datos y comandos al LCD deberias hacer los siguientes pasos, notece que el paso 2 y 3 pueden repetirce algunas veces:
  1. Inicializar LCD.
  2. Enviar algún comando de la tabla 12-2 a la LCD.
  3. Enviar el caracter que se muestra en la pantalla.

Inizializando la LCD.

Para iniciar la LCD y tener una visualización de caracteres de 5x7 con 2 lineas y de 8bits de operación(modo), la siguiente secuencia de comandos debería ser enviado a la LCD: 0x38,0x0E,y 0x01. luego de encender la LCD se recomienda esperar 15ms antes de enviar comandos a la LCD. Si es que los comandos de inicialización no son las primeras comandos en tu código se debe omitir los 15 ms.
Secuencia de comandos para inicializar LCD tipo matriz 5x7-Operación 8 bits. 
La inicialización va a depender del cuantas lineas tenga la LCD[2,4 filas por ejemplo para LCD de 16(columnas)x4(filas)] del modo de operación 8 o 4 bits del tipo de vizualización de caracteres.

El comando 0x38 significa que estamos configurando el modo de 8 bits lcd con 2 línea y lo estamos inicializando para que tenga una pantalla de caracteres de 5x7. Ahora, este 5x7 es algo que todos deberían saber qué significa. Por lo general, los caracteres se muestran en lcd en forma de matrices 5x8. donde 5 es el número total de coulombs y es el número de filas. Así, el comando anterior 0x38 inicializa el lcd para mostrar el carácter en 5 columnas y 7 filas la última fila que solemos dejar para que nuestro cursor se mueva o parpadee, etc.
Caracteres de 5(columnas)x7(filas).
Para inicializar el LCD por instrucciones es simple, aquí se mostrará el diagrama de flujo que describe paso a paso para inicar el LCD:

Diagrama de flujo para inicializar el LCD modo de operación de 8 bits.

Interfaz de 8 bits.
Según lo anterior podemos resumir los pasos como sigue:
  1. Enviar comando 0x30(110000).
  2. Delay de mas de 4.1 ms.
  3. Enviar comando 0x30(110000).
  4. Delay de mas de 100us.
  5. Enviar comando 0x30(110000).(ver tabla 12-3).
  6. Enviar comndo de Display off.
  7. Enviar comndo de Display clear.
  8. Enviar comndo de Entry mode set.

Diagrama de flujo para inicializar el LCD modo de operación de 4 bits.

Interfaz de 4 bits.
Según lo anterior podemos resumir los pasos como sigue:
  1. Enviar comando 0x3(11).
  2. Delay de mas de 4.1 ms.
  3. Enviar comando de 0x3.
  4. Delay de mas de 100us.
  5. Enviar comando de 0x3(ver tabla 12-3).
  6. Enviar comndo de Display off.
  7. Enviar comndo de Display clear.
  8. Enviar comndo de Entry mode set.
Los primeros 3 comandos generalmente no son necesarios, pero se recomiendan cuando está utilizando una interfaz de 4 bits. Por lo tanto, puede programar la pantalla LCD desde el paso 7 cuando trabaje con una interfaz de 8 bits. 

Enviando comandos a la LCD.

  1. Para enviar algún comando de la tabla 12-2 a la LCD, RS=0(para mandar comandos a la LCD) y R/~W=0 y poner el número de comando en los pines de datos(D0-D7).
  2. Luego enviar un pulso de 450ns al pin E para habiltar el "latch" interno de la LCD.
  3. Después de cada comando que se envia se debe esperar mas 40 us(puede ser 50,60,80,100us)  para que el LCD ejecute el comando, los comandos de "clear LCD" y "return home" son excepciones de esta regla,estos dos ultimos comandos necesitan 2ms aproximadamente.
Tiempos de ejecución que necesita cada comando.


Enviando datos a la LCD.

  1. Para enviar datos la LCD RS=1 y para escribir datos R/~W=0.
  2. Colocar el dato en los pines de datos(D0-D7).
  3. Luego enviar un pulso de alto a bajo de 450ns al pin E para habiltar el "latch" interno de la LCD.
  4. Después de enviar los datos se debería esperar alrededor de 40us para permitir que el modulo  LCD escriba en pantalla.

LCD Data sheet.

Aquí profundizaremos el conocimiento de las LCD para concentrarnos en dos importantes conceptos. Primero veremos el diagrama de tiempos de la LCD y luego veremos como poner datos en algún lugar de la LCD.

Diagrama de tiempos de la LCD.

probe
Diagrama de tiempo (modo de operación 8 bits).

Diagrama de tiempo (modo de operación 4 bits)-cuando se alimenta el LCD de 2.7v-4.5v-Si se alimenta con 5v el tiempo es de 230ns.
En el modo de operación de 4 bits, el nible(4 bits) alto es trasmitido.Además notece que cada nible es seguido por un pulso(DE ALTO A BAJO) para habilitar el latch interno de la LCD.

Detalle de comandos de la LCD.

Clear Display:


Instrucción Clear Display.


  • Borra el display y regresa el cursor a la posición inicial (esquina arriba-izquierna).
  • Setea a "0" el contador de direcciones(AC).
  • El tiempo que demora es hacer esta instrucción depende del LCD, según el datasheet, unos demora 1.52ms otors 1.64ms.

Return Home:

Instrucción Return Home.


  • Retorna el Display ala posición inicial (izquierda arriba).
  • El contenido de la DDRAM no cambia .
  • El contador de dirección será "0".
  • (*) es valor que no importa.
  • El tiempo que demora es hacer esta instrucción depende del LCD, según el datasheet, unos demora 1.52ms otors 1.64ms.

Entry mode set:

Instrucción Entry mode Set.


  • Establece la dirección de movimiento del cursor y especifica el cambio de pantalla.
  • Estas operaciones se realizan durante la escritura y lectura de datos.
  • El tiempo que demora es hacer esta instrucción depende del LCD, según el datasheet, unos demora 37us otros 40us.
  • I/D=1 incrementa en 1 la dirección de DDRAM, el cursor o parpadeo se mueve hacia la derecha.
  • I/D=0 decrementa en 1 la dirección de DDRAM, el cursor o parpadeo se mueve hacia la izquierda.
  • Si S(Shifts-desplazamiento)=1 y (I/D)=0, se desplaza todo el display hacia su derecha.
  • Si S=1 y (I/D)=1, se desplaza todo el display hacia su izquierda.
  • Si S=0 , el display no se desplaza.
  • Si S=1, parecerá que el cursor no se mueve, pero la pantalla lo hace. La pantalla no cambia cuando se lee desde DDRAM. Además, escribir o leer en CGRAM no cambia la visualización.

Display on/off control:

Instrucción Display on/off Control.


  • Activa la pantalla (D=1)/ desactiva toda la pantalla (D=0)  pero los datos de la pantalla permanecen en DDRAM. 
  • Enciende / apaga el cursor (C).C=1 el cursor se visualiza,C=0,el cursor no se visualiza.
  • Parpadea el carácter de posición del cursor (B=1).El parpadeo es de 409ms cuando la frecuencoia de oscilación del crystal es de 250Khz.
  • El tiempo que demora es hacer esta instrucción depende del LCD, según el datasheet, unos demora 37us otros 40us.

Cursor or display shift:

Instrucción or Display Shift.

  • Mueve el cursor y desplaza la pantalla sin cambiar los contenidos de DDRAM.
  • (*) son valores que no importan para la configuración.
  • El tiempo que demora es hacer esta instrucción depende del LCD, según el datasheet, unos demora 37us otros 40us.
Shift Function.

Función Set:

Instrucción Función Set.

  • Establece la longitud de los datos de la interfaz (DL). DL=0(la longitud de datos es de 4 bits-DB7-DB4-Cuando se elige esta opción los datos deben enviarce o recibirse dos veces).DL=1(la longitud de datos es de 8 bits-DB7-DB0).
  • El número de líneas de visualización (N),N=0(LCD de 1 linea),N=1(LCD de 2 lineas)  
  • Establece el tamaño del caracteres (F). Realice la función al principio del programa antes de ejecutar cualquier instrucción (a excepción de la bandera de lectura ocupada y la instrucción de dirección). Desde este punto, la instrucción del conjunto de funciones no se puede ejecutar a menos que se cambie la longitud de los datos de la interfaz.
  • (*) son valores que no importan para la configuración.
  • El tiempo que demora es hacer esta instrucción depende del LCD, según el datasheet, unos demora 37us otros 40us.
Función SET.
Configuración de la matriz del caracter.

Set CGRAM address:

Instrucción Set CGRAM address.
  • Establece la dirección CGRAM binaria AAAAAA en el contador de direcciones. 
  • Los datos del CGRAM se envían y se reciben después de esta configuración(realizado por el microcontrolador).
  • El tiempo que demora es hacer esta instrucción depende del LCD, según el datasheet, unos demora 37us otros 40us.

Set DDRAM address.


Instrucción ddram address.

  • Establece la dirección DDRAM.
  • Los datos DDRAM se envían y se reciben después de esta configuración.
  • El tiempo que demora es hacer esta instrucción depende del LCD, según el datasheet, unos demora 37us otros 40us.
  • El valor de AAAAAAA  para un LCD de 1 linea puede ser 00H a 4FH, para LCD de dos lineas puede ser de 00H a 27H para la primera linea y 40H a 67H para la segunda linea. mas adelante se verá para un LCD de 4 lineas o filas.

Read busy flag & address.

Instrucción Read busy flag & address.
  • Lee el indicador de ocupado (BF) que indica que el sistema ahora está operando internamente con una instrucción recibida previamente. Si BF es 1(ocupado), la operación interna está en progreso. La siguiente instruccion no se aceptará hasta que BF se restablezca a 0. Compruebe el estado BF antes de la siguiente operación de escritura. Al mismo tiempo, 
  • se lee el valor del contador de direcciones en binario AAAAAAA. Este contador de direcciones es usado por ambas direcciones, CG y DDRAM, y su valor está determinado por la instrucción anterior. El contenido de la dirección es el mismo que para las instrucciones, configure la dirección CGRAM y la dirección DDRAM.
  • El tiempo que demora es hacer esta instrucción depende del LCD, según el datasheet, unos demora 37us otros 40us o 0 us.

Escribir datos en CGRAM o DDRAM.

Instrucción write data to CGRAM or DDRAM.
  • Escribir datos en CG o DDRAM escribe datos binarios de 8 bits DDDDDDDD en CG o DDRAM.
  • La escritura en CG o DDRAM está determinada por la especificación anterior de la configuración de la dirección CGRAM o DDRAM. Después de una escritura, la dirección se incrementa o disminuye automáticamente en 1 de acuerdo con el modo de entrada. El modo de entrada también determina el cambio de pantalla.

Leer datos de CGRAM o DDRAM.

Instrucción Read data fron CGRAM or DDRAM.
  • Los datos de lectura de CG o DDRAM leen datos binarios de DDDDDDDD de 8 bits de CG o DDRAM.
  • La designación anterior determina si se debe leer CG o DDRAM. Antes de ingresar esta instrucción de lectura, se debe ejecutar la instrucción de conjunto de direcciones CGRAM o DDRAM. Si no se ejecuta, los datos de la primera lectura serán inválidos. Cuando se ejecutan en serie las instrucciones de lectura, los siguientes datos de dirección normalmente se leen a partir de la segunda lectura. Las instrucciones del conjunto de direcciones no necesitan ejecutarse justo antes de esta instrucción de lectura cuando se desplaza el cursor por la instrucción de cambio de cursor (cuando se lee DDRAM). La operación de la instrucción de cambio de cursor es la misma que la instrucción de dirección DDRAM establecida.
  • Después de una lectura, el modo de entrada aumenta o disminuye automáticamente la dirección en 1. Sin embargo, el cambio de pantalla no se ejecuta independientemente del modo de entrada.

Función descriptiva:


Registros

El LCD tiene dos registros de 8 bits, un rgistro de instrucción(IR) y un registro de dato(DR).

IR.

  • El registro IR almacena los  códigos de instrucción, taes como "clear display" ,"cursor shft", "información de la DDRAM" Y CGRAM.

DR.

  • Este registro guarda datos temporales para ser escritos en DDRAM o CGRAM y temporalmente guarda datos para ser leidos de DDRAM o CGRAM.
Según lo dicho anteriormente se puede decir que:
Cuando  la información de la dirección es escrita en IR, el dato es leido y guardado dentro de DR de DDRAM o CGRAM por una operación interna. La transferencia de datos entre el Microcontrolador se completa cuando el Microcontrolador lee el DR, después de leer el dato en DDRAM o CGRAM en la siguiente dirección se envian  a DR para la siguiente lectura del microcontrolador.

Estos dos registros IR y DR pueden ser seleccionado según RS.
RS-Registro de Selección.

Busy Flag(BF)

  • BF=1, LCD ocupado, el LCD esta realizando un modo de operación interna. cualquier siguiente  instrucción no será aceptada.
  • BF=0,el LCD  esta apta para la siguiente instrucción, el LCD  no esta ocupado.
Secuencia de tiempo de revisión del flag Busy(modo 8 bits).
  • El HD44780U puede ser conectado a un microcontrolador usado solo 4 bits(para la transferencia de datos o direcciones).
  • Si el puerto de E / S tiene suficientes bits, 8 bits los datos pueden ser transferidos.
  • De lo contrario, una transferencia de datos debe realizarse en dos operaciones para datos de 4 bits. En este caso, la secuencia de tiempo se vuelve algo compleja.
Secuencia de tiempo de revisión del flag Busy(modo 4 bits).

Contador de direcciones(AC)

Asigna direcciones a DDRAM y CGRAM.
Después de escribir a DDRAM o CGRAM el contador de dirección incrementa en 1.
Después de leer de DDRAM o CGRAM el contador de dirección decrementa en 1.
El contenido de AC son luego salida de DB0 a DB6 con RS=0 y R/~W=1(ver tabla 1).
De la imagen se puede ver que la información de la dirección es enviada de IR a AC y esta selecciona DDRAM o CGRAM .

Address Conter

DDRAM(Display Data Ram)

La memoria RAM de datos de visualización (DDRAM) almacena datos de visualización representados en códigos de caracteres de 8 bits. Su capacidad extendida es de 80 X 8 bits, u 80 caracteres. El área en la RAM de datos de visualización (DDRAM) que no se utiliza para la visualización se puede utilizar como RAM de datos generales. Así que lo que envíe en el DDRAM se muestra en la pantalla LCD. Para pantallas LCD como 1 × 16, solo se ven 16 caracteres, por lo que todo lo que escriba después de 16 caracteres se escribe en DDRAM pero el usuario no lo puede ver.

Caso1-Display de 1 linea.


LCD DE 20X1.
Direcciones de DDRAM usado en LCD de 1 linea o fila.

Caso2-Display de 2 lineas.


LCD DE 20X2.
as
Direcciones de DDRAM usado en LCD de 2 lineas.

Caso3-Display de 4 lineas.

LCD DE 20X4.

Direcciones de DDRAM usado en LCD de 4 lineas.


La direcciones de esta DDRAM son tomadas de un LCD DMC16433 de marca Optrex. pero que tiene el chip HD4478.

El máximo número de columnas que puede tener un LCD es de 40, pueden haber LCD de 1x40,2x40,4x40, por ejemplo aqui podemos ver un LCD DE 1(fila)X40(columnas).
LCD DE 1X40.

Es posible también encontrar las direcciones de DDRAM  de la siguientes maneras:
Direcciones de DDRAM usado en LCD de 4 lineas.
   4x40
Creación de patrones

fuentes:

No hay comentarios:

Publicar un comentario

Uso del firmware original de la grabadora USBasp AVR en MX-USBASP (clon chino)

Te vendieron un USBisp pensado que es un USBasp?? Hace 2 meses compré un "USBasp" fui a probarlo y no funcionó....pensé me estafar...