Autor Tema: Problemas con LCD 1x16  (Leído 3704 veces)

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

Desconectado duendon

  • PIC10
  • *
  • Mensajes: 5
Problemas con LCD 1x16
« en: 03 de Enero de 2006, 01:10:00 »
Hola gente, soy estudiante de ing. electronica, me puse a indagar un poco con LCD y pude comprarme uno de 1x16 caracteres el tema es que al conectarlo enciende el backlight, y quedan encendidos por completo los 8 primieros casilleros, conecte o no el PICAXE que lo controla.
No se mucho del tema, a si que cualquier consejo sera bienvenido

LCD : PC 1601-F  ( POWERTIP )
PICAXE : 16F819 (18A)

Desde ya muchas gracias

Saludos

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Problemas con LCD 1x16
« Respuesta #1 en: 03 de Enero de 2006, 04:03:00 »
No se como será en un 1x16, pero me imagino que es lo normal, al alimentarlo, por ejemplo un 2x16, se enciende (los caracteres negros enteros) la primera fila, es decir 16 carácteres, esto es nomal, indica que el contralador funciona sin problemas, despues de esto es cuando debes inicializarlo.
Si juegas contra el mejor, pierdes como los demás.

Desconectado duendon

  • PIC10
  • *
  • Mensajes: 5
RE: Problemas con LCD 1x16
« Respuesta #2 en: 03 de Enero de 2006, 09:47:00 »
Hola Radon, desde ya muchas gracias por responder, quizas el problema es que no se muy bien como configurar el LCD, tenes idea de los pasos a seguir o algun ejemplo, ya sea en basic o asambler que me pueda orientar?
saludos

Desconectado poi5on

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 127
RE: Problemas con LCD 1x16
« Respuesta #3 en: 03 de Enero de 2006, 12:26:00 »
Hola amigo, puedes arrancar la LCD con los siguientes Defines en PICBasicPro:

DEFINE LCD_DREG *PORTB* =  port de data LCD
DEFINE LCD_DBIT *0* = datos LCD comenzando en bit 0 o 4
(con la LCD a 4 bits)
DEFINE LCD_RSREG *PORTB* = port de selección de registro LCD
DEFINE LCD_RSBIT *4* = bit de selección de registro LCD
DEFINE LCD_EREG *PORTB* = port de habilitacion LCD
DEFINE LCD_EBIT *5* = bit de habilitacion LCD
DEFINE LCD_BITS *4* = bus del LCD de 4 u 8 bits
DEFINE LCD_LINES *1* = numero de lineas en LCD

Lo que esta entre los * es lo que deben cambiar y adaptarlos a tu circuito, estas definiciones las colocas en el inicio del programa y listo. Para ensamblador debes enviar los siguienytes comandos:
1. Se ejecuta el comando CLEAR DISPLAY borrando la pantalla.
2. Se ejecuta el comando FUNCTION SET, que establece el interfaz con el
Bus de datos. Se elige por defecto el tamaño del bus de datos a 8 bits (DL=1)
y el número de renglones del display en 1 (N=0).
3. Se ejecuta el comando DISPLAY ON/OFF CONTROL, que hace que el
display que en OFF (D=0); también cursor en OFF (C=0) y sin parpadeo del
cursor en (B=0)
4. Se ejecuta el comando ENTRY MODE SET, que establece la dirección de
movimiento del cursor con autoincremento del cursor (I/D=1) y modo
normal, no desplazamiento, del display (S=0).
Estos comando estan en una tabla que se encuentran facilmente en internet, yo los tengo pero tarte de subir el archivo y es muy grande.

Espero que de algo te sirva. Saludos

Desconectado duendon

  • PIC10
  • *
  • Mensajes: 5
RE: Problemas con LCD 1x16
« Respuesta #4 en: 03 de Enero de 2006, 16:50:00 »
Hola poi5on, garcias por contestar, trate de seguir tus instrucciones y genere el sig codigo en basic, Pero sigue sin funcionar.

"##############################
"#                                                                     #
"#              LCD                           #
"#                                                        #
"##############################
symbol RS = b0
symbol INTR41 = b1
symbol INTR42 = b2
symbol DATO41 = b3
symbol DATO42 = b4
symbol MUESTRA = b5
"----------------------------------------
INICIO:
   low 1
   INTR41 = %00100000   "02H
   INTR42 = %00000000
   gosub LCD_INSTR      "INICIA
   INTR41 = %00100000
   INTR42 = %01000000
   gosub LCD_INSTR      "PREPARA 4 BIT
   INTR41 = %00000000
   INTR42 = %11110000
   gosub LCD_INSTR      "LCD ON
   INTR41 = %00000000
   INTR42 = %00010000
   gosub LCD_INSTR      "BORRA
   INTR41 = %00010000
   INTR42 = %10000000
   gosub LCD_INSTR      "MOVIMIENTO
