Problema con LCD 16x2

OK.
Disculpas por no haber dado respuesta antes, estuve algo ocupado.

Hice algunas modificaciones tanto al código cómo al diseño para adaptar la pantalla al puerto C.
Ésto con el motivo de utilizar el puerto B para el teclado, y poder usar las resistencias pull-up internas.

Pruébalo con las nuevas modificaciones y nos comentas el resultado.

Suerte.

pues al grabar la memoria dice que la graba, pero luego le doy en verificar y me marca este error

y luego pues lo cargo para ver en la proto y me aparece el mensaje de " Teclee C " y no pasa nada, me puse a teclear todas las teclas y con la B aparece el mensaje de "Cambiar" pero tecleo numero y no aparecen los asteriscos ni numeros ni nada
 

Adjuntos

  • error.jpg
    error.jpg
    81.5 KB · Visitas: 21
me puse a teclear todas las teclas y con la B aparece el mensaje de "Cambiar" pero tecleo numero y no aparecen los asteriscos ni numeros ni nada
Debes tener mal las conexiones del teclado, revisa el orden.
pues al grabar la memoria dice que la graba, pero luego le doy en verificar y me marca este error
Busca información acerca de ese error de Master-Prog en el Foro.

Saludos.
 
por que cuando predo el display no aparece el mensaje " introducir clave " aparece directamente el tecle C

Edit::

ya revise las conecciones y estan bien, me pide tecla C y funciona con la B, aunque es un dealle menor, despues tecleo B y me pide que introduzca una nueva clave, primero tengo que poner la original para que me pida una clave nueva, pero pongo la nueva y no pasa nada se queda pidiendo la tecla nueva, pero si cuando voy a introducir la clave original para cambiarla, esa la meto mal, alli si me marca error... Y no aparezen los asteriscos cuando tecleo algo en ningun caso
 
Última edición:
pues al grabar la memoria dice que la graba, pero luego le doy en verificar y me marca este error

y luego pues lo cargo para ver en la proto y me aparece el mensaje de " Teclee C " y no pasa nada, me puse a teclear todas las teclas y con la B aparece el mensaje de "Cambiar" pero tecleo numero y no aparecen los asteriscos ni numeros ni nada

Lo que debes hacer primero, es descartar que el microcontrolador esté dañado. A mi me aparecía ese error en PICpgm programmer, se devía por malas conexiones, o voltaje de alimentación insuficiente en el micro. También puedes probar bajando la velocidad de programación.

Para verificar el micro, intenta crear un programa sencillo, como encender un LED, lo programas y verificas.

También puedes primero:

Borrar el micro

Segundo: Programar el MCU con el programa básico (Recuerda configurar correctamente los pines) un ejemplo:

//Si usas compilador XC, y un cristal de cuarzo de menos de 10MHz

#include <xc.h>

//Si alguno de los siguientes presenta problemas, comentarealo o eliminalo
#pragma config WDTE=OFF //Perro guardian deshabilitado
#pragma config FOSC=XT //Cristal de menos de 10MHz
#pragma config LVP=OFF //Programación a bajo voltaje deshabilitada
#pragma config CP=OFF //Protección de codigo deshabilitada
#pragma config PWRTE=OFF //Power-ON reset deshabilitado

#define LED PORTBbits.RB5

void main(void)
{
TRISBbits.TRISB5=0; //Configuro puerto como salida
LED=1; //Enciendo el LED

while(1) //Ciclo infinito para que no se resetee el micro
{

}
}


Tercero: verificar voltajes.
 
Lo que debes hacer primero, es descartar que el microcontrolador esté dañado. A mi me aparecía ese error en PICpgm programmer, se devía por malas conexiones, o voltaje de alimentación insuficiente en el micro. También puedes probar bajando la velocidad de programación.

Para verificar el micro, intenta crear un programa sencillo, como encender un LED, lo programas y verificas.

También puedes primero:

Borrar el micro

Segundo: Programar el MCU con el programa básico (Recuerda configurar correctamente los pines) un ejemplo:

//Si usas compilador XC, y un cristal de cuarzo de menos de 10MHz

