Autor Tema: Problemas al envíar un caracter determinado al LCD  (Leído 2908 veces)

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

Desconectado sistemasorp

  • PIC10
  • *
  • Mensajes: 28
Problemas al envíar un caracter determinado al LCD
« en: 02 de Octubre de 2006, 15:53:04 »
Hola a todos, me estreno en este foro. Espero que este tema pertenezca a esta sección:

Resulta que tengo un PIC 16f84-A, un MAX232 y un LCD (PC1602-F)
compatible con el Hitachi HD44780.

El programa que tengo puesto en el PIC envía un mensaje al ordenador
por el puerto serie poniendo en el hyperterminal "Escriba su nombre".
El usuario lo escribe y cada caracter que tecle el PIC lo reenvia al
puerto serie de nuevo y lo muestra en el LCD (está configurado a 4
bits y usa retardos en vez del busy flag).

El problema es que todos los caracteres se visualizan bien en el LCD
excepto 'p','P',' ','0' y '@', los cuales provocan que la pantalla se
apague o muestre lineas. Cuando el usuario escribe otro caracter
distinto de los anteriores se vuelve a mostrar el contenido otra vez
incluyendo los carácteres problemáticos. Así, si el usuario escribe:

A
p
o
l
o

Cuando escribe la "p" desaparece el contenido y cuando escribo la "o"
aparece "Apo" y a partir de ahí todo correcto.

Fijándome en la tabla CGROM de caracteres, veo que los 4 bits
inferiores de los caracteres problemáticos son ceros. No se si ese
será el problema junto con el bus de datos de 4bits. ¿Sabeis que
puede ser y/o como se puede arreglar sin tener que modificar la
configuración de los pines del LCD y del PIC?

Muchas gracias y perdón por el tocho.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problemas al envíar un caracter determinado al LCD
« Respuesta #1 en: 02 de Octubre de 2006, 16:49:19 »
sistemasorp, si le envias los caracteres "conflictivos" sin mediar la pc de por medio, también te hace lo mismo?

Yo que tu pruebo un programita que mande un string al display pero que mande 1 caracter por vez por segundo.

De esa forma podrás ver si existe el parpadeo ese raro que comentas.

La idea es determinar si el problema lo tienes en la rutina del LCD o bien si en algo de la comunicación con la PC.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado sistemasorp

  • PIC10
  • *
  • Mensajes: 28
Re: Problemas al envíar un caracter determinado al LCD
« Respuesta #2 en: 02 de Octubre de 2006, 17:38:13 »
sistemasorp, si le envias los caracteres "conflictivos" sin mediar la pc de por medio, también te hace lo mismo?

Yo que tu pruebo un programita que mande un string al display pero que mande 1 caracter por vez por segundo.

De esa forma podrás ver si existe el parpadeo ese raro que comentas.

La idea es determinar si el problema lo tienes en la rutina del LCD o bien si en algo de la comunicación con la PC.

Saludos

Acabo de probarlo, y ocurre igual. Para que podais echarle un vistazo he enviado un video a youtube para que veais lo que ocurre:

nombre_link

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problemas al envíar un caracter determinado al LCD
« Respuesta #3 en: 02 de Octubre de 2006, 18:01:16 »
sistemasorp, si le envias los caracteres "conflictivos" sin mediar la pc de por medio, también te hace lo mismo?

Yo que tu pruebo un programita que mande un string al display pero que mande 1 caracter por vez por segundo.

De esa forma podrás ver si existe el parpadeo ese raro que comentas.

La idea es determinar si el problema lo tienes en la rutina del LCD o bien si en algo de la comunicación con la PC.

Saludos

Acabo de probarlo, y ocurre igual. Para que podais echarle un vistazo he enviado un video a youtube para que veais lo que ocurre:

nombre_link

OK ahi he visto, me huele a que es algo de la comunicación. 

Por las dudas, los pines D0 a D3, debes dejarlos al aire, ni a masa ni a Vcc.

La librería que usas, es estándar o hecha por vos?
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado sistemasorp

  • PIC10
  • *
  • Mensajes: 28
Re: Problemas al envíar un caracter determinado al LCD
« Respuesta #4 en: 02 de Octubre de 2006, 18:20:06 »
OK ahi he visto, me huele a que es algo de la comunicación. 

Por las dudas, los pines D0 a D3, debes dejarlos al aire, ni a masa ni a Vcc.

La librería que usas, es estándar o hecha por vos?

Si, los pines D0 a D3 no tienen conexión a nada. La librería la he hecho yo, aunque me sorpende que solo 4 caracteres me dan problemas y el resto no :-?. Aqui le paso la librería (es muy cortita) por si les sirve de ayuda:

(los pines RA0 y RA1 esta conectados a RS y E respectivamente, RB7..RB4 estan conectados a D7..D4 respectivamente; las llamadas a Retardo_* esperan el tiempo que indican)

Código: [Seleccionar]
CBLOCK
caracter
ENDC

inicializaLCD4bits
bsf STATUS, RP0
bcf TRISA,0
bcf TRISA,1
bcf TRISB,7
bcf TRISB,6
bcf TRISB,5
bcf TRISB,4
bcf STATUS, RP0

