Autor Tema: Rutina LCD 4 Bits  (Leído 34430 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Rutina LCD 4 Bits
« Respuesta #15 en: 22 de Junio de 2006, 15:35:57 »
maunix, he copiado las rutinas (que no sé si realmente serán buenas) en la carpeta donde tenía el programa.

Luego he utilziado # como bien me has dicho,  los errores que me salian al compilar, los he solucionado poniendo en el encabezado del programa

LCD_Inicializa
LCD_Mensaje
LCD_Linea2
LCD_Mensaje

Y ya no me sale ese fallo... pero no lo entiendo, porque las subrutinas LCD_Inicia están dentro de la rutina P876ALCD_4B.INC, creo que el problema es cuando en mi programa principal le digo que haga algo de la librería P876ALCD_4B no la encuentra...

Me pasarón una rutina, pero no sé yó si será buena.

Os la pongo: http://rapidshare.de/files/23810913/P876ALCD_4B.INC.html

Entonces cuando en mi programa principal pongo LCD_Inicia ya es donde no lo encuentra...


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Rutina LCD 4 Bits
« Respuesta #16 en: 22 de Junio de 2006, 17:23:33 »
Mira, he echado un vistazo al archivo .inc que adjuntaste y tiene las rutinas que te hacen falta (más allá de que esten bien o mal).

maunix, he copiado las rutinas (que no sé si realmente serán buenas) en la carpeta donde tenía el programa.

Luego he utilziado # como bien me has dicho,  los errores que me salian al compilar, los he solucionado poniendo en el encabezado del programa

LCD_Inicializa
LCD_Mensaje
LCD_Linea2
LCD_Mensaje

Si tu agregas esos labels estas generando las etiquetas que te hacen falta, y por eso no te da error.  Tu código hace un call a una posición del programa definida por las etiquetas y al poner las etiquetas ya las encuentra entonces no te genera error.  Pero no hay código en estas supuestas 'subrutinas' . :?

En un código no puede haber 2 labels iguales, lo cual me hace pensar que si no te dió error de tener 2 labels te ensambla bien porque precisamente no te encuentra el archivo P876ALCD_4B.inc

Creo que tal vez en tu código estás haciendo mal el include, o te falta una letra o está mal el path o algo, pero de ninguna forma se está realizando.  Si no te anda y está bien, prueba hacer el include completo  así

#include "c:\micarpeta\archivo.inc"

con las comillas.


Resumen: Debes eliminar esos labels que agregaste y hacer que se te ensamble el archivo .inc  NO te da error pero el código no hace nada porque no hay nada en dichos labels.

Saludos


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Rutina LCD 4 Bits
« Respuesta #17 en: 22 de Junio de 2006, 18:30:44 »
He probado de todo...

En la misma carpeta poniendo #include como me has dicho... y nada... lo que no sé si las librerías tienen que ser *.inc o *.lib, el programa lo estoy haciendo en assembler...

Mañana por la mañana vovleré a ver si puedo avanzar algo... yo creo que es lo que tu dices... que cuando llamo a la etiqueta no la encuentra...

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: Rutina LCD 4 Bits
« Respuesta #18 en: 22 de Junio de 2006, 18:36:24 »
La rutina para la LCD puede ser #Include "nombre.lib" o #Include "nombre.inc"

Saludos LabPIC
« Última modificación: 23 de Junio de 2006, 12:51:26 por LabPIC »
¡¡¡Viva México cabrones!!!

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Rutina LCD 4 Bits
« Respuesta #19 en: 22 de Junio de 2006, 20:50:53 »
He probado de todo...

En la misma carpeta poniendo #include como me has dicho... y nada... lo que no sé si las librerías tienen que ser *.inc o *.lib, el programa lo estoy haciendo en assembler...

Mañana por la mañana vovleré a ver si puedo avanzar algo... yo creo que es lo que tu dices... que cuando llamo a la etiqueta no la encuentra...

¿Porqué no subes todo el proyecto en un archivo comprimido? así lo puedo ver y corregir si hay algo que veo mal.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Rutina LCD 4 Bits
« Respuesta #20 en: 22 de Junio de 2006, 20:54:14 »
La rutina para la LCD debe de ser #Include "nombre.lib"

Saludos LabPIC

¿Porqué dices eso LABPic?  Un archivo .inc también puede tener instrucciones en asm.

Tal vez tu estés hablando de alguna librería en concreto, pero los archivo .inc pueden ser ensamblados también.

Saludos


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Rutina LCD 4 Bits
« Respuesta #21 en: 23 de Junio de 2006, 09:48:44 »
Hola!
Bueno tengo buenas y malas noticias...

El problema radicaba básicamente por lo que comentaba maunix... es decir, iba a los labels, pero como no había nada no hacía anda. Entonces la forma de que el MPlab compile las librerías es metiendo las librerías en la carpeta MPASM Suite que es la ubicación de todas las librerías usadas por MPLab.

Y la forma de incluirlas en el programa principal es poniendolo abajo del todo (antes del END) de la siguiente forma

include <NOMBRE LIBRERÍA.INC>  de sta forma funciona, es decir compila bien.

Entonces, una vez arreglado esto, he hecho un mini programa que me muestre la palabra GRACIAS, pero al ejecutar el programa en la placa me muestra el display lleno de G's.

Adjunto foto y el programita en cuestión.




Gracias por la ayuda.

Código: [Seleccionar]
LIST p=16f877      ;indicamos procesador que utilizamos

#include <p16f877.inc>   ;processor specific definitions
   
__config  _CP_OFF & _XT_OSC & _WDT_OFF & _PWRTE_ON & _LVP_OFF & _BODEN_OFF

ERRORLEVEL -302      ;elimina mensaje de warning "not in bank 0"
    ERRORLEVEL -203      ;elimina mensaje de warning
    ERRORLEVEL -305      ;elimina mensaje de warning
    ERRORLEVEL -205      ;elimina mensaje de warning

;**************Definimos variables para la demora ******************************************

temp_1 equ 20h ;definimos variable temp_1 para la demora
temp_2 equ 21h ;definimos variable temp_2 para la demora
pcl equ 22h  ;Registro PC

;**************Definimos el puerto de conexionado del LCD, en este caso Puerto D ***********

#define DB4 PORTD,0 ;DB4 del LCD está conectado a pin RD0 del pic
#define DB5 PORTD,1 ;DB5 del LCD está conectado a pin RD1 del pic
#define DB6 PORTD,2 ;DB5 del LCD está conectado a pin RD2 del pic
#define DB7 PORTD,3 ;DB5 del LCD está conectado a pin RD3 del pic
#define PINRS PORTD,4 ;Pin RS del LCD está conectado a pin RD4 del pic
#define PINE PORTD,5 ;Pin E (enable) del LCD está conectado a pin RD5 del pic

;************************ RESET Y VERCTORES INT ********************************************
org     00h ;Vector de reset (aqui viene el micro cuando arranca)
goto    Inicio ;inmediatamente lo mandamos a Inicio
org     0x05    ;Le indicamos en que posición de memoria comienza lo que sigue

Inicio   ;------------------------ INICIALIZA MICROPOCESADOR ---------------------------
;Inicializa puertos y LCD

IniPorts

clrf PORTA ;pone a 0 el puerto A
    clrf    PORTB   ;pone a 0 el puerto B
    clrf    PORTC ;pone a 0 el puerto C
    clrf    PORTE   ;pone a 0 el puerto E
    bsf STATUS,RP0  ;Seleccionamos Bank 1
    movlw   0x06    ; ponemos todos los pines       
    movwf   ADCON1 ; como digital TTL
clrf    TRISA ;indicamos puerto A salidas
clrf    TRISB ;indicamos puerto B salidas
    clrf    TRISC ;indicamos puerto C salidas
    clrf    TRISD ;indicamos puerto D salidas               
    bcf STATUS,RP0  ;Seleccionamos Bank 0
call LCD_Inicializa ;inicializamos el LCD desde la librería.
call LCD_2Lineas4Bits5x7 ;le ponemos en modo 4 bits 2 líneas
Main

; Inicialización del módulo LCD

call LCD_Borra ;borramos pantalla LCD
movlw mensaje1 ;movemos a W el valor que contiene Mensaje1
call LCD_Mensaje ;mostramos en el lcd el mensaje2
call LCD_Linea2 ;pasamos a la línea 2
movlw mensaje2  ;cargamos mensaje AMIGOS
call LCD_Mensaje ;muestra el mensaje AMIGOS
loop goto loop

;Mensajes a mostrar
Mensajes
addwf pcl,f
mensaje1 dt"GRACIAS",0x00
mensaje2 dt"AMIGOS", 0x00
finmensajes

include <P876ALCD_4B.INC>
include <RETARDOS.INC>
include <LCD_MENS.INC>

end

Desconectado LabPIC

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 143
Re: Rutina LCD 4 Bits
« Respuesta #22 en: 23 de Junio de 2006, 12:50:23 »
Una disculpa maunix :D :D, pero me refería eso que comentas, lo que pasa es que lo di por hecho.

Ya he modificado el mensaje anterior :mrgreen:

Saludos LabPIC
¡¡¡Viva México cabrones!!!

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Rutina LCD 4 Bits
« Respuesta #23 en: 23 de Junio de 2006, 14:20:46 »
picto antes que nada me alegro que hayas solucionado tu problema! (al menos en forma parcial).

El problema radicaba básicamente por lo que comentaba maunix... es decir, iba a los labels, pero como no había nada no hacía anda. Entonces la forma de que el MPlab compile las librerías es metiendo las librerías en la carpeta MPASM Suite que es la ubicación de todas las librerías usadas por MPLab.

Y la forma de incluirlas en el programa principal es poniendolo abajo del todo (antes del END) de la siguiente forma

include <NOMBRE LIBRERÍA.INC>  de sta forma funciona, es decir compila bien.

Entonces, una vez arreglado esto, he hecho un mini programa que me muestre la palabra GRACIAS, pero al ejecutar el programa en la placa me muestra el display lleno de G's.


Creo que estas asumiendo demasiado.   :shock:

No es por corregir pero así es como tu lo solucionaste lo cual no significa que tu frase sea 100% cierta "la forma de incluirlas en el programa principal es poniendolo abajo del todo (antes del END) "

Tu dices que es "la forma" como si fuese la única manera, tengo muchos programas y en gral siempre dejo los .inc en la misma carpeta del proyecto y los referencio con las "" como mencioné antes y sí funciona.   :)



