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

serLCD con display LCD GDM2004D y RT162-7.

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.

Diplay LCD GDM2004D

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.

Estos dos componentes fueron comprados por internet con los enlaces que detallo a continuación, debo aclarar que esta empresa no tiene relación conmigo.

Display 4 X 20:
https://www.sparkfun.com/products/256

Adaptador serial a paralelo:
https://www.sparkfun.com/products/258


Primero con el adaptador serial soldado, y la segunda imágen con el display de frente:
display GDM2004D y serLCDdisplay LCD GDM2004D

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.
ajuste del contraste lcd



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.

 

Diplay LCD RT162-7

Tambien probé el convertidor serLCD con el diplay LCD RT162-7, que tiene 2 lineas de 16 caracteres cada una.
Este display es muy común en tiendas por internet, es incómodo por sus reducidas líneas,
pero si no necesitamos más nos puede funcionar.
display LCD RT162-7

Otros adaptadores o convertidores de serial a paralelo puede utilizar diferencias a la hora de comunicarse con los display, pero tambien estos datos le pueden ser de utilidad.
Las pantallas LCD que utilizan HD44780 o KS0066U son 100% compatibles, pero hay que verificar que utilicen el mismo orden en sus pines o patillas.
Estas pantallas o displays funcionan con datos de 8 bits pero tienen un modo de operación a 4 bits, que es el que utiliza este convertidor.
El adaptador o convertidor serLCD es un PIC programado para realizar esta función, incluso el fabricante ha compartido el programa o firmware.

Varios display que he visto utilizan hasta las conexiones iguales,
el orden de los pines es indicado en sus hojas de datos así:

PinGDM2004DRT162-72004AJHD162ADescripción:
1VssGNDVssVssnegativo o tierra
2VDDVDDVDDVDDpositivo lógico +5V
3V0V0V0V0voltaje LCD (contraste)
4RSRSRSRSRegister select
(1:datos 0:instrucción)
5R/WR/WR/WR/W1:lectura 0:escritura
6EEEEHabilitada lectura (o escritura)
7-14DB0-DB7DB0-DB7DB0-DB7DB0-DB7Bus de datos
15LED+BL1BLALEDAPositivo leds (backlight)
16LED-BL2BLKLEDKNegativo leds (backlight)

En operación con 4 bits se utilizan los pines 11,12,13 y 14 (DB4,DB5,DB6,DB7).

En los leds de iluminación (backlight) el negativo o cátodo(K) se conecta al mismo negativo lógico o tierra y el positivo o ánodo (A) puede ser conectado a 5 voltios para el máximo brillo, el convertidor serLCD puede reducir la intensidad de la luz mediante pulsos PWM.

El display JHD162A utiliza el circuito integrado de control SPLC780D, que según las especificaciones recibe las mismas instrucciones y del mismo modo que el HD44780 o el KS0066U, aparentemente solo es diferente en los patrones de los caracteres especiales, que sería una ventaja pero yo aún no lo he utilizado.


Conectando el convertidor serLCD a la Rapsberry pi:

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.


serlcd conectado a Raspberry pi


Conectando el convertidor serLCD a la PC por puerto serial RS-232:

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:


serlcd conectado a Pc via RS-232pines de c945 y 2N2222

Comunicación serial serLCD.


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.

Ejemplo de comunicación con Python

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


Recuerde que debe tener el módulo de Python pyserial instalado   apt-get install python-serial
Copiamos el código en un archivo, por ejemplo display.py
En Linux necesitamos privilegios (sudo python display.py en Ubuntu)
o le damos privilegios al puerto com a utilizar,
chmod 777 /dev/ttyS0
En mi caso /dev/ttyS0, en la RaspBerry pi es /dev/ttyAMA0,
si utiliza un adaptador USB a serial debe de averiguar el puerto (Puede ser /dev/ttyUSB0)

Información útil: http://www.iearobotics.com/proyectos/cuadernos/ct11/ct11.html

Mi puerto ttyS0 (COM1) ya tiene los privilegios al inicio,
info: http://www.ubuntu-es.org/node/169052#.UXSe_NexgU0



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

TAG: LCD GDM2004D, RT162-7, serLCD conectado a raspberry pi o pc serial RS232 utilizando python. Tambien HD44780 o compatibles.

TI2-CAW

.Arriba.


.Menú: Proyectos de electronica.

proyectos de electronica