Hola, nuevamente tengo un problema, nunca trabaje con displays LCD y luego de hacer una exhaustiva busqueda por este y otros foros y demas, no puedo terminar de entender como funciona. Mejor dicho, creo haberlo entendido, pero no entiendo porque no funciona si es que lo entendi bien.
El pic que estoy usando es un PIC16F628A y el display LCD es un LM016L
Segun lo que entendi en lo que he leido los pasos a seguir son mas o menos asi, seteo las patas R/W y R/S a gusto, seteo en 1 la pata E del LCD, mando comando o dato (segun haya seteado R/W y R/S), pongo E a cero y espero el tiempo necesario para que el LCD deje de estar busy.
En mi codigo intento seguir estos pasos pero evidentemente algo mal estoy haciendo, ya que no logro hacerlo funcionar, intente cambiar el orden de el seteo de E a varias otras posiciones pero sin exito.
Mando la parte del codigo en la que intento hacer algo con el LCD, esto tomaria lugar apenas se pone en funcionamiento el sistema (esta despues de la parte de configuracion de los puertos del pic y demas). En esta parte el pic no ha entrado a la interrupcion ni nada por el estilo todavia.
Comento aca arriba para no generar dudas, los puertos de mi pic estan conectados de la siguiente forma, RB0 genera una interrupcion asi que no esta conectado al LCD. RB1 conectado a DB0 (del LCD), RB2 conectado a DB1, ....... , RB7 conectado a DB6 y RA3 conectado a DB7. RA0 conectado al pin R/S del display, RA1 a R/W y RA2 al pin E. (los demas pines del puerto A estan conectados a la salida de un dtmf, por eso que esta poco organizado el tema de las conexiónes.
De todas formas adjunto tambien un screenshot del circuito armado en proteus (quiero lograr que funcione por lo menos aca, para despues armarlo bien)
Si alguien quiere el codigo entero por algun motivo o razon, me avisa que lo cuelgo.
Ahi les va...
principal
call retardo
call retardo
call retardo
limpio
bsf PORTA, 2
bsf PORTB, 1
nop
bcf PORTA, 2
call retardo
call retardo
call retardo
entry
bsf PORTA, 2
bsf PORTB, 1
bsf PORTB, 2
bsf PORTB, 3
bcf PORTA, 2
call retardo
call retardo
call retardo
cursor
bsf PORTA, 2
bsf PORTB, 1
bsf PORTB, 2
bsf PORTB, 3
bsf PORTB, 4
bcf PORTA, 2
call retardo
call retardo
call retardo
shift
bsf PORTA, 2
bsf PORTB, 3
bcf PORTB, 4
bsf PORTB, 5
bcf PORTA, 2
call retardo
call retardo
call retardo
ddram
bsf PORTA, 2
bsf PORTA, 3
clrf PORTB
bcf PORTA, 2
call retardo
call retardo
call retardo
write
bsf PORTA, 0
bcf PORTA, 1
bsf PORTA, 2
movlw b'10000010' ;El codigo LCD para la A ? (tambien intente con otras letras, pero nada funciona)
movwf PORTB
bcf PORTA, 3
bcf PORTA, 2
call retardo
call retardo
call retardo
bucle
nop
goto bucle
Muchas gracias desde ya
El pic que estoy usando es un PIC16F628A y el display LCD es un LM016L
Segun lo que entendi en lo que he leido los pasos a seguir son mas o menos asi, seteo las patas R/W y R/S a gusto, seteo en 1 la pata E del LCD, mando comando o dato (segun haya seteado R/W y R/S), pongo E a cero y espero el tiempo necesario para que el LCD deje de estar busy.
En mi codigo intento seguir estos pasos pero evidentemente algo mal estoy haciendo, ya que no logro hacerlo funcionar, intente cambiar el orden de el seteo de E a varias otras posiciones pero sin exito.
Mando la parte del codigo en la que intento hacer algo con el LCD, esto tomaria lugar apenas se pone en funcionamiento el sistema (esta despues de la parte de configuracion de los puertos del pic y demas). En esta parte el pic no ha entrado a la interrupcion ni nada por el estilo todavia.
Comento aca arriba para no generar dudas, los puertos de mi pic estan conectados de la siguiente forma, RB0 genera una interrupcion asi que no esta conectado al LCD. RB1 conectado a DB0 (del LCD), RB2 conectado a DB1, ....... , RB7 conectado a DB6 y RA3 conectado a DB7. RA0 conectado al pin R/S del display, RA1 a R/W y RA2 al pin E. (los demas pines del puerto A estan conectados a la salida de un dtmf, por eso que esta poco organizado el tema de las conexiónes.
De todas formas adjunto tambien un screenshot del circuito armado en proteus (quiero lograr que funcione por lo menos aca, para despues armarlo bien)
Si alguien quiere el codigo entero por algun motivo o razon, me avisa que lo cuelgo.
Ahi les va...
principal
call retardo
call retardo
call retardo
limpio
bsf PORTA, 2
bsf PORTB, 1
nop
bcf PORTA, 2
call retardo
call retardo
call retardo
entry
bsf PORTA, 2
bsf PORTB, 1
bsf PORTB, 2
bsf PORTB, 3
bcf PORTA, 2
call retardo
call retardo
call retardo
cursor
bsf PORTA, 2
bsf PORTB, 1
bsf PORTB, 2
bsf PORTB, 3
bsf PORTB, 4
bcf PORTA, 2
call retardo
call retardo
call retardo
shift
bsf PORTA, 2
bsf PORTB, 3
bcf PORTB, 4
bsf PORTB, 5
bcf PORTA, 2
call retardo
call retardo
call retardo
ddram
bsf PORTA, 2
bsf PORTA, 3
clrf PORTB
bcf PORTA, 2
call retardo
call retardo
call retardo
write
bsf PORTA, 0
bcf PORTA, 1
bsf PORTA, 2
movlw b'10000010' ;El codigo LCD para la A ? (tambien intente con otras letras, pero nada funciona)
movwf PORTB
bcf PORTA, 3
bcf PORTA, 2
call retardo
call retardo
call retardo
bucle
nop
goto bucle
Muchas gracias desde ya