Con respecto a lo de poner "GRACIAS" no te funciona porque tu quieres hacer "movlw mensaje1" cuando esa instrucción solo puede recibir un valor de 8 bits o un byte, o un caracter (si lo ves como un char).

Entonces, hacer eso solo te devuelve la "G" que es el primer dato de la cadena de texto.

Para mostrar gracias, debes ir leyendo uno por uno los valores de 'mensaje1' es decir primero la G, luego la R y así sucesivamente.

Para ello se suele armar una tabla donde cada posición de la tabla es una letra del mensaje a mostrar.  Es tedioso, lo sé pero así se hace en ensamblador.  Debes hacer todo tu mismo.

Corrige eso y te saldrá el mensaje.

Si quieres probar una manera más simple, puedes hacer directamente also así como

Código: ASM
  1. movlw   'G'
  2.         call    LCD_Mensaje     ;mostramos en el lcd el mensaje2
  3.         movlw   'R'
  4.         call    LCD_Mensaje     ;mostramos en el lcd el mensaje2
  5.         movlw   'A'
  6.         call    LCD_Mensaje     ;mostramos en el lcd el mensaje2
  7.         movlw   'C'
  8.         call    LCD_Mensaje     ;mostramos en el lcd el mensaje2
  9.         movlw   'I'
  10.         call    LCD_Mensaje     ;mostramos en el lcd el mensaje2
  11.         movlw   'A'
  12.         call    LCD_Mensaje     ;mostramos en el lcd el mensaje2
  13.         movlw   'S'
  14.         call    LCD_Mensaje     ;mostramos en el lcd el mensaje2




