Autor Tema: Refresco GLCD  (Leído 1820 veces)

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

Desconectado solapower

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 209
Refresco GLCD
« en: 22 de Enero de 2015, 15:58:21 »
Hola compañeros.

Tengo un diseño que muestra valores tipo float en una pantalla GLCD 64x128,utilizo los drivers HDM54GS12. y GRAPHICS.c y CCSC
como lenguaje.
El inconveniente que tengo es que ese valor lo muestro en una fuente de mayor tamaño y al actualizarse seproduce ese efecto de
borrado y vuelta a llenar el espacio con los nuevos caracteres y esteticamente no me gusta.
He visto que en los modernos voltimetros solo se mueve la cifra,o cifras, que tienen variacion.

En consecuencia la pregunta por la que solicito vuestra ayuda es: Cual es la manera correcta de gestionar esa visualización ?

Un saludo para todos y grácias de antemano.


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Refresco GLCD
« Respuesta #1 en: 22 de Enero de 2015, 18:46:21 »
Si es como un LCD ( me refiero al llenado de la memoria ) es decir especificar valores de coordenadas de inicio y fin, y luego escribir, entonces no deberias por que borrar. Solo escribir 0 o 1. Y deberia ser mas rapido ya que tenes un solo color.

Lo estas haciendo a suficiente velocidad ? no se que es un HDM54GS12, busque por google sin ningun resultado.

Citar
He visto que en los modernos voltimetros solo se mueve la cifra,o cifras, que tienen variacion.

Realmente lo hacen? o parece que eso ocurre ? veo mucho mas complejo hacer eso que refrescar todo el display ademas que son como de segmentos y no graficos.

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Refresco GLCD
« Respuesta #2 en: 22 de Enero de 2015, 20:11:52 »
Yo suelo emplear dos variables, la actual y la antigua, si son iguales, no actualizo la pantalla de este modo no se produce el desagradable parpadeo.
si aun quieres afinar más puedes hacer lo mismo numero a numero y solo actualizar el numero que cambia.
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado solapower

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 209
Re: Refresco GLCD
« Respuesta #3 en: 23 de Enero de 2015, 09:49:59 »
Gracias QIQE
La opción con las dos variables ya la había contemplado, si eran diferentes pintaba un rectángulo lleno y después imprimía el nuevo valor.
Se me ocurre hacer la prueba imprimiendo en negativo lo que antes era positivo y luego imprimir el nuevo valor,probaré....

KILLERJC gracias también
Quizás esa es la opción mas presentable,lo único es que tendre que descomponer el valor en cada uno de sus
dígitos y luego comparar dígito a dígito.
Está trabajando a 20MHz el PIC.
Ignoro si realmente refrescan ese dígito o lo parece pero el efecto es, a mi parecer, real

Perdón,era HDM64GS12.c la libreria que uso, se me movió la cifras

Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Refresco GLCD
« Respuesta #4 en: 23 de Enero de 2015, 19:16:51 »
Vi un ejemplo similar y le ocurre exactamente lo mismo que estas experimentando ( al menos por lo que veo en el video )

http://gabiallen91.blogspot.com.ar/2012/01/lcd-grafico.html

Mejorarlo puede ser ya que hay un par de delay de mas, tanto en la escritura como en la lectura

Código: [Seleccionar]
   output_d(data);            // Put the data on the port
   delay_cycles(1);
   output_high(GLCD_E);       // Pulse the enable pin
   delay_cycles(5);
   output_low(GLCD_E);

Si te fijas introduce un par de ciclos... en especial esos 5 ciclos (En lectura creo que son 4). Segun el dataseet de un controlador  KS0108 ( que esa libreria sirve para este controlador ) el ciclo minimo de E es de 1000ns o 1us.
Vos estarias modificando las salidas a 0.2us , Pero lo que se muestra ahi desde el high al low es medio ciclo 0.5s. Asi que imagino que cambiando delay_cycles(5); por delay_cycles(1); podria ser mas rapido.

Igual me extraña por que para refrescar toda la pantalla seria un minimo de 8.7ms o 10ms ( 100Hz ) no se que tan imperceptible al ojo sera, pero esto es TODA la pantalla.

Desconectado solapower

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 209
Re: Refresco GLCD
« Respuesta #5 en: 03 de Febrero de 2015, 06:52:36 »
Hola a todos.
Perdón por la demora pero he estado ocupado.

KILLERJC. Como bién dices en el video se observa el efecto que comento,lo que pasa es que al ser la font pequeña
se disimula bastante,además cambian las unidades y los decimales cada vez con lo cual tiene que escribir los cinco
caracteres (contando la coma) cada vez.
Lo que hace él ,que yo no he probado todavía,es imprimir el valor anterior en negativo y luego imprimir el nuevo en
positivo.
El efecto (defecto) supongo que lo noto mas porque empleo una font que ocupa casi la mitad de la pantalla, es decir
"pa que se vea bién".

Saludos y grácias.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Refresco GLCD
« Respuesta #6 en: 03 de Febrero de 2015, 08:49:18 »
para esto se usa mejor un buffer y actualizas ese buffer al glcd cada X tiempo.

Se trata de lo siguiente, tienes un buffer de 128x64 por ejemplo, en ese haces las modificaciones debidas, y cada X tiempo (el suficiente para que el ojo humano no lo detecte) subes el buffer completo al GLCD. Es bastante mas rapido, mas sencillo, el unico inconveniente es que necesitas buena cantidad de RAM. Por ahi hay un post de Suky explicandolo, pero ahora mismo no recuerdo bien.

Desconectado solapower

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 209
Re: Refresco GLCD
« Respuesta #7 en: 09 de Febrero de 2015, 14:02:59 »
Hola a todos.
Ya he solucionado el tema del efecto nefasto de parpadeo.
Yo para enmascarar la lectura anterior pintaba un rectángulo que ocupaba el espacio
destinado a esa lectura y seguidamente escribía la lectura nueva, error!!!
Si se escribe en negativo lo que antes era positivo y seguidamente la nueva lectura el efecto es
el que debería ser, es decir con un parpadeo que se manifiesta solo en el dígito/os que cambian.

Grácias por vuestros comentarios de ayuda.

Salud.