TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: j_fernandez en 27 de Abril de 2005, 01:30:00
-
Wola !! He realizado un programilla con un PIC 16F873 en el que he utilizado la libreria LCD.c, pues bien, cuando lo simulo con Proteus la segunda linea no la muestra.
Si no me equivovo la libreria es para 16X2 y el dispositivo que he cogido es de 16x2.
Alguien le ha sucedido algo similar o sabe que puede estar pasando??
Gracias y un saludo
-
Lo que dices, es correcto. Pega el programa, y lo revisamos.
Un saludo
-
Gracias por tu atencion, mira el trozo de codigo es :
lcd_putc("f"
;
lcd_gotoxy(7,1);
lcd_putc("MENU"
;
lcd_gotoxy(2,2);
lcd_putc("CONFIGURACION"
;
delay_ms(1000);
Gracias de nuevo y un saludo
-
Oye, pués será una tontería porque lo que has puesto está bien.
Las conexiones a la LCD ¿estaran bien? Deben de estarlo, de lo contrario no te mostraría la primera línea (MENU): 3 bits de control y 4 de datos (total 7 a la LCD)
¿Qué versión de PROTEUS es? por preguntar algo. Pega el programa entero, si no te sale donde está el error.
-
Hola, gracias de nuevo. El resto de programa no creo que me afecte a la visualizacion, la version que utilizo es una francesa que encontre en emule "PROTEUS VSM DEVELOPMENT KIT 5.1". Sabes donde podria encontrar la version española?
Gracias y perdona las molestias
-
En castellano no hay. Busca en emule una versión superior que sí las hay.
Un saludo
-
Pues si pues si, estas cosas pasan, porque el controlador del lcd que
utilizes no tiene por que ser igual que el del modelo de simulacion de proteus,
De hecho a veces no es asin. algun lcd 16x1 se tiene que configurar como de
2 lineas para que se encienda todo, y a veces para escribir en esa segunda linea hay que cambiar la direccion de memoria.
solucion puebra a cambiar el modo de display en la inicializacion
(numero lineas en la pantalla) y si se enciende pero solo escribes en la
primera mitad seguro que necesitas poner una direccion de memoria para
la segunda linea antes de seguir escribiendo.
la verdad que no se como es el LCD.C pero a lo mejor es que te cambia la
direccion cuando escribes en la segunda linea, y esa direccion no coincide con
la direccion de la segunda linea del modelo del proteus, eso explicaria
porque no escribe (escribe pero no se ve en el display).


-
Gracias telekitor, se que tiene q ir por hay por lo q he estado mirando en la configuracion, pero toque lo q toque demomento no lo he arreglado. Mientras me funcione cuando monte el circuito me conformo jejeje.
Gracias de nuevo y un saludo
-
a ver ver, si quieres saber la direccion del modelo de proteus,
a mi el 16x2 es el LM016L , pincha con el boton derecho (se pone rojo)
le das con el boton izquierdo, tachan!!!!!!! se abre el edit component.
En propiedades avanzadas tienes row1 y row2 pincha en row2 y te dice las
direcciones , en mi caso sale C0-CF por lo que para escribir en la segunda linea
antes de mandar la cadena para la 2 linea tienes que escribir en el lcd la direccion
C0 lo demas es normal.
si la direccion de lcd.c para la segunda linea no es C0 no se vera nada en la segunda linea.
No te preocupes con el lcd real, si tiene otra direccion distinta de la del proteus
la miras en el datasheet y la cambias, funcionara igual.
visto uno vistos todos.


-
Hola telekitor, gracias por tu ayuda pero no funciona, eso ya lo habia probado.
Al colocarte en la ROW1, si te fijas empieza en la 80 y sin embargo el compilador me lo envia a la 00 y se visualiza perfectamente la primera pantalla.
Para la row 2 he probado a cambiar en la libreria la direccion y a cambiar en la configuracion del display y na de na.
Un saludo y gracias de todas formas
-
a ver segun he visto por ahi la segunda linea empieza en 40 hexadecimal
te mando un link sobre lcds
http://home.iae.nl/users/pouweha/lcd/lcd.shtml
el punto 2.3.2 para 2 lineas
![Angelito Angelito]()
-
Una pagina muy interesante telekitor, la he estado ojeando y efectivamente concuerda con los datasheets del lcd. El problema lo solucioné ayer por la tarde, no era problema de software, sino que al montar en proteus puse una resistencia entre la linea que une el pic con lcd (linea de enable) tal y como habia visto en un libro, y al quitarla (por xiripa) funciono correctamente.
De todas formas tal y como tu dices el pic manda para la primera linea la 0x00 y para la segunda 0x40 mientras que en el LCD de proteus son la 0x80 y la 0xC0 (raro no?), pero mientras funcione no le buscare mas explicaciones.
Gracias a todos por vuestra ayuda.
Un saludo
-
probablemente esas direcciones se correspondan con algun
modelo de lcd del que se ha sacado el modelo para el proteus,
En la pagina que te di http://home.iae.nl/users/pouweha/lcd/lcd.shtml
dice algo de esas direcciones y da unos fabricantes, (nota1 2x16)
According to their datasheets DDRAM addresses 0x80..0x8F + 0xC0..0xCF are used.
bueno solucionado entonces 





-
Realmente las direcciones de la DDRAM para las posiciones iniciales de la línea 1 y 2 de la LCD es 0x00 y 0x40 ya que constan solamente de 7 bits. Lo que ocurre es que PROTEUS utiliza el dato completo de 8 bits que se envía al LCD por el bus de datos y el bit más alto para ese comando vale “1” y por eso cambia aparentemente. Me explico con un ejemplo:
El comando para situarse en una posición determinada de la DDRAM según el fabricante es:
“1 A6 A5 A4 A3 A2 A1 A0” , siendo Ax la dirección donde se quiere situar.
Así por ejemplo para situarlo en la primera posición de la segunda línea que según el fabricante es la dirección 0x40 resulta
A6 A5 A4 A3 A2 A1 A0 = 100 000
Añadiendo el “1” del bit más alto habría que enviar por el bus de datos lo siguiente:
1 A6 A5 A4 A3 A2 A1 A0 = 1100 0000 = 0xC0.
Y ahí está la confusión. PROTEUS, añade el “1” del bit más alto del comando que se envía por el bus de datos como integrante de la dirección.
Espero que se me haya entendido, aunque debo advertir, que esta conclusión la he deducido analizando el caso, realmente no lo he visto escrito por ningún sitio, por tanto puede ser discutible, aunque pienso que este razonamiento es impecable.
Saludos.
-
Muy muy buena explicacion Meybel !! Ha quedado muy claro, no tenia ni idea de porque podia ser. Eres una makina!!!!
Gracias a todos por colaborar, me aveis ayudado mucho.
Un saludo