Autor Tema: Uso de Pantallas LCD 20*4 -PicBasic Pro-  (Leído 6111 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado siniestro

  • PIC10
  • *
  • Mensajes: 44
Uso de Pantallas LCD 20*4 -PicBasic Pro-
« en: 26 de Noviembre de 2014, 16:51:51 »
Hace algun tiempo me decidi iniciar en la programacion de los PIC, llego el momento en que debí utilizar una pantalla LCD de 16*2 , todo me fué muy sencillo gracias a muchos tutoriales en la red, incluyendo esta misma página, pero se llegó el siguiente paso en el cual por un proyecto de la Universidad necesité usar una pantalla de 20*4, busque mucho por la red y la verdad yo no encontré mucha informacion sobre el uso, que aunque es igual a las LCD de dos filas por 16 caracteres, pues basicamente se usan las mismas intrucciones, sin embargo mi dificultad radicó en que no sabia como mover el cursor en la pantalla, generalmente se usan las siguientes instrucciones:
Citar
LCDOUT $fe, 1,"invernadero Konoha"," ",1
LCDOUT $fe, $C0,"Temp:",#Temp,"C    Rh:",#Rh,"%"

Hasta ahi todo bie, todo era COPY AND PASTE sin saber porque se escribian ciertas cosas pues en ningun lado encontré una descripcion completa, leyendo poco a poco encontre por fin la respuesta a mis dudas y les comparto lo siguiente:

La mayoria de las LCD que usamos y que son alfanumericas, usan controladores de marca Hitachi, siendo el mas usado el HITACHI 44780, siendo la version de LCD paralela la que usa la mayoria de personas que se inicia en la programacion.  Se controlan por 8 hilos o lineas que es por donde se mandan los comandos, sin embargo tienen la posibilidad de tambien trabajar usando solamente 4 hilos para el envio de datos (a estos hay que sumar los pines de alimentacion, ENABLE, R/S, contraste), los pines estan estandarizados siendo la configuracion mas comun la que se verá en la imagen adjunta.


No extenderé mi explicacion mas aya de lo dicho pues me estoy saliendo del direccionamiento del cursor en las pantallas de 20*4.  Las LCD son capaces de recibir comandos que ya estan definidos dentro de su memoria, vemos que usan el signo de dolar $ lo cual en PBP nos indica que se esta usando notacion Hexadecimal , por lo tanto podemos considerar que enviando $FE estamos enviando el numero 254 a la pantalla, que en nuestro caso indicará que se esta por mandar un comando, luego vemos que se envia un 1, lo cual significa que la accion sera, limpiar el cursor y desplazar el cursor a la posicion 0, los comandos tambien estaran en una imagen adjunta.  Si observamos la imagen de los comandos, vemos que en el caso de la segunda linea el Hex $C0 lo que hace es enviar ese valor que convertido en decimal es 192, pero porque 192?

Si vemos en la tabla de comandos, observamos la instruccion que permite movernos dentro de las posiciones de memoria DDRAM que son las posiciones de visualizacion de caracteres, para ello, la explicacion de la imagen dice que se envia 128+direccion, la direccion es la posicion del caracter dentro de la pantalla, adjunto tambien se encuentra la imagen correspondiente tanto a la pantalla de 16*2 como la de 20*4, en el caso de la primera, vemos que la primera posicion de la 2da linea corresponde a la direccion 64 por lo que podemos decir que para mover el cursor ahi podemos enviar 128+64=192 esto seria en notacion decimal por lo tanto:
Código: [Seleccionar]
LCDOUT $fe, 1,"invernadero Konoha"," ",1
LCDOUT $fe, $C0,"Temp:",#Temp,"C    Rh:",#Rh,"%"

seria igual a mandar:

Código: [Seleccionar]
LCDOUT 254, 1,"invernadero Konoha"," ",1
LCDOUT 254, 192,"Temp:",#Temp,"C    Rh:",#Rh,"%"

Por lo que para mover el cursor a cualquier linea del LCD seria sumamente facil conociendo la posicion de cada caracter dentro de la memoria DDRAM del LCD, obviamente para programar se deben incluir todas las demas lineas de codigo como los DEFINE:

Código: [Seleccionar]
'definicion de pines para el display LCD
DEFINE LCD_DREG PORTD 'define el puerto a usar para el LCD
DEFINE LCD_DBIT 4     'define el uso de solo 4 bits de direccion 7-6-5-4
DEFINE LCD_RSREG PORTD'UTILIZAR EL REGISTRO  DE CONTROL/DATOS EN EL PUERTO D
DEFINE LCD_RSBIT 2    'Define cual pin sera el pin R/s del display
DEFINE LCD_EREG PORTD 'UTILIZAR EL ENABLE EN EL PUERTO D
DEFINE LCD_EBIT 3     'Define Pin del puerto para el Enable del LCD
DEFINE LCD_BITS 4
DEFINE LCD_LINES 4    'Define numero de lineas del Display

LOOP:

LCDOUT $fe, 1,"Linea 1"
LCDOUT $fe, $C0,"Linea 2"
LCDOUT $fe, $94,"Linea 3"
LCDOUT $fe, $D4,"Linea 4"

GOTO LOOP

Espero que esta informacion sea de ayuda, la comparto aqui pues he recibido mucha ayuda de muchas personas en este foro y quiero retribuir a la comunidad en algo, si en algo me equivoqué pido disculpas y si me lo indican lo podria corregir, o lo comentan abajo que toda la informacion es util, yo traté de condensar lo que he aprendido en pocas lineas y que sea rapido de leer.  Gracias
P.S. No sean duros conmigo, tambien estoy aprendiendo  8) (me ubiese gustado poner las imagenes entre el texto pero no se como hacerlo
« Última modificación: 29 de Noviembre de 2014, 16:48:40 por siniestro »
Saber de todo un poco, sin ser experto en nada (una filosofia extraña)

Desconectado Daikataro

  • PIC10
  • *
  • Mensajes: 22
Re: Uso de Pantallas LCD 20*4
« Respuesta #1 en: 27 de Noviembre de 2014, 23:15:27 »
Muchas gracias por el dato, y aquí depende mucho del compilador que estés usando. En mi caso (Pic Simulator IDE) existe la instrucción dedicada "LcdlineXhome" donde X es la línea donde queramos colocar el cursor, así si es de 20x4 tendríamos de la 1 a la 4 para elegir.

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3549
Re: Uso de Pantallas LCD 20*4
« Respuesta #2 en: 28 de Noviembre de 2014, 05:36:39 »
Gracias por la info, no sabia de ese detalle.
Saludos desde Granada, España.

Desconectado siniestro

  • PIC10
  • *
  • Mensajes: 44
Re: Uso de Pantallas LCD 20*4 -PicBasic Pro-
« Respuesta #3 en: 29 de Noviembre de 2014, 16:50:39 »
Muchas gracias por el dato, y aquí depende mucho del compilador que estés usando. En mi caso (Pic Simulator IDE) existe la instrucción dedicada "LcdlineXhome" donde X es la línea donde queramos colocar el cursor, así si es de 20x4 tendríamos de la 1 a la 4 para elegir.

Yo uso el PicBasi Pro, ya lo coloqué en el titulo del Post

Gracias por la info, no sabia de ese detalle.

 :-/ Si, la verdad que no habia mucha informacion en la red, por eso lo comparto aqui precisamente que es de donde he obtenido mucho apoyo. .

Saber de todo un poco, sin ser experto en nada (una filosofia extraña)


 

anything