Saludos ;)
« Última modificación: 23 de Junio de 2006, 14:22:59 por maunix »
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Rutina LCD 4 Bits
« Respuesta #24 en: 23 de Junio de 2006, 14:24:45 »
Una disculpa maunix :D :D, pero me refería eso que comentas, lo que pasa es que lo di por hecho.

Ya he modificado el mensaje anterior :mrgreen:

Saludos LabPIC

No hay porqué disculparse, todos podemos equivocarnos.   :wink:

El punto era que no sabía si hablaban de alguna librería en concreto que conocieran tu y picto  :mrgreen:


- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Rutina LCD 4 Bits
« Respuesta #25 en: 26 de Junio de 2006, 04:12:13 »
Hola amigos!
Bueno parece que he conseguido que muetre un mensaje... al final la cosa ha quedado así:

Código: [Seleccionar]
Principal
movlw Mensaje0 ; Apunta al mensaje 0.
call Visualiza
movlw Mensaje1 ; Apunta al mensaje 1.
call Visualiza
movlw Mensaje2 ; Apunta al mensaje 2.
call Visualiza
call Retardo_5s ; Permanece apagada durante este tiempo.
goto Principal ; Repite la visualización de todos los mensajes.
;
; Subrutina "Visualiza" -----------------------------------------------------------------
;
Visualiza
call LCD_Mensaje
call Retardo_2s ; Visualiza el mensaje durante este tiempo.
call LCD_Borra ; Borra la pantalla y se mantiene así durante
call Retardo_200ms ; este tiempo.
return