#include <xc.h>

//Si alguno de los siguientes presenta problemas, comentarealo o eliminalo
#pragma config WDTE=OFF //Perro guardian deshabilitado
#pragma config FOSC=XT //Cristal de menos de 10MHz
#pragma config LVP=OFF //Programación a bajo voltaje deshabilitada
#pragma config CP=OFF //Protección de codigo deshabilitada
#pragma config PWRTE=OFF //Power-ON reset deshabilitado

#define LED PORTBbits.RB5

void main(void)
{
TRISBbits.TRISB5=0; //Configuro puerto como salida
LED=1; //Enciendo el LED

while(1) //Ciclo infinito para que no se resetee el micro
{

}
}


Tercero: verificar voltajes.

ya cheque eso, era por que en el programa D@rkbytes cambio el valor de CPD_ lo puso en on
 
Última edición por un moderador:
por que cuando prendo el display no aparece el mensaje " introducir clave " aparece directamente el tecle C

Edit::

ya revise las conecciones y estan bien, me pide tecla C y funciona con la B, aunque es un dealle menor, despues tecleo B y me pide que introduzca una nueva clave, primero tengo que poner la original para que me pida una clave nueva, pero pongo la nueva y no pasa nada se queda pidiendo la tecla nueva, pero si cuando voy a introducir la clave original para cambiarla, esa la meto mal, alli si me marca error... Y no aparezen los asteriscos cuando tecleo algo en ningun caso
Definitivamente tienes dañado tu PIC.
Me acaban de traer un PIC16F877A, y la pantalla funciona perfectamente por el puerto D.
Lo probé con el mismo programa del post #11 cambiando al puerto D, y no existe ningún problema.
También probé el programa del post #13 con el mismo buen resultado.

Si cómo mencionas, ya revisaste bien tus conexiones, entonces reemplaza el PIC,
ya que cómo te mencione anteriormente, no es problema de software.

Suerte.
 
Definitivamente tienes dañado tu PIC.
Me acaban de traer un PIC16F877A, y la pantalla funciona perfectamente por el puerto D.
Lo probé con el mismo programa del post #11 cambiando al puerto D, y no existe ningún problema.
También probé el programa del post #13 con el mismo buen resultado.

Si cómo mencionas, ya revisaste bien tus conexiones, entonces reemplaza el PIC,
ya que cómo te mencione anteriormente, no es problema de software.

Suerte.

pues lo del post post #11 y el post #13 me funciono bien, alli mismo comente que si funciono a la perfeccion, lo que comente arriba es lo del proyecto completo que subiste ya con el teclado donde pusiste en le puerto B el display en el C el teclado...

Este proyecto que modificaste no lo haz cargado en tu pic que te acaban de traer ?
 
Última edición:
pues lo del post post #11 me funciono bien, alli mismo comente que si funciono a la perfeccion, lo que comente arriba es lo del proyecto completo que subiste ya con el teclado donde pusiste en le puerto B el display en el C el teclado...
Ahí mencionaste que funcionaba por el puerto B.
Lo que yo verifique ahora, es que ese mismo programa funciona también por el puerto D.
Lo cual quiere decir que los programas y el PIC no tienen problema para usar la pantalla por el puerto D.
Este proyecto que modificaste no lo haz cargado en tu pic que te acaban de traer ?
Si, y funciona sin problemas, incluso tampoco tengo problemas al grabar el PIC con protección.
Aclaro que utilicé WinPic800 con el JDM por ICSP para grabar el PIC.
Cómo no tengo un teclado matricial 4x4, hice las pruebas conmutando los pines del puerto B.
Por ejemplo para la clave inicial que es 12345, entonces hago lo siguiente...
Para el número 1 se conmuta RB0 con RB4
Para el número 2 se conmuta RB0 con RB5
Para el número 3 se conmuta RB0 con RB6
Para el número 4 se conmuta RB1 con RB4
Para el número 5 se conmuta RB1 con RB5
Así consigo la secuencia de la clave 12345, y los mensajes se muestran correctamente en la pantalla.
Las rutinas trabajan bien, y no existen problemas, por eso te digo que cambies el PIC.

