Proyecto Electronico .com
Diseños con leds, alarmas, compuertas lógicas, antenas y proyectos de electrónica en general
serLCD conectando GDM2004D y RT162-7 a raspberry pi o pc serial. HD44780
Estos tipos de display son ideales para nuestros proyectos cuando no podemos perder mucho tiempo para armar matrices de puntos y segmentos LCD para formar nuestras letras o números. Facilitando la tarea para poder enfocarnos es las cosas más difíciles.
El display LCD GDM2004D es de 4 lineas, con 20 caracteres cada una, yo la utilizo para proyectos con Raspberry pi y con el lenguaje python, la mayoría de pruebas las realizo
con mi PC ya que se me hace más cómodo.
Debido a que el display GDM2004D es de comunicación en paralelo debemos utilizar un convertidor de serial a paralelo para no gastar todos los pines de comunicación necesarios.
En esta ocasión utilizo el serLCD de Spark fun® versión 2.5.
Al final solo entran 3 cables: negativo, positivo y datos.
Primero con el adaptador serial soldado, y la segunda imágen con el display de frente:
El ajuste de contraste del LCD normalmente queda muy cerca del final hacia la derecha,
y se logran ver los caracteres en poco recorrido del potenciómetro, lo que puede confundir.
El fabricante luego sacó la versión serial, que no es más que lo anterior pero en una sola tarjeta.
yo no lo he probado, debiera ser igual
También he visto displays similares a muy buen precio digitando: 20x4 lcd hd44780 en el buscador de Ebay.com.
Además se pueden encontrar en otras páginas de ventas por internet como Amazon o AliExpress.
Varios display que he visto utilizan hasta las conexiones iguales,
el orden de los pines es indicado en sus hojas de datos así:
Pin | GDM2004D | RT162-7 | 2004A | JHD162A | Descripción: |
---|---|---|---|---|---|
1 | Vss | GND | Vss | Vss | negativo o tierra |
2 | VDD | VDD | VDD | VDD | positivo lógico +5V |
3 | V0 | V0 | V0 | V0 | voltaje LCD (contraste) |
4 | RS | RS | RS | RS | Register select (1:datos 0:instrucción) |
5 | R/W | R/W | R/W | R/W | 1:lectura 0:escritura |
6 | E | E | E | E | Habilitada lectura (o escritura) |
7-14 | DB0-DB7 | DB0-DB7 | DB0-DB7 | DB0-DB7 | Bus de datos |
15 | LED+ | BL1 | BLA | LEDA | Positivo leds (backlight) |
16 | LED- | BL2 | BLK | LEDK | Negativo leds (backlight) |
Utilizando los pines reservados para comunicación serial (UART) en la Raspberry pi es bastante sencillo, se conecta la salida (UART TXD) a la entrada (RX) del adaptador serLCD. Y los pines de tierra y alimentación.
Para enviar información (con linux) nos referimos al puerto como /dev/ttyAMA0.
Para hacer pruebas desde nuestra computadora o PC. podemos diseñar un circuito muy sencillo y así poder utilizar un puerto serial RS232.
Con un transistor PNP y pocos componentes:
El módulo serLCD pasa casi todos los datos directamente al display como caracteres (bytes o datos),
las excepciónes son los bytes 124(0x7C) y 254(0xFE) que son utilizados para indicar al módulo que sigue un comando.
Comandos de 124(0x7C)
Estos comandos son propios del PIC o sea determinados por el fabricante del adaptador serLCD:
Set display
3 = Lineas de 20 letras
4 = Lineas de 16 letras
5 = Display de 4 lineas
6 = Display de 2 lineas
Splash screen:
9 = activa o desactiva pantalla de inicio.
10 = Guarda 2 primeras lineas para pantalla de inicio.
Cambiar velocidad del puerto (Baudios)
11 = 2400
12 = 4800
13 = 9600
14 = 14400
15 = 19200
16 = 38400
Si se pierde comunicación con el puerto puede enviar el caracter 18 a 9600 baudios
durante la pantalla de inicio (splash screen) para restaurar la velocidad a 9600.
Luz de fondo: 128 a 157
128 = apagada
140 = 40%
150 = 73%
157 = 100%
Comandos de 254(0xFE)
Estos son comandos propios del display y se puede ver documentación en su hoja de datos.
aplicable a todas las pantallas que utilizan HD44780, KS0066U
0x1 = Limpia la pantalla
0x08 = apaga la pantalla
0x0C = enciende la pantalla
0x0D = cursor cuadro parpadeante
0x0E = cursor linea baja
0x0C = restaura sin cursor
0x10 = mueve cursor a la izquierda (1)
0x14 = mueve cursor a la derecha (1)
0x18 = desplazamiento a la izquierda (scroll)
0x1C = desplazamiento a la derecha (scroll)
0x80+ set cursor position
16 caracteres:
linea 1: +0 a 15
linea 2: +64 a 79
linea 3: +16 a 31
linea 4: +80 a 95
20 caracteres:
linea 1: +0 a 19
linea 2: +64 a 83
linea 3: +20 a 39
linea 4: +84 a 103
Para enviar datos a estos dispositivos normalmente lo hago desde el puerto serial de mi computadora, pensando luego en implementarlos a la Raspberry-pi, aunque no soy gran programador en el lenguaje Python encuentro que es el más fácil para estos fines, alguien que tenga mayores conocimientos puede en base a esta información adaptarla a su ncesidad.
Vamos a probar con el módulo de Python pySerial. http://pyserial.sourceforge.net/
Utilizando Kubuntu 14.04 y Python 2.7.6
#!/usr/bin/python
#
import serial
ser = serial.Serial('/dev/ttyS0', 9600, timeout=2)
print ser # Despliega datos del puerto serial
# define tipo de display
ser.write(chr(0x7C)) # Comando
ser.write(chr(3)) # 3:20 caracteres 4:16 caracteres
ser.write(chr(0x7C)) # Comando
ser.write(chr(5)) # 5:4 lineas 6:2 lineas
ser.write(chr(0x7C)) # Comando
ser.write(chr(0x0C)) # display on
# ajusta brillo leds
ser.write(chr(0x7C)) # Comando
ser.write(chr(144)) # 128 a 157 128:nada 143:medio 157:full
# limpiar display
ser.write(chr(0xFE)) # Comando
ser.write(chr(1)) #
# posición de cursor linea 1:128 2:192 3:148 4:212
ser.write(chr(0xFE)) # Comando
ser.write(chr(128)) # linea+chr
# escribir cadena de caracteres normales
ser.write("proyectoelectronico.com")
ser.close() # cierra puerto serial
chmod 777 /dev/ttyS0
En mi caso /dev/ttyS0, en la RaspBerry pi es /dev/ttyAMA0,
Yo hice 2 programas en python, tanto del display de 16X2 y el de 20X4 que le pueden ser útiles
lcd-16x2.py
lcd-20x4.py
El código no está optimizado pero funciona bien.
Y tratando que se entienda bien cada paso.
Al realizar nuestro programa utilizando estas funciones con puerto serial,
no olvidemos cerrarlo con la función ser_close()
La mayoría de los datos obtenidos de estos manuales:
SerLCD_V2_5.PDF
GDM2004D.pdf
HD44780.pdf
TI2-CAW
proyectos de electronica