TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: duendon 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
-
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.
-
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
-
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
-
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
-
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
-
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
-
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
; ===================================================================