; "Mensajes" ----------------------------------------------------------------------------
;
Mensajes
addwf PCL,F
Mensaje0 ; Posición inicial del mensaje 0.
DT "Hola amigos", 0x00
Mensaje1 ; Posición inicial del mensaje 1.
DT "esto parece", 0x00
Mensaje2 ; Posición inicial del mensaje 2.
DT "que funciona", 0x00

include <P876ALCD_4B.INC>
INCLUDE  <LCD_MENS.INC>
INCLUDE  <RETARDOS.INC>
END

Pero hay una cosa que no entiendo...

Para que sirve y que significa la instrucción:
   CBLOCK  0x0C
   ENDC


Gracias!

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Rutina LCD 4 Bits
« Respuesta #26 en: 26 de Junio de 2006, 04:41:05 »
Dedicada a Maunix, Labpic, microcom , pibe, etc... y a DavidG no recuerdo su nick!



Saludos!
« Última modificación: 26 de Junio de 2006, 04:45:56 por picto »

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Rutina LCD 4 Bits
« Respuesta #27 en: 26 de Junio de 2006, 05:07:36 »
Juas.. muy buena picto!  :-/ FELICIDADES!
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado picto

  • PIC16
  • ***
  • Mensajes: 106
Re: Rutina LCD 4 Bits
« Respuesta #28 en: 26 de Junio de 2006, 05:27:30 »
Jeje gracias a vosotros  :mrgreen:

Por cierto ahora me estoy peleando para poder utilizar la seguynda linea del LCD.
Porque solo puedo escribir de línea en línea y yo quiero poder mostrar 2 mensajes a la vez uno en la línea de arriba y otro en la de abajo...
 8)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Rutina LCD 4 Bits
« Respuesta #29 en: 26 de Junio de 2006, 06:25:25 »
Picto, por si no te lo mencionaron, la segunda fila arranca desde la posicion 0x40 de la RAM del LCD, es decir que debes enviar los datos desde la 0x40 hasta la 0x4F. Lo comento x si las moscas.
Saludos
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.


 

anything