Continuamos este estudio comparativo del 6502 vs el 6510 conectando un LCD de 16 caracteres x 2 líneas y programándolo con un mensaje. Vamos a estudiar cómo conectar un VIA 6522 y un CIA 6526 al lcd HD4470U de Hitachi y utilizando nuestro 6502 y nuestro 6510 mostrar el texto “OsoLabs” en el display en dos maquetas breadboard simultáneas.
El LCD Hitachi HD44780U
Nuestro principal display es el LCD de Hitachi el mismo posee el siguiente diagrama esquemático.
Este LCD tiene 16 caracteres que se pueden mostrar en dos líneas y cada carácter puede ser de 5×8 o 5×10 puntos. Posee internamente el dibujo o font de varios tipos de caracteres que se eligen con valores correspondientes mayormente al ASCII. Estos caracteres incluyen el alfabeto tradicional, caracteres japoneses y símbolos. El LCD puede ser controlado por un procesador de 4 bits o uno de 8 bits, nosotros lo utilizaremos en modo 8 bits por estar usando la línea 6502/6510.
En cuanto a velocidad es compatible con un bus de datos de hasta 2Mhz, nosotros vamos a estar utilizando hasta 1Mhz el máximo de velocidad de nuestro 6510.
PinOut del LCD
El siguiente esquema muestra y explica el pin-out
VSS (Ground): conexión a tierra de nuestro LCD
VDD: conexión a 5 Volts +
VE: Pin de contraste, se conecta normalmente a un potenciómetro en su pin de polo y el otro pin va directo a tierra.
Register Select RS: Nos permite elegir si escribir al Instruction Register usando el valor 0 o al Data Register usando el valor 1
Read/Write : Permite escribir si el valor es cero y leer si el valor es 1
Enable: Comienza la lectura o escritura sacando los pines DB7 a DB0 de su modo de triestado.
DB7 a DB0: Bus datos para escribir o leer. En el modo de operación de 4 bits sólo se usando los pines DB7 a DB4
A : Ánodo (pin positivo +5 Volts) para encender la luz de backlight
K: Cátodo (pin negativo 0 Volts) para encender la luz de backlight
Cómo leer y cómo escribir nuestro LCD
Hay tres pines que funcionan para poder leer o escribir los registros internos y la pantalla de nuestro LCD, estos son RS, RW y E. En la siguiente Tabla especificamos cómo realizar cada operación.
RS = 0 /R/W = 0 E=1 permiten enviar una instrucción al LCD, escribiendo el instruction register
RS = 1 /R/W = 0 E=1 permiten enviar datos al LCD, escribiendo el data register.
Generalmente el valor del pin Enable se usa como un Toggle o pulso y este se dispara cuando ya tengo todos los datos de los demás pines (RS, RW y DB7 a DB0) estables y con valores correctos.
Instrucciones internas del LCD
El LCD posee instrucciones internas que sirven para desde limpiar la pantalla o elegir el ancho de los caracteres hasta encender o apagar el display, las mismas estan explicadas en la siguiente tabla:
El formato de estas instrucciones es:
Valor del pin RS,
Valor del pin /R/W,
Una cantidad de ceros y luego un 1 para identificar la instrucción en los pines DB7 a DB0,
El resto después del 1 que identifica la instrucción, son los parámetros de la misma.
Por ejemplo la instrucción Display on/off control que controla tres funciones de nuestros display está codificada de la siguiente forma:
RS | /R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B |
El valor RS es cero para indicar que estamos escribiendo al instruction register del LCD
El valor /R/W es cero para indicar que es una escritura
La instrucción está indicada por los pines DB7 a DB3 y es 00001
El pin DB2 es un parámetro que indica si prender o apagar el display
El pin DB1 es un parámetro que indica si está prendido o no el cursor
El pin DB0 es un parámetro que indica si el cursor parpadea o no
Si quisiéramos que el display esté prendido, mostrando el cursor y que este no parpadee enviaríamos la siguiente secuencia
RS | /R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
Inicializar nuestro LCD
Para poder empezar a enviar letras a nuestro LCD primero debemos inicializarlo, el datasheet nos indica una secuencia de inicialización que vamos a analizar.
El primer paso es conectar al suministro eléctrico de 5 volts a nuestro LCD, para esto no necesitamos ninguna instrucción solo conectar correctamente los cables.
El segundo paso es enviar la instrucción Function Set que en este caso elige la operación del display como 8 bits (usa todos los pines de DB7 a DB0), una sóla línea y formas de caracteres de 5×8 puntos.
RS | /R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | N/A | N/A |
El tercer paso es enviar la instrucción Display on/off control donde indicamos prender el display, mostrar el curso y que este no parpadee.
RS | /R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
El cuarto paso y último paso en la inicialización es enviar la instrucción Entry Mode Set para decidir cómo es que vamos a mostrar los caracteres en este caso decidimos que después de mostrar una letra corra el cursor un lugar a la derecha
RS | /R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
Finalmente ya estamos listos para escribir nuestra primera letra.
Escribiendo una letra en nuestro LCD
Al tener preparado ya nuestro LCD para recibir nuestra primera letra, el mismo espera la información en código ascii explicitado en los pines del DB7 al DB0 por ejemplo, a continuación la tabla de caracteres del lcd.
Para escribir la letra H mayúscula por ejemplo vemos que la combinación es 0100 1000 com lo que deberemos enviar estos valores:
RS | /R/W | DB7 | DB6 | DB5 | DB4 | DB3 | DB2 | DB1 | DB0 |
1 | 0 | 0 | 01 | 0 | 0 | 1 | 0 | 0 | 0 |
El valor RS es 1 para indicar que estamos escribiendo al data register del LCD
El valor /R/W es 0 para indicar que es una escritura
En los pines DB7 a DB0 espera el dato a escribir en memoria y es 01001000
Cómo funciona el CIA en la Commodore 64
La Commodore 64 posee dos CIA 6526 pero ninguno está conectado a un LCD, utilizando al chip VIC2 y un modulador de RF la Commodore puede comunicarse con monitores con su salida de video y a televisores con su salida RF, en una futura entrega vamos a desarrollar el funcionamiento del chip VIC2.
Estudio visual
Para poder estudiar visualmente como conectar el LCD a nuestros procesadores y CIAs/VIAs y como programarlo en assembler para mostrar un mensaje les dejo esta video que complementa al artículo.
LCD con 6510/CIA y 6502/VIA – 6502 vs 6510 Parte 9
Referencias
A continuación les dejo algunos links donde profundizar el tema:
VIDEOS
Video de la serie 6502 vs 6510 Parte 9 – LCD con 6510/CIA y 6502/VIA
LCD con 6510/CIA y 6502/VIA – 6502 vs 6510 Parte 9
Aquí tienen acceso a toda la serie:
6502 vs 6510 estudio detallado y comparación
Aqui tienen acceso a todos los artículos publicados en Espacio Tec
Artículos en la serie C64 a Fondo
A continuación les dejo los links a los artículos anteriores de la serie
Parte 3 – Codeando a Mano la Primera Instrucción de Código Máquina
Parte 4 – Primer Programa desde EEPROM
Parte 5 – I/O Pins del Procesador
Parte 7 – VIA MOS 652 Interfaz con periféricos
Parte 8 – MOS 6526 CIA Interfaz con periféricos reloaded
PAPERS
HD44780U (LCD-II), (Dot Matrix Liquid Crystal Display Controller/Driver)
Y como siempre la serie de Ben Eater del 6502
Build a 6502 computer | Ben Eater
Todos los ejemplos de código de los videos los pueden encontrar en: