Autor Tema: ¿Qué le ocurre al LCD?  (Leído 1691 veces)

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

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
¿Qué le ocurre al LCD?
« en: 23 de Diciembre de 2010, 18:10:39 »
Hola a todos, estoy haciendo varias pruebas y tengo un ejemplo muy sencillo, pero el mensaje del LCD corre contínuamente por la pantalla, llegado a ser casi ilegible. ¿Qué ocurre? He realizado ejemplos parecidos y nunca me ha ocurrido nada igual.

Adjunto están el ejemplo.

De nuevo gracias a todos por la colaboración.

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: ¿Qué le ocurre al LCD?
« Respuesta #1 en: 23 de Diciembre de 2010, 18:28:40 »
Hola ramirez, lo que ocurre es que la instrucción que muestra los datos en el lcd está dentro del loop do while y no le indicas en que posición del lcd se debe ubicar.  Al no posicionar el dato que quieres mostrar, por ejemplo con lcd_gotoxy(x,y), el dato en el siguiente ciclo del loop se posiciona inmediatamente enseguida del último caracter que fué mostrado en el lcd, lo que hace ese efecto que parece que corriera continuamente .
Borrar la pantalla antes de mostrar un nuevo dato sería otra forma de hacerlo, pero como requiere de más tiempo, puede mostrar algo de parpadeo.  La mejor manara es posicionar los datos con la instrucción que te mencioné  ocupando el total de caracteres de la línea.

Saludos!

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: ¿Qué le ocurre al LCD?
« Respuesta #2 en: 23 de Diciembre de 2010, 18:53:57 »
Gracias bmb por la respuesta, todo ocurría como lo has explicado, pero ahora tengo dos dudas más:

1.- El caracter "V" se queda grabado en el LCD en dos posiciones, ya que si por ejemplo el resultado tiene tres digitos primero y después dos se ve en el LCD "VV" en lugar de "V", creo que esto es debido a que una de ellas no se borra. ¿Cómo lo soluciono?

2.- Otra cosa que me extraña es que si por ejemplo en puerto A lo tengo todo a 1 y el B todo a 0 obtengo en el display 63, es decir que las dos últimas entradas no actuan, ya que si lo hiciera obtendría 255 (2^8 -1)

Gracias de nuevo

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: ¿Qué le ocurre al LCD?
« Respuesta #3 en: 23 de Diciembre de 2010, 19:15:33 »
... Borrar la pantalla antes de mostrar un nuevo dato sería otra forma de hacerlo, pero como requiere de más tiempo, puede mostrar algo de parpadeo.  La mejor manara es posicionar los datos con la instrucción que te mencioné  ocupando el total de caracteres de la línea.

Hola ramirez, como te había mencionado la mejor forma es posicionando el dato a mostrar, pero ocupando el total de caracteres de la línea.  Si por ejemplo la línea de tu LCD es de 16 caracteres y sabes que el número de caracteres máximos del dato a mostrar es de 5 (dato mayor = 65535), entonces debes formatear el printf asi:

printf(lcd_putc,"dife= %05ld V   ",diferencia);

dife= ocupará siempre 5 caracteres
%05ld ocupará siempre 5 caracteres
V ocupará siempre 1 caracter

+ 1 espacio en blanco entre dife= y el valor + 1 espacio en blanco entre el valor y V + 3 espacios en blanco que le adicones al final nos dan los 16 caracteres de la línea.

Saludos!

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: ¿Qué le ocurre al LCD?
« Respuesta #4 en: 23 de Diciembre de 2010, 19:20:50 »
Ahora lo tengo todo claro con referencia a ese punto.

En lo que el segundo punto se refiere, el fallo es que el puerto A solo tiene 6 bits por lo tanto solo puede leer hasta el 63, los dos bits de mayor peso están conectados al puerto E.

De nuevo muchas gracias por la colaboración

Que pasen un buen día

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: ¿Qué le ocurre al LCD?
« Respuesta #5 en: 23 de Diciembre de 2010, 19:32:16 »
Ahora lo tengo todo claro con referencia a ese punto.

En lo que el segundo punto se refiere, el fallo es que el puerto A solo tiene 6 bits por lo tanto solo puede leer hasta el 63, los dos bits de mayor peso están conectados al puerto E.

De nuevo muchas gracias por la colaboración

Que pasen un buen día

Ahhh! disculpa, pasé por alto tu segunda pregunta  :oops:.  Bueno, también te quería sugerir que insertaras algún delay al final del loop ya que en este caso particular no es necesario el 'refresco' de datos tan frecuente.

Saludos!


 

anything