En la corrección anterior no quité las variables que no se usan.
Y la rutina para leer la clave inicial en la EEPROM, estaba mal y no funcionaba.
Es decir, siempre al iniciar, la clave sería 12345, con este nuevo cambio se guarda la clave cambiada.
Y al desconectar el PIC, o dar un reset, se lee la clave que se guardó últimamente.

Adjunto el programa con los nuevos cambios, y usando optimización de código.

Notas:
.- Como no puedes grabar el PIC con protección de datos en EEPROM, cambie el fuse por CPD_OFF
.- Para borrar los datos de la EEPROM en la simulación, ir al menú Debug/ Reset Persistent Model Data
.- Si tu PIC está dañado, estos cambios no harán que funcione.

Saludos.
 

Adjuntos

  • Cerradura 4x4 SCH.jpg
    Cerradura 4x4 SCH.jpg
    130.3 KB · Visitas: 20
  • Cerradura 4x4 II.rar
    132.3 KB · Visitas: 21
Última edición:
Hola, D@rkbytes, ya que sos moderador, podrías poner nuestros mensajes, en uno nuevo, así no desvirtuamos el tema inicial... ;)

En el archivo LCD_TEST, te faltó;

#define LCD_DATA_PORT getenv("SFR:pORTD")

Fijate si funciona con la modificación que hice...

PD: No tengo un 4550 para probarlo.
PD2: ¿Probaste si el puerto D está funcionando?...
PD3: No incluí el archivo LCD.c, porque usé el del CCS.. ;)
 

Adjuntos

  • Para_Darkbytes.zip
    37.9 KB · Visitas: 9
Hola, D@rkbytes, ya que sos moderador, podrías poner nuestros mensajes, en uno nuevo, así no desvirtuamos el tema inicial... ;)

En el archivo LCD_TEST, te faltó;

#define LCD_DATA_PORT getenv("SFR:pORTD")

Fijate si funciona con la modificación que hice...

PD: No tengo un 4550 para probarlo.
PD2: ¿Probaste si el puerto D está funcionando?...
PD3: No incluí el archivo LCD.c, porque usé el del CCS.. ;)
Saludos, y gracias.
Dejemos los posts aquí, para no crear un tema mas acerca de problemas con LCD.

Precisamente hoy que fui por un pedido con el distribuidor de Microchip aquí en México,
les hice el comentario acerca de la falla que tenía con una pantalla conectada por el puerto D.
Enseguida llamaron a una de las personas que imparten los cursos, y me dijo que no debía de haber problema.
Inmediatamente modificó un programa para usar el puerto D con una pantalla 16x2, y funcionó. :eek:

El programa no tenía nada extraño que yo hubiera pasado por alto, así que decidí comprar otro PIC.
A final de cuentas, me regalaron el PIC y apenas hace un rato lo probé.
El problema es que el PIC está dañado. Por alguna razón el pin RD7 no sirve. :confused:

Ahora con respecto a agregar...
#define LCD_DATA_PORT getenv("SFR:pORTD")
Ésta definición es la que se usa por default en el PIC18F4550, así que sin agregarla funciona.

Muchas gracias nuevamente por tomarte la molestia de revisar el programa.
Ahora ya sabemos que el puerto D es apto para trabajar la pantalla, y que la falla estaba en el PIC.

2353048.jpg

Saludos. :apreton:
 
Saludos, y gracias.
Dejemos los posts aquí, para no crear un tema mas acerca de problemas con LCD.

[...]
A final de cuentas, me regalaron el PIC y apenas hace un rato lo probé.
El problema es que el PIC está dañado. Por alguna razón el pin RD7 no sirve. :confused:

Ahora con respecto a agregar...
#define LCD_DATA_PORT getenv("SFR:pORTD")
Ésta definición es la que se usa por default en el PIC18F4550, así que sin agregarla funciona.

Muchas gracias nuevamente por tomarte la molestia de revisar el programa.
Ahora ya sabemos que el puerto D es apto para trabajar la pantalla, y que la falla estaba en el PIC.


Saludos. :apreton:
Excelente, y disculpa por desvirtuar. Me parecía que algo pasaba, y era el puerto del PIC.

