Autor Tema: Caracter en LCD 16x2 desde Visual Basic 10 (Como hacer para que no se vea en LCD  (Leído 6176 veces)

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

Desconectado agcopa

  • PIC10
  • *
  • Mensajes: 6
Buenos días
Quería realizar una consulta en relación a cierto carácter que se presenta en el LCD 16x2 cuando recibe del Hiperterminal un <CR><LF>

Pueden ubicar el video escribiendo en Youtube: Proyecto RFID Control de Acceso, Video Comunicacion Serial PIC-PC, PIC 16F870 ASM

El carácter se puede observar en el segundo 39 del video y se anexa fotograma para mayor detalle.

En el video se ve que el carácter se presenta en el LCD cuando presiono la tecla enter en el teclado del PC a través del Hiperterminal, entiendo que esta acción envía dos comandos consecutivos el <CR><LF>, que son colocar el curso al principio de la segunda línea, con el salto de línea.

Como logre solventar que este carácter no se presentara ?

En la ventana de Propiedades del Hiperterminal, en la configuración de las propiedades de esa conexión, en la parte correspondiente a ASCII SENDING, desmarque la opción: SEND LINE ENDS WITH LINE FEEDS y ahora se ve en el Hiperteminal que hace el <CR> pero no el <LF> ya que el curso se posiciona nuevamente al inicio de la misma línea; es decir, no hace el salto de línea. Con esto ya no se presenta ese caracter.

Hasta aquí todo va funcionando bien....

El tema se presenta ahora cuando no utilizo el Hiperterminal y estoy realizando el código del sistema en Visual Basic 10, en donde envió el comando vbCrLf y aqui aparece nuevamente el carácter en el LCD, he probado con vbCr únicamente y también se presenta el carácter.

Como hago en VB10 para que eso no ocurra, es decir; como simular en VB10 lo que hice en el Hiperterminal con tan solo desmarcar la opción SEND LINE ENDS WITH LINE FEEDS y el carácter no se presente en el LCD

Gracias por sus posibles sugerencia......
« Última modificación: 16 de Septiembre de 2013, 07:09:22 por agcopa »

Desconectado Darkman_A

  • PIC18
  • ****
  • Mensajes: 288
Re: Caracter en LCD 16x2 desde Visual Basic 10 (Como hacer para que no se vea en LCD
« Respuesta #1 en: 15 de Septiembre de 2013, 21:37:19 »
Buenos días
Quería realizar una consulta en relación a cierto carácter que se presenta en el LCD 16x2 cuando recibe del Hiperterminal un <CR><LF>

Pueden ubicar el video escribiendo en Youtube: Proyecto RFID Control de Acceso, Video Comunicacion Serial PIC-PC, PIC 16F870 ASM

El carácter se puede observar en el segundo 39 del video y es el que se encuentra justo debajo de la letra "S"

En el video se ve que el carácter se presenta en el LCD cuando presiono la tecla enter en el teclado del PC a través del Hiperterminal, entiendo que esta acción envía dos comandos consecutivos el <CR><LF>, que son colocar el curso al principio de la segunda línea, con el salto de línea.

Como logre solventar que este carácter no se presentara ?

En la ventana de Propiedades del Hiperterminal, en la configuración de las propiedades de esa conexión, en la parte correspondiente a ASCII SENDING, desmarque la opción: SEND LINE ENDS WITH LINE FEEDS y ahora se ve en el Hiperteminal que hace el <CR> pero no el <LF> ya que el curso se posiciona nuevamente al inicio de la misma línea; es decir, no hace el salto de línea. Con esto ya no se presenta ese caracter.

Hasta aquí todo va funcionando bien....

El tema se presenta ahora cuando no utilizo el Hiperterminal y estoy realizando el código del sistema en Visual Basic 10, en donde envió el comando vbCrLf y aqui aparece nuevamente el carácter en el LCD, he probado con vbCr únicamente y también se presenta el carácter.

Como hago en VB10 para que eso no ocurra, es decir; como simular en VB10 lo que hice en el Hiperterminal con tan solo desmarcar la opción SEND LINE ENDS WITH LINE FEEDS y el carácter no se presente en el LCD

Pueden observar el resultado de la comunicacion trabajando perfectamente interactuando unicamente con el Hiperterminal, en el siguiente enlace:

http://www.youtube.com/watch?feature...&v=LpoEMuU_Tnw

Gracias por sus posibles sugerencia......

Hola.
No se a que caracter te referis. En ese video debajo de la S se ve un 1.
Si vas a hacer un video para consultar, que tu video muestre especificamente el problema y no hagas un paneo porque no se puede apreciar el problema. Dado que tenes el video podrias poner un fotograma a modo de foto que muestre cual es el caracter asi no tenemos que quedar ciegos tratando de ver ese caracter.
Lo he mirado en diferentes formatos y no logro ver el caracter que mencionas.
Por favor, si vas a pedir ayuda trata que la informacion que nos brindas sea lo mas precisa posible.  Lo que si me ha quedado claro es que tienes un monitor ACER, pues esta en el centro de la imagen.
Saludos.

Desconectado agcopa

  • PIC10
  • *
  • Mensajes: 6
Re: Caracter en LCD 16x2 desde Visual Basic 10 (Como hacer para que no se vea en LCD
« Respuesta #2 en: 16 de Septiembre de 2013, 07:10:54 »
Se anexa foto en donde se muestra cual es el caracter.

Desconectado Darkman_A

  • PIC18
  • ****
  • Mensajes: 288
Re: Caracter en LCD 16x2 desde Visual Basic 10 (Como hacer para que no se vea en LCD
« Respuesta #3 en: 16 de Septiembre de 2013, 13:10:53 »
Hola.
Ahora mucho mejor.  :-/     Estaba quedando bizco de ver con un ojo el hiperterminal y con el otro el display  :P
Estaria bueno que no modificaras tu mensaje original. Podrias haber puesto la imagen en el segundo mensaje. Eso se suele hacer en los foros para mantener el hilo del mensaje. Si lo vas modificando tus mensajes a medida que pasa el tiempo, a la larga no se entiende nada.
Bueno, a tu consulta. Segun decis has resuelto sacando el carry return, porque escribis que has puesto SEND LINE ENDS WITH LINE FEEDS, o sea que a mi entender solo esta enviando el line feed.
He buscado ese caracter en varias hojas de datos y no lo he encontrado, por lo que sospecho que se trata de basura.
Mi consejo es que, dato que tenes inconvenientes tanto con hiperterminal como con tu programa, el tratamiento de los caracteres los hagas en el pic. De esta forma si no es un caracter valido no lo imprime.
Una vez que imprimiste tendrias que limpiar la variable que estas usando y volver el cursor a la posicion de inicio. Lo que en CCS seria (lo de la posicion).
Código: [Seleccionar]
 lcd_gotoxy(1,2);Algo que he hecho en alguna oportunidad fue imprimir en una linea el caracter y en la de abajo el codigo ASCII, asi luego de identificar el valor ASCII lo filtraba.
¿En que lenguaje estas programando el pic?
Saludos.

Desconectado agcopa

  • PIC10
  • *
  • Mensajes: 6
Re: Caracter en LCD 16x2 desde Visual Basic 10 (Como hacer para que no se vea en LCD
« Respuesta #4 en: 16 de Septiembre de 2013, 14:15:27 »
Gracias por su pronta respuesta.

Algunas aclaratorias adicionales:

1.- Programo en ASM, y todos los filtros dentro del codigo ya los tengo. En el codigo del PIC el <CR> me indica fin de la transmisión de la data del PC al PIC y el <CR> no lo muestro, simplemente al detectarlo, salgo de la rutina en donde estoy. Yo envio 32 caracteres consecutivos al LCD (16 y 16 ya que el LCD es de 16x2) para no dejar espacios en blanco, ya que esto desplazaria lo próximo a mostrar y se verian las palabras cortadas entre las dos lineas del LCD, luego de esos 32 caracteres, envio el <CR>.

2.- Simulación con Hiperterminal: saco el <LF> y dejo el <CR>, como indico en el texto anterior, eso hace que el cursor, en el envio de los mensajes del PC al PIC con el Hiperterminal, se posicione nuevamente al inicio de la misma linea (ver dibujo.jpg). En conclusión, al eliminar el <LF>, ese famoso caracter no se muestra en el LCD.
Porqué así funciona??  Al enviar el string (Hiperteminal -> PIC) yo lo termino con <CR><LF> y si dejaba marcada la opción SEND LINE ENDS WITH LINE FEEDS en el hiperterminal, enviaba adiconalmente otro <LF>, entonces estaba enviando <CR><LF><LF> y podría concluir que ese caracter era ese <LF> adicional.

3.- Visual Basic 10 + PIC:  Al realizar el codigo en VB10, con la instrucción VbCrLF o VbCr, nuevamente se presenta en el LCD ese caracter. El VBCr, debería emular lo realizado con el Hiperterminal, pero no es así.

Gracias por su respuesta, seguire averiguando hasta encontrar que es lo que ocurre dentro del VB.
« Última modificación: 16 de Septiembre de 2013, 14:52:53 por agcopa »

Desconectado Darkman_A

  • PIC18
  • ****
  • Mensajes: 288
Re: Caracter en LCD 16x2 desde Visual Basic 10 (Como hacer para que no se vea en LCD
« Respuesta #5 en: 16 de Septiembre de 2013, 16:08:44 »
Gracias por su pronta respuesta.

Algunas aclaratorias adicionales:

1.- Programo en ASM, y todos los filtros dentro del codigo ya los tengo. En el codigo del PIC el <CR> me indica fin de la transmisión de la data del PC al PIC y el <CR> no lo muestro, simplemente al detectarlo, salgo de la rutina en donde estoy. Yo envio 32 caracteres consecutivos al LCD (16 y 16 ya que el LCD es de 16x2) para no dejar espacios en blanco, ya que esto desplazaria lo próximo a mostrar y se verian las palabras cortadas entre las dos lineas del LCD, luego de esos 32 caracteres, envio el <CR>.

2.- Simulación con Hiperterminal: saco el <LF> y dejo el <CR>, como indico en el texto anterior, eso hace que el cursor, en el envio de los mensajes del PC al PIC con el Hiperterminal, se posicione nuevamente al inicio de la misma linea (ver dibujo.jpg). En conclusión, al eliminar el <LF>, ese famoso caracter no se muestra en el LCD.
Porqué así funciona??  Al enviar el string (Hiperteminal -> PIC) yo lo termino con <CR><LF> y si dejaba marcada la opción SEND LINE ENDS WITH LINE FEEDS en el hiperterminal, enviaba adiconalmente otro <LF>, entonces estaba enviando <CR><LF><LF> y podría concluir que ese caracter era ese <LF> adicional.

3.- Visual Basic 10 + PIC:  Al realizar el codigo en VB10, con la instrucción VbCrLF o VbCr, nuevamente se presenta en el LCD ese caracter. El VBCr, debería emular lo realizado con el Hiperterminal, pero no es así.

Gracias por su respuesta, seguire averiguando hasta encontrar que es lo que ocurre dentro del VB.

Hola.
Yo tambien programo en assembler.
Creo que lo que estas haciendo mal es utilizar el CR y LF. El display no interpreta CR y LF. Si te fijas en el datasheet del display o del controlador (supongo que es Hitachi 44780 compatible) no te menciona el uso de CR y LF. Lo que tenes que hacer es usar los comandos del display, o sea, entras a modo comando, ingresas el comando y luego a modo datos y escribis lo que queres; tanto en el renglon de arriba como en el de abajo.
En tu caso te esta funcionando porque el display dispone de un banco de memoria (o buffer) mayor de lo que te esta mostrando. Me explico mejor, hay una celda de memoria por cada digito que te muestra, pero hay otras celdas de memoria que no son representadas (o sea no tiene un digito que mostrar). Esto se hace para poder generar nuestros caracteres y poder ponerlos en la memoria del display para que sea mas rapida su representacion. Luego de esas direcciones de memoria viene el segundo renglon (con direcciones al final que no se representan en el display). Cuando escribis, pones los datos que queres mostrar y el CR, LF, etc van a parar a esa direcciones de memoria.Luego, como la direcciones son continuas caes en la direccion del primer caracter de la segunda linea, que si es visible, y te lo mustra.
No tengo la informacion a mano como para mostrartela, si la encuentro te la subo.
De la forma en que te digo, usando los comandos, que creo que eran 80h para linea1 y C0h para linea2.
Si te fijas las direcciones son 00h y 40h
Y como el comando es:
Set DDRAM address y tiene un 1 en la posicion D7, para 00h te queda 10000000b = 80h  ; y para la linea2 (40h) te queda 11000000b = C0h
Bueno, espero que te sea de ayuda y al resto; si ven que meti la pata comenten.
Saludos.

Edito: Que hace el display si manda un caracter y luego Enter . Por ejemplo 1 y enter, ¿Salta de linea?. Si no salta es porque no interpreta el LF + CR o LF.
Saludos.
« Última modificación: 16 de Septiembre de 2013, 16:19:05 por Darkman_A »

Desconectado agcopa

  • PIC10
  • *
  • Mensajes: 6
Re: Caracter en LCD 16x2 desde Visual Basic 10 (Como hacer para que no se vea en LCD
« Respuesta #6 en: 16 de Septiembre de 2013, 17:26:03 »
En verdad agradecido por el tiempo que te has tomado en ayudarme con esto...

Te anexo esa parte del código en ASM para que veas como manejo lo que estamos revisando.

Es correcta tu indicación, el LCD no interpreta el <CR> o <LF> por eso puedes ver en el código que lo que hago es simplemente preguntar por el carácter que llega leído serialmente al PIC (ver: Parte del código para el LCD.JPG) si es 0x0D o <CR>, de ser así limpio el contador de caracteres (RxByteCount) y regreso a la rutina principal. Caso contrario; es decir, mientras que no sea el <CR> y vayan llegando caracteres, primero cuento hasta 16 caracteres (fin de la primera línea del LCD) y una vez alcanzado el carácter 16, se va a INICIA_LINEA_2, es aquí en donde se corren las rutinas para posicionar el curso en el primer carácter de la línea 2 y así continua esto hasta que recibe el carácter 32 (Línea 2)

Fíjate que el programa no envía <CR> o <LF> al LCD, solo pregunta si <CR> luego y sale de esa rutina a la principal. Estoy casi seguro que ese carácter que sale en el LCD es el <LF>, el asunto es que no tengo como asegurarlo…

La otra rutina, parte de la principal, la coloco para que tengas una idea del funcionamiento general del programa.

En verdad, muy agradecido por tu ayuda y tiempo que has invertido en esto. Seguiré averiguando…..
« Última modificación: 16 de Septiembre de 2013, 18:35:05 por agcopa »

Desconectado Darkman_A

  • PIC18
  • ****
  • Mensajes: 288
Re: Caracter en LCD 16x2 desde Visual Basic 10 (Como hacer para que no se vea en LCD
« Respuesta #7 en: 16 de Septiembre de 2013, 19:38:56 »
En verdad agradecido por el tiempo que te has tomado en ayudarme con esto...

Te anexo esa parte del código en ASM para que veas como manejo lo que estamos revisando.

Es correcta tu indicación, el LCD no interpreta el <CR> o <LF> por eso puedes ver en el código que lo que hago es simplemente preguntar por el carácter que llega leído serialmente al PIC (ver: Parte del código para el LCD.JPG) si es 0x0D o <CR>, de ser así limpio el contador de caracteres (RxByteCount) y regreso a la rutina principal. Caso contrario; es decir, mientras que no sea el <CR> y vayan llegando caracteres, primero cuento hasta 16 caracteres (fin de la primera línea del LCD) y una vez alcanzado el carácter 16, se va a INICIA_LINEA_2, es aquí en donde se corren las rutinas para posicionar el curso en el primer carácter de la línea 2 y así continua esto hasta que recibe el carácter 32 (Línea 2)

Fíjate que el programa no envía <CR> o <LF> al LCD, solo pregunta si <CR> luego y sale de esa rutina a la principal. Estoy casi seguro que ese carácter que sale en el LCD es el <LF>, el asunto es que no tengo como asegurarlo…

La otra rutina, parte de la principal, la coloco para que tengas una idea del funcionamiento general del programa.

En verdad, muy agradecido por tu ayuda y tiempo que has invertido en esto. Seguiré averiguando…..

Hola.
Si, asi a vuelo de pajaro mirando tu codigo lo primero que veo es que no validas <LF>. Si en hiperterminal estas dejando el <LF> (como en Unix, si mal no recuerdo) ¿por que no validaz por <LF> en lugar de <CR>. Luego, si NO es <LF>, se supone que es un dato, porque siempre el <CR> viene luego de <LF>. Tambien podrias, por seguirdad chequear no sea <CR> y en ese caso descartas el dato volviendo a la rutina principal.
Creo que lo mas importante o lo que debe de marcar la pauta es el contador. Si es igual a 15 ( o 16 segun lo inicialzes) deberia salta de linea (ejecutar los comandos necesarios que te comentaba antes) y si es menor que 15 (o 16) pero viene un <LF> ( o <LF><CR> o lo que decidas) salte a la siguiente linea.
Planteate lo siguiente. Hacer un programa que me permita escribir unos caracteres (2 o 3) en la mitad de la pantalla y que luego de esos 2 o 3 caracteres salte a la mitad del renglon inferior, luego de 2 o 3 caracteres mas vuelva arriba. Sin chapuzas de espacios en blanco, utilizando las direcciones como te contaba antes. Te va a ser muy practico para manejar el display. Vas a poder poner un caracter donde quieras. Tomalo con tiempo y pensalo.
Dentro de un ratito me tomo un tiempo y miro tu codigo.
Saludos
« Última modificación: 16 de Septiembre de 2013, 19:48:21 por Darkman_A »

Desconectado Darkman_A

  • PIC18
  • ****
  • Mensajes: 288
Re: Caracter en LCD 16x2 desde Visual Basic 10 (Como hacer para que no se vea en LCD
« Respuesta #8 en: 16 de Septiembre de 2013, 20:01:14 »
Fíjate que el programa no envía <CR> o <LF> al LCD, solo pregunta si <CR> luego y sale de esa rutina a la principal. Estoy casi seguro que ese carácter que sale en el LCD es el <LF>, el asunto es que no tengo como asegurarlo…
Hola.
La forma de asegurate es como te decia en un mensaje anterior. Haciendo una rutina que te imprima el valor numerico del ASCII, por ejemplo: A <65>, B<66> , o algo asi . Yo lo he hecho que me imprimiera debajo del caracter, son gustos. Lo que si, es tomarse un trabajito, porque tenes que implementar el codigo. De todas formas ese codigo no es la muerte de nadie.
Otra forma es filtrando, como te comentaba antes, caracteres en mayuscula: ASCII del 65 al 90 , en minuscula del 97 al 122, numeros del 48 al 57, si el caracter no esta ahi no lo mando al display (puedo agregar algun caracter mas que quiera mostrar). El <LF> y el <CR> no pasan ni a palos.
Saludos.

Desconectado agcopa

  • PIC10
  • *
  • Mensajes: 6
Re: Caracter en LCD 16x2 desde Visual Basic 10 (Como hacer para que no se vea en LCD
« Respuesta #9 en: 18 de Septiembre de 2013, 07:09:34 »
Efectivamente y después de realizar diferentes análisis, pude comprobar que el carácter es  <LF>; procedí a realizar la adecuación en el código del PIC.

Anexo la parte en donde procedo a realizar la validación de esa información. Cómo puedes observar valido tanto el <LF> como el <CR>, puedo concluir, igual que en el caso del Hiperterminal, que al enviar VbCr, exitse un <LF> que esta implicito, que debe quedar en el Buffer del registro RCREG, anexo un analisis que realice de la comunicación serial para el caso de la recepción de data en el cual tome esta conclusión.

Siempre es bueno escuchar cualquier otro comentario de la gente del foro, por si acaso mis apreciaciones no son las mas adecuadas.

Gracias por tu aporte en la solución de este caso, posteriormente anexare fotos en donde muestro lo mencionado operativamente.
« Última modificación: 18 de Septiembre de 2013, 10:03:11 por agcopa »

Desconectado agcopa

  • PIC10
  • *
  • Mensajes: 6
Re: Caracter en LCD 16x2 desde Visual Basic 10 (Como hacer para que no se vea en LCD
« Respuesta #10 en: 19 de Septiembre de 2013, 07:35:00 »
Como lo ofreci en el post anterior aqui les dejo el enlace del proyecto ya terminado:

feature=c4-overview&list=UUy0jsG85vDU-Q2KmXD5Xztg

Trate de explicar escribiendo en el video un poco la secuencia de este sistema de control de acceso.

Mil gracias a Darkman_A por su interes y consejos recibidos para este tema.

Cualquier pregunta pueden hacerla con gusto y en la medida de mi disponibilidad le respondo

Saludos....
« Última modificación: 19 de Septiembre de 2013, 07:37:23 por agcopa »