"------------------------------------------------------------------
DAT:   DATO41 = %01000000
   DATO42 = %00010000
   gosub LCD_DATO      "GENERA LETA "A"
goto DAT
"------------------------------------------------------------------   
LCD_INSTR:
   low 1            "RS = 0
   pause 5         "Retardo 5 milisegundos
   let pins = INTR41      "Envia Instriccion ( 4bit MS )
   gosub LCD_E         "Avilita LCD
   let pins = INTR42      "Envia Instriccion ( 4bit mS )
   gosub LCD_E         "Avilita LCD
return
"------------------------------------------------------------------
LCD_DATO:
   high 1         "RS = 0
   pause 5         "Retardo 5 milisegundos
   MUESTRA = RS | DATO41   "Operacion Logica RS OR DATO41
   let pins = MUEsTRA   "Envia Resultado de Operacion Logica
   gosub LCD_E         "Avilita LCD
   MUESTRA = RS | DATO42   "Operacion Logica RS OR DATO42
   let pins = MUESTRA        "Envia Resultado de Operacion Logica
   gosub LCD_E         "Avilita LCD
return
"------------------------------------------------------------------
LCD_E:
   pause 5         "Retardo 5 milisegundos
   high 0         " E = 1
   pause 5         "Retardo 5 milisegundos
   low 0            " E = 0
   pause 5         "Retardo 5 milisegundos
return
"--------------------------------------------------------------------

No se si searn los tiempos pero la verdad nos epor q no anda, me tenia toda la fe con este. Se puede hacer algo?
Caracteristicas Hard:

LCD 1x16 ( PC 1602-F de POWERTIP )
PIC 16F819 ( PICAXE de MICROCHIP )

Soft Compilador:

Programming Editor v3.3.2
http://www.rev-ed.co.uk/picaxe/es/index.htm

Saludos

Desconectado duendon

  • PIC10
  • *
  • Mensajes: 5
RE: Problemas con LCD 1x16
« Respuesta #5 en: 03 de Enero de 2006, 16:52:00 »
Hola poi5on, garcias por contestar, trate de seguir tus instrucciones y genere el sig codigo en basic, Pero sigue sin funcionar.

"##############################
"#                                                                     #
"#              LCD                           #
"#                                                        #
"##############################
symbol RS = b0
symbol INTR41 = b1
symbol INTR42 = b2
symbol DATO41 = b3
symbol DATO42 = b4
symbol MUESTRA = b5
"----------------------------------------
INICIO:
   low 1
   INTR41 = %00100000   "02H
   INTR42 = %00000000
   gosub LCD_INSTR      "INICIA
   INTR41 = %00100000
   INTR42 = %01000000
   gosub LCD_INSTR      "PREPARA 4 BIT
   INTR41 = %00000000
   INTR42 = %11110000
   gosub LCD_INSTR      "LCD ON
   INTR41 = %00000000
   INTR42 = %00010000
   gosub LCD_INSTR      "BORRA
   INTR41 = %00010000
   INTR42 = %10000000
   gosub LCD_INSTR      "MOVIMIENTO
"------------------------------------------------------------------
DAT:   DATO41 = %01000000
   DATO42 = %00010000
   gosub LCD_DATO      "GENERA LETA "A"
goto DAT
"------------------------------------------------------------------   
LCD_INSTR:
   low 1            "RS = 0
   pause 5         "Retardo 5 milisegundos
   let pins = INTR41      "Envia Instriccion ( 4bit MS )
   gosub LCD_E         "Avilita LCD
   let pins = INTR42      "Envia Instriccion ( 4bit mS )
   gosub LCD_E         "Avilita LCD
return
"------------------------------------------------------------------
LCD_DATO:
   high 1         "RS = 0
   pause 5         "Retardo 5 milisegundos
   MUESTRA = RS | DATO41   "Operacion Logica RS OR DATO41
   let pins = MUEsTRA   "Envia Resultado de Operacion Logica
   gosub LCD_E         "Avilita LCD
   MUESTRA = RS | DATO42   "Operacion Logica RS OR DATO42
   let pins = MUESTRA        "Envia Resultado de Operacion Logica
   gosub LCD_E         "Avilita LCD
return
"------------------------------------------------------------------
LCD_E:
   pause 5         "Retardo 5 milisegundos
   high 0         " E = 1
   pause 5         "Retardo 5 milisegundos
   low 0            " E = 0
   pause 5         "Retardo 5 milisegundos
return
"--------------------------------------------------------------------

No se si searn los tiempos pero la verdad nos epor q no anda, me tenia toda la fe con este. Se puede hacer algo?
Caracteristicas Hard:

LCD 1x16 ( PC 1602-F de POWERTIP )
PIC 16F819 ( PICAXE de MICROCHIP )

Soft Compilador:

Programming Editor v3.3.2
http://www.rev-ed.co.uk/picaxe/es/index.htm

Saludos