Saludos... (y)
 
Buenas tardes,

Primeramente saludar al foro soy nuevo en todo esto de los foros y también de esta parte de electrónica, nueva para mi a raíz de hacer algunos montajes en clase y curiosidad por seguir “trasteando” en casa con tiempo y con bastante curiosidad.

El problema que tengo es que no consigo visualizar en el LCD el texto programado en el PIC, la misma practica funciono en clase hace unos meses a la primera y sin problemas y ahora estoy cargando el ejercicio guardado en “.hex” en mi programadora en casa y no encuentro la manera de hacerla funcionar, igualmente he intentado realizar un proyecto nuevo con LCD, incluso alguno otro distinto y la pantalla se queda igual sin mostrar el texto, otro tipo de montajes sin LCD funcionan sin problemas.

El ajuste del contraste y la iluminación de la pantalla se pueden visualizar sin problemas.

El ejercicio trata de 2 pulsadores y un led indicador, encendido y apagado con el mensaje de paro y macha en la pantalla, decir también que el encendido del led funciona correctamente.
El ejercicio esta realizado con el programa Flowcode, la simulación en el programa es también correcta.

He podido seguir algún hilo en el foro exactamente con el mismo problema pero ni así he podido aun resolver, si hay alguien que pueda echarme una mano o alguna orientación, estoy seguro que se trata de alguna tontería o error de conexión o algo que se me escapa casi estoy seguro que no es cosa del programa ni del PIC, hasta parece al pulsar "PARO" - "MARCHA" que la función la hace, pero no se visualiza bien.

Adjunto el esquema del montaje realizado y foto de la pantalla con lo que hasta ahora se puede ver en ella

Desde ya gracias, un saludo :)
 

Adjuntos

  • Esquema LCD.jpg
    Esquema LCD.jpg
    307.3 KB · Visitas: 120
  • Foto LCD.jpg
    Foto LCD.jpg
    60.7 KB · Visitas: 16
He conseguido finalmente que me funcione con algunas variaciones en el circuito respecto al que que hice en clase, el LCD era distinto al que tengo ahora y creo que hay alguna variación en algún cable. En este caso tAMbIEN he añadido una resistencia conectada al borne central de regulación del potenciómetro, conectada a masa, lo he podido leer en algún lado y después de mirar y mirar conectar... soldar y echarle algún rato que otro funciona. Otra cosa que he podido ver es que en algún momento el LCD arranca con símbolos raros, desconecto la alimentación del LCD vuelvo arrancar y perfectamente. Seguiré trasteando ahora que se que funciona.... hasta me sorprende que funcione aun, no tenia ya muchas esperanzas de que siguiera en buenas condiciones y mucho menos conseguirla arrancar.

saludos y feliz domingo :)
 

Adjuntos

  • LCD1.jpg
    LCD1.jpg
    33.5 KB · Visitas: 14
Última edición por un moderador:
He conseguido finalmente que me funcione con algunas variaciones en el circuito respecto al que que hice en clase, el LCD era distinto al que tengo ahora y creo que hay alguna variación en algún cable
Te felicito, pero fijate en la imagen de la protoboard que el LCD es de 16 pines, que sería:

1.- VSS (GND, masa, 0V)
2.- VDD (+5V)
3.-Vlcd (contraste)
4.- RS ( Register Select)
5.- R/W ( Read/Write)
6.- E ( Enable)
7.- DB0 (DataBit0)
8.- DB1 (DataBit1)
9.- DB2 (DataBit2)
10.- DB3 (DataBit3)
11.- DB4 (DataBit4)
12.- DB5 (DataBit5)
13.- DB6 (DataBit6)
14.- DB7 (DataBit7)
15.- LED+ (LED BackLight = Ánodo)
16.- LED- (LED BackLight = Cátodo)

Vos conectaste mal los cables de "data", contaste los pines del backlight como uno de datos... ;)

Ver el archivo adjunto 93060
 
DJ T3 gracias :)

