Autor Tema: Evitar parpadeo al borrar una LCD  (Leído 5630 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado jorge_vallejos

  • PIC10
  • *
  • Mensajes: 26
Evitar parpadeo al borrar una LCD
« en: 19 de Agosto de 2015, 01:13:43 »
Hola a todos, he notado que al borrar la LCD se produce un parpadeo, la forma que he visto para que no se note es que ponen un delay, pero dicho delay detiene por cierto tiempo la ejecución del programa, conocen alguna forma de limpiar la LCD sin que se produzca parpadeo y evitando detener la ejecución del programa?.
Me sería de muchísima utilidad.

Un ejemplo del problema es el siguiente:

Código: [Seleccionar]
lcd_putc("\f");
printf(lcd_putc,"Temp= %.2f",temperatura);
delay_ms(1000);

Gracias a todos!! Un cordial saludo de mi parte!!  :-/

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Evitar parpadeo al borrar una LCD
« Respuesta #1 en: 19 de Agosto de 2015, 05:58:03 »
El parpadeo sería menor si sólo actualizases los números que cambian, de tal manera que la primera vez pones tu temp=... Y después con en gotoxy cambias sólo el número necesario.
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Evitar parpadeo al borrar una LCD
« Respuesta #2 en: 19 de Agosto de 2015, 11:46:42 »
Y para evitar que se detenga el programa no te queda otra que usar interrupciones.

Desconectado jorge_vallejos

  • PIC10
  • *
  • Mensajes: 26
Re: Evitar parpadeo al borrar una LCD
« Respuesta #3 en: 19 de Agosto de 2015, 11:53:00 »
Gracias por sus respuestas! En el caso de usar interrupciones como sería? Algún ejemplo para entender  :o

Encontré algo para Arduino, lo encontré en esta página: http://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-arduino , pero no se como hacerlo para PIC:

Código: [Seleccionar]
unsigned long tAntes = 0;
unsigned long tAhora = 0;
unsigned long tEjecucion = 1000;

void loop()
{
  tAhora = millis();

  if( tAhora - tAntes >= tEjecucion )
  {
    tAntes = tAhora;

    lcd.setCursor(0,1);
    lcd.print(tAhora/1000);
  }
}

Saludos!

Desconectado jorge_vallejos

  • PIC10
  • *
  • Mensajes: 26
Re: Evitar parpadeo al borrar una LCD
« Respuesta #4 en: 19 de Agosto de 2015, 11:54:56 »
El parpadeo sería menor si sólo actualizases los números que cambian, de tal manera que la primera vez pones tu temp=... Y después con en gotoxy cambias sólo el número necesario.

Gracias QIQE, voy a tomarlo en consideración!

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Evitar parpadeo al borrar una LCD
« Respuesta #5 en: 19 de Agosto de 2015, 12:06:07 »
ejemplo de un timer con CCS:

https://www.ccsinfo.com/faq.php?page=ccs_timer0_interrupt

El tema del arduino es que usa la funcion millis, eso toma el tiempo de un timer que esta corriendo continuamente, si la resta del valor nuevo con el viejo supera el tiempo establecido, entonces ejecuta.
En el PIC uno puede realizar lo mismo, no se que PCI estas usando pero si es un PIC con timer de 16 bits es mas facil ya que te permite contar tiempos mas largos.
Sino directamente usas el timer para que cada cierto tiempo produzca una interrupcion, esa interrupcion casi siempre es un tiempo chico asi que tenes que contar cuantas veces entra a la interrupcion. por ejemplo si la interrupcion es de 0.1s cuando contas 10 interrupciones paso 1s, y ahi actualizas tu LCD.

Desconectado jorge_vallejos

  • PIC10
  • *
  • Mensajes: 26
Re: Evitar parpadeo al borrar una LCD
« Respuesta #6 en: 19 de Agosto de 2015, 12:23:20 »
ejemplo de un timer con CCS:

https://www.ccsinfo.com/faq.php?page=ccs_timer0_interrupt

El tema del arduino es que usa la funcion millis, eso toma el tiempo de un timer que esta corriendo continuamente, si la resta del valor nuevo con el viejo supera el tiempo establecido, entonces ejecuta.
En el PIC uno puede realizar lo mismo, no se que PCI estas usando pero si es un PIC con timer de 16 bits es mas facil ya que te permite contar tiempos mas largos.
Sino directamente usas el timer para que cada cierto tiempo produzca una interrupcion, esa interrupcion casi siempre es un tiempo chico asi que tenes que contar cuantas veces entra a la interrupcion. por ejemplo si la interrupcion es de 0.1s cuando contas 10 interrupciones paso 1s, y ahi actualizas tu LCD.

Gracias KILLERJC , voy a intentarlo así entonces, un saludo!  ((:-))


 

anything