Desconectado poi5on

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 127
RE: Problemas con LCD 1x16
« Respuesta #6 en: 07 de Enero de 2006, 18:20:00 »
Hola amigo
Coloca 150ms de retardo en la rutina de LCD_E. Si estas trabajando en PICAXE x que no lo haces en diagrama de flujo y dejas que genere el codigo? No tiene opciones que te permitan configurar la LCD? yo creo que el problema esta en los numeros que le estas enviando a la LCD para arrancarla, corresponden a la tabla de la LCD. Deberias enviar los siguientes comandos (hexadecimal):
01h
20h
0Ch
06h

Prueba enviando estos comandos y despues envias cualquier dato a ver que pasa.

Saludos

Desconectado enricar883

  • PIC10
  • *
  • Mensajes: 18
RE: Problemas con LCD 1x16
« Respuesta #7 en: 05 de Abril de 2006, 14:03:00 »
Hola amigos,

soy nuevo en esto de los pics y me he puesto a controlar un display LCD. Lo que me ocurre es lo que comenta Radon en su respuesto, se inicializa el LCD y la primera linea se queda en blanco, creia que era culpa de la conexion, pero por lo visto es problema de que nos se ha inicializado.

Os pongo aqui el programa que lo controla.

Gracias

;************************************** LCD_08.asm ************************************
;
;   ===================================================================
;     Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;     E. Palacios, F. Remiro y L. López.      www.pic16f84a.com
;      Editorial Ra-Ma.  www.ra-ma.es
;   ===================================================================
;
; Mientras se mantenga presionado el pulsador conectado al pin RA4, se incrementa un contador
; visualizado en la pantalla en tres formatos: decimal, hexadecimal y binario. Un ejemplo:
; Primera Línea:   "CE   206"
; Segunda Línea:   "11001110"
;
; ZONA DE DATOS **********************************************************************

   LIST      P=16F84A
   INCLUDE    <P16F84A.INC>
   __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC

   CBLOCK  0x0C
   Contador                  ; El contador a visualizar.
   Auxiliar
   Desplaza
   ENDC

#DEFINE  Pulsador PORTA,4         ; Línea donde se conecta el pulsador.

; ZONA DE CÓDIGOS ********************************************************************

   ORG   0                     ; El programa comienza en la dirección 0.
Inicio
   call   LCD_Inicializa
   bsf      STATUS,RP0
   bsf      Pulsador            ; Línea del pulsador configurada como entrada.
   bcf      STATUS,RP0
   clrf   Contador            ; Inicializa el contador y
   call   VisualizaContador      ; lo visualiza.
Principal
   btfsc   Pulsador            ; Lee el pulsador.
   goto   Fin                  ; Si no pulsa salta a final.
   call   Retardo_20ms         ; Espera a que se estabilicen los niveles de tensión.
   btfsc   Pulsador            ; Vuelve a leer el pulsador.
   goto   Fin
   incf   Contador,F            ; Incrementa el contador.
   call   VisualizaContador
   call   Retardo_200ms         ; Se incrementará de nuevo cuando pase este
Fin   
   goto   Principal            ; tiempo.

; Subrutina "VisualizaContador" --------------------------------------------------------

VisualizaContador
   call   LCD_Borra            ; Borra la pantalla.
   movf   Contador,W            ; A continuación visualiza el contador.
   call   LCD_ByteCompleto      ; Visualiza en hexadecimal.
   call   LCD_TresEspaciosBlancos   ; Como separador.
   movf   Contador,W            ; Ahora se visualiza en decimal.
   call   BIN_a_BCD            ; Primero se convierte a BCD.
   movwf   Auxiliar            ; Guarda las decenas y unidades.
   movf   BCD_Centenas,W         ; Visualiza centenas.
   call   LCD_Nibble
   movf   Auxiliar,W            ; Visualiza las decenas y unidades.
   call   LCD_ByteCompleto
;
   call   LCD_Linea2            ; En la segunda línea para visualizar en binario.
   movlw   .8                  ; Utiliza el registro auxiliar como contador del
   movwf   Auxiliar            ; número de bits que se va visualizando por la
   movf   Contador,W            ; pantalla.
   movwf   Desplaza
VisualizaBit
   rlf      Desplaza,F            ; El bit a visualizar pasa al Carry .
   movlw   "1"                  ; En principio supone que es un uno.
   btfss   STATUS,C            ; Comprueba su valor.
   movlw   "0"                  ; Ha sido cero.
   call   LCD_Caracter         ; Lo visualiza.
   decfsz   Auxiliar,F            ; ¿Ha terminado de visualizar los 8 bits?
   goto   VisualizaBit         ; No, sigue visualizando otro bit.
   return

   INCLUDE  <LCD_4BIT.INC>
   INCLUDE  <RETARDOS.INC>
   INCLUDE  <BIN_BCD.INC>
   END
   
;   ===================================================================
;     Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
;     E. Palacios, F. Remiro y L. López.      www.pic16f84a.com
;      Editorial Ra-Ma.  www.ra-ma.es
;   ===================================================================