Si me di cuenta qUE falle algo en esos 4 o 6 cables mejor dicho, el tema es que en el primer montaje en clase la pantalla era distinta a la que compre yo y intente respetar el conexionado hasta el ultimo momento qUE conseguí que funcionara viendo algunas diferencias respecto al otro montaje, lo único qUE aun no he tenido tiempo de mirarlo bien todo y compararlo con el otro montaje.

En lo que pueda lo miro y rectifico el esquema que no me cuesta nada :)

saludos
 
Última edición por un moderador:
Correcto DJ T3 la otra pantalla tenia 14 bornes de conexión en lugar de 16 que fue mi montaje en casa, se me pasó por completo en todo momento sin caer que la otra LCD no era retro iluminada.

Adjunto esquema nuevo

Saludos!
 

Adjuntos

  • LCD2.jpg
    LCD2.jpg
    311.3 KB · Visitas: 16
Última edición:
Hola amigos del foro...

Estoy haciendo mi primer proyecto con LCD, hice un código de "ejemplo" algo sencillo, pero el LCD no hace nada :( cuando inicio el micro el LCD parpadea pero vuelve y se apaga.
Y cuando presiono el botón vuelve y hace lo mismo :( en proteus funciona bien, no me da ningún error...

¿Qué puede ser? Ayuda.

Este es el código

Código:
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : Carlos Guerrero                                   *
'*  Notice  : Copyright (c) 2014 Carlos Guerrero                *
'*          : All Rights Reserved                               *
'*  Date    : 17/01/2014                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
;-------------------------- Base settings --------------------------
                                                                   
Device = 16F887   ; Chosen Picmicro
Xtal = 8
Config1 INTRC_OSC_NOCLKOUT, PWRTE_ON, MCLRE_ON, CP_OFF, CPD_OFF, WDT_OFF, FCMEN_ON, IESO_OFF, LVP_OFF, BOR_OFF
Config2 WRT_OFF, BOR21V
ANSEL = 0
ANSELH = 0
OSCCON = $74
                                                                   
;----------- LCD --------------------------
                                                                   
Declare  LCD_Type ALPHA   ; LCD type - alphanumeric
Declare  LCD_DTPin  PORTA.0   ; LCD data port
Declare  LCD_ENPin  PORTB.3   ; E line
Declare  LCD_RSPin  PORTA.4   ; RS line
Declare  LCD_Interface  4   ; Word length of the tyre of data
Declare  LCD_CommandUs  2000   ; Delay before a command parcel
Declare  LCD_DataUs  50   ; Delay before a data parcel
Declare  LCD_Lines   2   ; LCD lines number
                                                                   
;-------------------------- Ports --------------------------
                                                                   
TRISA = 0
TRISB = 0
TRISC = 1
TRISD = $F7
TRISE = 1                                                                   
#define  PortB_Pullups = On   ; Turn on PORTB pull-ups
Declare  All_Digital = On   ; Set all ports digital inputs/exits
                                 
;------------------- Symbols --------------------------
                                  
Symbol   LED1 = PORTD.0   ;LED_IN
Symbol   MO = PORTD.1   ;MENU/OK
Symbol   DOWN = PORTD.2  ;DISMINUIR DIAS/MES
Symbol   UP = PORTD.3   ;AUMENTAR DIAS/MES
Symbol   LED = PORTB.7

;------------------- Variables -------------------------
                                  
Dim   VAR1  As  Byte   ;IN
Dim   VAR2  As  Byte   ;CONTEO DE MES 1-3
Dim   VAR3  As  Byte   ;MO
Dim   VAR4  As  Byte   ;DOWN
Dim   VAR5  As  Byte   ;UP
Dim   EE  As  Byte   ;
Dim   LE  As  Byte   ;
Dim   DIA  As  Byte   ;
Dim   MES  As  Byte   ;
Dim   IN  As  Byte   ;
Dim   FUN  As  Byte   ;
Dim   POS As Byte
Dim   RESULTADO  As  Word
Dim   B0 As Byte ;VARIABLE PARA MOVIMIENTOS
Dim   B1 As Byte ;VARIABLE PARA MOVIMIENTOS

VAR1 = 0
VAR2 = 0
VAR3 = 0
VAR4 = 0
VAR5 = 0
EE = 0
LE = 0
IN = 0
POS = 0
RESULTADO = 0
EWrite $FF, [0]
VAR2 = ERead $7F
MES = ERead $FD
DIA = ERead $FE

DelayMS 500                                                              
;-------------------------------- Start ----------------------------
For B0 = 0 To 5
Low LED
DelayMS 500
High LED
DelayMS 500
Next
INICIO:

PRESENTACION:
Print $fe, 1 ' Limpiar la pantalla
Print $fe, 2 ' Posicionar el cursor en el inicio
Print " * SDSDSDS * "
Print $fe,$C0, "CEL 544 544 6817"
P_PRESENTACION:
Button MO, 0, 255, 255, VAR3, 1, MENU_SELECCION
GoTo P_PRESENTACION

MENU_SELECCION:
Print $fe, 1 ' Limpiar la pantalla
Print $fe, 2 ' Posicionar el cursor en el inicio
Print " * EJEMPLO * "
FI:
GoTo FI
End

https://www.youtube.com/watch?v=lr6lFw4ra58&feature=youtube_gdata_player ahí pueden ver lo que hace...
 
Quizás estés equivocando los pines de conexión a la pantalla.

Aquí tienes esta configuración...
Declare LCD_ENPin PORTB.3 ; E line
Declare LCD_RSPin PORTA.4 ; RS line

Tal vez estás usando el pin RB4 y no el pin RA4, que está del lado contrario del PIC.

Recomendaciones:
En PICBasic de proton para borrar la pantalla se escribe tan sólo Cls
Para escribir en la pantalla es de esta forma: Print At Line, Position,"Hola Mundo"
Dónde el primer parámetro es la línea y el segundo la posición. P.E: Print At 1, 1, "Hola Mundo"
También puedes usar la instrucción Cursor Line, Position para situar el cursor.

Sobre los fuses de la palabra de configuración:
No es necesario que los coloques todos, algunos tienen un valor por defecto.
Podrías escribir así la palabra de configuración...
Reminders = False ; Desactivar advertencias.
Config1 INTOSCIO, PWRTE_ON, WDT_OFF, LVP_OFF, BOREN_OFF
Config2 WRT_OFF, BOR40V ; Éstos los puedes omitir, pues son los fuses por defecto.
Reminders = True ; Activar advertencias.
Xtal = 8MHz ; Oscilador principal a 8MHz.

Suerte.

PD. En el vídeo no se ve bien lo que ocurre con la pantalla.
 
Quizás estés equivocando los pines de conexión a la pantalla.

Aquí tienes esta configuración...
Declare LCD_ENPin PORTB.3 ; E line
Declare LCD_RSPin PORTA.4 ; RS line

Tal vez estás usando el pin RB4 y no el pin RA4, que está del lado contrario del PIC.

Recomendaciones:
En PICBasic de proton para borrar la pantalla se escribe tan sólo Cls
Para escribir en la pantalla es de esta forma: Print At Line, Position,"Hola Mundo"
Dónde el primer parámetro es la línea y el segundo la posición. P.E: Print At 1, 1, "Hola Mundo"
También puedes usar la instrucción Cursor Line, Position para situar el cursor.

Sobre los fuses de la palabra de configuración:
No es necesario que los coloques todos, algunos tienen un valor por defecto.
Podrías escribir así la palabra de configuración...
Reminders = False ; Desactivar advertencias.
Config1 INTOSCIO, PWRTE_ON, WDT_OFF, LVP_OFF, BOREN_OFF
Config2 WRT_OFF, BOR40V ; Éstos los puedes omitir, pues son los fuses por defecto.
Reminders = True ; Activar advertencias.
Xtal = 8MHz ; Oscilador principal a 8MHz.

Suerte.

PD. En el vídeo no se ve bien lo que ocurre con la pantalla.

Si ya me funcionó :D , le cambié la parte de limpiar la pantalla x cls como dijiste pero entonces la pantalla parpadeaba, entonces lo dejé como lo tenía... Gracias de todas formas :thumbup::thumbup:
 
Atrás
Arriba