bcf PORTA,0
bcf PORTA,1
;Esperar 15 ms
call Retardo_20ms

;Modo de 8 bits
movlw b'00110000'
call enviaComando
call Retardo_5ms

;Modo de 8 bits
movlw b'00110000'
call enviaComando
call Retardo_200micros

;Modo de 8 bits
movlw b'00110000'
call enviaComando
call Retardo_5ms

;Modo 4 bits
movlw b'00100000'
call enviaComando

;Modo 4 bits, 2 lineas y fuente de 5x7 (function set)
movlw b'00100000'
call enviaComando
movlw b'10000000'
call enviaComando
call Retardo_5ms

;display encendido, cursor apagado, cursor normal (display control)
movlw b'00000000'
call enviaComando
movlw b'11000000'
call enviaComando
call Retardo_5ms

; borra el display (clear display)
movlw b'00000000'
call enviaComando
movlw b'00010000'
call enviaComando
call Retardo_5ms

; incrementa posicion cursor y texto no se desplaza (entry mode set)
movlw b'00000000'
call enviaComando
movlw b'01100000'
call enviaComando
call Retardo_5ms

return

enviaComando
movwf PORTB
bsf PORTA,1
bcf PORTA,1
return

imprimeCaracter
movwf caracter
bsf PORTA,0
call enviaComando
swapf caracter,W
call enviaComando
call Retardo_50micros
bcf PORTA,0
return

Y por si les srive de algo aquí está el programa principal (aunque no es necesario creo):

Código: [Seleccionar]
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC

LIST P=16F84A

INCLUDE <P16F84A.INC>

CBLOCK 0x0C
indice
contador
direccion
ENDC

ORG 0

INICIO
call inicializaLCD4bits

clrf indice
movlw (finmensaje-mensaje)
movwf contador

masCaracteres
movf indice,W
call devuelveMensaje
call imprimeCaracter
call Retardo_1s
incf indice
decfsz contador,F
goto masCaracteres

movlw b'10000000'
movwf direccion
movimiento
movlw (finmensaje-mensaje)-d'16'
movwf contador
movimiento2
call Retardo_500ms
movlw b'00010000'
call enviaComando
movf direccion,W
call enviaComando
decfsz contador,F
goto movimiento2
movlw b'01000000'
xorwf direccion,F
call Retardo_1s
goto movimiento


devuelveMensaje
addwf PCL,F
mensaje
DT "ABC DEF PIN @O0U"
finmensaje

INCLUDE "RETARDOS.INC"
INCLUDE "LCDLIB.INC"


END

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problemas al envíar un caracter determinado al LCD
« Respuesta #5 en: 02 de Octubre de 2006, 19:19:14 »
Mmm, no me puse a probarla en el simulador pero veamos de hacer algunos retoques rápidos a ver si tenemos suerte.

Código: [Seleccionar]
enviaComando
movwf PORTB
bsf PORTA,1
bcf PORTA,1
return

Dale un retardo después del portB, antes de enviar el enable.

También deja al enable un rato más en 1, es decir ponle algun retardo de un par de microsegundos entre el set del PORTA<1> y el clear.

Código: [Seleccionar]
imprimeCaracter
movwf caracter
bsf PORTA,0
call enviaComando
swapf caracter,W
call enviaComando
call Retardo_50micros
bcf PORTA,0
return

También agrega un retardo entre el envío del primer caracter y el segundo (antes del segundo enviaComando) .  Quiero ver si hay algún problema con la velocidad o de ruido que pueda afectar a la transmisión.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado sistemasorp

  • PIC10
  • *
  • Mensajes: 28
Re: Problemas al envíar un caracter determinado al LCD
« Respuesta #6 en: 03 de Octubre de 2006, 19:13:56 »
Finalmente achaco que es problema del LCD, puesto que he probado otro y no he tenido ningún problema. COsas que pasan :)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problemas al envíar un caracter determinado al LCD
« Respuesta #7 en: 03 de Octubre de 2006, 19:52:00 »
Finalmente achaco que es problema del LCD, puesto que he probado otro y no he tenido ningún problema. COsas que pasan :)

Ese otro que probaste es idéntico a este?  Estoy pensando en que tal vez este que te falla tenga algún problema al inicializarse, tal vez no se resetea bien.

Eso lo podrías solucionar esperando un poco más al principio, y enviando la cadena de inicialización después de eso.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado sistemasorp

  • PIC10
  • *
  • Mensajes: 28
Re: Problemas al envíar un caracter determinado al LCD
« Respuesta #8 en: 04 de Octubre de 2006, 02:38:01 »
Ese otro que probaste es idéntico a este?  Estoy pensando en que tal vez este que te falla tenga algún problema al inicializarse, tal vez no se resetea bien.

Eso lo podrías solucionar esperando un poco más al principio, y enviando la cadena de inicialización después de eso.


Pues es de distinta marca, eso y teniendo en cuenta que otros carácteres si se muestran sin problema en el lcd problemático me da que pensar que está defectuoso por alguna razón (ya que o funciona todo o no funciona nada pero que no se quede a medias).

Muchas gracias por tu ayuda.


 

anything