TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: VOLTIO en 15 de Febrero de 2016, 10:58:02

Título: LCD con 16F877A no me funciona
Publicado por: VOLTIO en 15 de Febrero de 2016, 10:58:02
Buen dia amigos, tengo un proyecto en el cual quiero hacer funcionar un LCD 16x2 en un pic 16F877A, en los puertos A y C hay conectada salidas (relay,led,etc)
Pero lo que quiero saber es donde tengo el problema de no poder leer el letrero en el LCD .

 - Tienes que ingresar para ver archivos adjuntos -  - Tienes que ingresar para ver archivos adjuntos -
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 15 de Febrero de 2016, 13:13:44
Código: [Seleccionar]
CARRY    equ     1
C EQU 0
Z        equ     2

Por que ? si el .inc ya lo posee y haces STATUS, C o STATUS , Z

Código: ASM
  1. BANK0      MACRO
  2.       BCF   STATUS,RP0
  3.       BCF   STATUS,RP1
  4.       ENDM

Otro mas... tenes BANKSEL, ejemplo queres moverte el banco donde esta el PORTA. haces : BANKSEL PORTA , solo el compilador luego te genera esas instrucciones sea el micro que sea. Por si no lo sabias y recurriste a una macro para eso.


Respecto al LCD para mi que tenes mal la rutina de inicializacion. ( Luego descubri otras cosas mas abajo )
un HD44780 es distinto (si es que tenes eso).. mira como es la inicializacion:

https://www.sparkfun.com/datasheets/LCD/HD44780.pdf
(Pagina 44)

Delay 15ms para 5V, 40ms para 3.3V
Enviar Function Set
Delay 4.1ms
Enviar Function Set
Delay 100us
Enviar Function Set
Enviar Function Set ( Este es el valido!, el cual toma el valor el LCD)
Display Off/On
Display Clear
Entry Mode

------------------------------------------------------------------------------------

Finalmente tenes un problema que la rutina "principal" (MENU), no posee un loop infinito. Lo que sucederia es que llamas a LCD_INIT, vuelve con return y ejecuta la demora de 1ms, y vuelve a ejecutar el return. Pero esta ves ya no hay guardado nada en el STACK. Asi que ojo con eso.
Ponele un GOTO $-1 despues del CALL INI_LCD

Sigo descubriendo mas errores:

Código: [Seleccionar]
      BCF      PORTE,E
E      EQU     22
Lo que se transforma en:

Código: [Seleccionar]
      BCF      PORTE,22 ????
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 15 de Febrero de 2016, 15:07:35
si hay varias cosas que estan demas y no sirven a este proyecto porque lo copie y pegue de otro proyecto que fue en un curso hace varios años.
ahora me puse denuevo a hacer algo con pics y estoy un poco olvidado y desorientado jaajaj
voy a probar algunas cosas que me has aclarado y te vuelvo a consultar o informar si anda .
gracias !!!!
si quisieras seguir ayudandome por skype te de lo dejo : rubendariofigueredo y mi mail: rudafi@yahoo.com.ar

muchas gracias denuevo !!
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 15 de Febrero de 2016, 15:23:52
No poseo skype, y respecto a seguirlo en otro lado, prefiero seguir en el foro. Asi de esa ta forma si existe un problema, las demas personas pueden verlo y encontrar soluciones a sus problemas tambien.

En resumen, te ayudo. Por aca .
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 15 de Febrero de 2016, 15:31:46
si si esta perfecto, yo empece de cero denuevo, pero incluyendo los inc , pero no se despues de la inicializacion como debo seguir , envio denuevo reformado y los inc.
gracias

Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 15 de Febrero de 2016, 15:39:34
cargue mal los archivos creo , perdon

 - Tienes que ingresar para ver archivos adjuntos -  - Tienes que ingresar para ver archivos adjuntos -  - Tienes que ingresar para ver archivos adjuntos -
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 15 de Febrero de 2016, 15:45:18
Solo decirte que esa libreria que tenes ( LCD_4bits ) es justamente una libreria para controlar al LCD con 4 bits y no 8 como tenias realizado. Y unicamente funciona a 4Mhz, si quisieras mas frecuencia deberias modificarlo ( especialmente cuando cambia el pin E ). Tenes que ademas definir el CBLOCK a un valor, ya que asi como esta inicia en 0x00

Tenes que tambien agregar o crear las librerias de retardo que no posee.

Terminado de modificar todo lo de arriba, que seguro ademas te va a llevar a modificar la parte de hardware en tu funcion principal:

Código: ASM
  1. MENU    
  2.  
  3.                 CALL            LCD_Inicializa

Cambialo por:

Código: ASM
  1. MENU    
  2.                 CALL    LCD_Inicializa 
  3.                                
  4.                 MOVLW   'A'
  5.                 CALL    LCD_Caracter
  6.                 MOVLW   'B'
  7.                 CALL    LCD_Caracter
  8.  
  9.                 GOTO    $-1

Es decir, una ves que tengas todo listo procedes en tu programa principal llamar a LCD_Inicializa, y luego para mandar una letra simplemente pones la letra en W y llamas a LCD_Caracter.
El GOTO al final hace que el micro se quede ahi para siempre, y solo verias "AB" en el LCD.

---------------------

Respecto a cargar los archivos, los tenes que cargar una sola ves, si te fijas estas cargandolo 3 veces en cada post
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 15 de Febrero de 2016, 15:56:36
ah si si lo entiendo mejor ahora, los pines estan bien creo y estoy usando 4bits asi que eso tambien estaria bien
 ahora subo el diagrama denuevo y los retardos.inc

gracias
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 16 de Febrero de 2016, 18:42:33
bueno ahi revisando una y otra vez pude ver algo en el lcd , pero no lo que quiero jajajaja se ven todos ceros
subo a ver si me ayudan.
Gracias  - Tienes que ingresar para ver archivos adjuntos -
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 17 de Febrero de 2016, 20:26:55
VOLTIO, al final yo ya me perdi,

Estas usando la libreria ? o estas usando tus propias funciones?
Estas realmente a 4 bits ?, Usas el pin R/W o simplmente lo tenes siempre en escritura y solo esperas un tiempo ?

Todo eso queda en el aire, por que estas pasando varios archivos y luego pasas uno que no usa nada de eso.
Título: Re:LCD con 16F877A no me funciona
Publicado por: PalitroqueZ en 17 de Febrero de 2016, 21:48:03
en el foro abundan bastantes ejemplos de rutinas para manejar pantallas alfanumericas de 2x16 en modo 4 bits en asm.

Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 18 de Febrero de 2016, 09:46:59
Buen dia , antes que nada muchas gracias por responder y tratar de ayudarme . El ultimo ejemplo que subi (el asm) es el que al final estoy usando y que en el visor me entrega todos ceros pero no puedo leer el mensaje y solo lo hace en una sola linea.Yo estimo que el problema puede estar en la rutina FUNC que es la que configura el lcd .
Gracias de nuevo
abrazo
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 18 de Febrero de 2016, 10:17:07
algo que no mencione es que todo lo estoy haciendo con Proteus o sea no en real, el display que voy a usar es este:

http://www.aliexpress.com/store/product/LCM1602A-16x2-STN-blue-Compatibel-with-HD44780-1602-WH1602B-PC1602-D-LMB162A/1037651_1498652107.html

no se si sirve de algo pero lo queria comentar , disculpen.
gracias
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 22 de Febrero de 2016, 12:02:44
hola amigos disculpen alguno me puede ayudar ?? llegue hasta aca y no puedo hacerlo funcionar

gracias
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 22 de Febrero de 2016, 12:45:43
Disculpa VOLTIO, no eh tenido tiempo de revisarlo, pero pienso que te convendria mas usar la libreria LCD_4bits/delay que pasaste que tiene una mejor rutina de inicializacion que tu programa. Ya te dije que la rutina estaba mal pero no la arreglaste, por ahora solo puede decir eso nomas. Aunque ya te di algunos pasos de como hacerlo con esa libreria.
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 22 de Febrero de 2016, 13:37:15
muchas gracias estimado KILLERJC voy a intentar lo que me dices , si puedes luego revisalo  y me das tu parecer.
saludos
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 22 de Febrero de 2016, 23:05:33
Como te decia, tu codigo esta mal, no respetas la rutina de inicializacion del LCD que provee el fabricante. Por eso mismo te dije que usaras la libreria esa.

Hay que tener una cosas en cuenta al usar la libreria. Las cuales expuse aca:
http://www.todopic.com.ar/foros/index.php?topic=45929.msg383703#msg383703
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 22 de Febrero de 2016, 23:30:50
hola  KILLERJC hoy volvi al .inc como me aconsejastes pero no logro que funcione, algo estoy haciendo mal y no me doy cuenta donde esta el error.
Gracias por tu atencion.
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 22 de Febrero de 2016, 23:59:26
Ahi me di cuenta que me faltaba el mensaje el cual coloque luego de inicializar el lcd, pero sigo sin ver nada.

CALL      LCD_Inicializa   
   
   MOVLW   'B'
        CALL    LCD_Caracter
        MOVLW   'I'
        CALL    LCD_Caracter
   MOVLW   'E'
        CALL    LCD_Caracter
        MOVLW   'N'
        CALL    LCD_Caracter
   MOVLW   'V'
        CALL    LCD_Caracter
        MOVLW   'E'
        CALL    LCD_Caracter
   MOVLW   'N'
        CALL    LCD_Caracter
        MOVLW   'I'
        CALL    LCD_Caracter
   MOVLW   'D'
        CALL    LCD_Caracter
        MOVLW   'O'
        CALL    LCD_Caracter
                GOTO    $-1
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 23 de Febrero de 2016, 01:44:14
Una correcion al loop principal, saque afuera la inicializacion del LCD, y agregue un NOP, asi el GOTO $-1 salta al NOP y no al CALL

Código: ASM
  1. ORG             000H
  2.                 CALL    SETUP
  3.                 CALL    LCD_Inicializa                  ; En el setup inicial y fuera del loop principal.
  4.  
  5. ;*****************************************************************************
  6. ;MENU RUTINA PPAL DEL PROGRAMA
  7. ;*****************************************************************************
  8. MENU    
  9.                 MOVLW   'B'
  10.                 CALL    LCD_Caracter
  11.                 MOVLW   'I'
  12.                 CALL    LCD_Caracter
  13.                 MOVLW   'E'
  14.                 CALL    LCD_Caracter
  15.                 MOVLW   'N'
  16.                 CALL    LCD_Caracter
  17.                 MOVLW   'V'
  18.                 CALL    LCD_Caracter
  19.                 MOVLW   'E'
  20.                 CALL    LCD_Caracter
  21.                 MOVLW   'N'
  22.                 CALL    LCD_Caracter
  23.                 MOVLW   'I'
  24.                 CALL    LCD_Caracter
  25.                 MOVLW   'D'
  26.                 CALL    LCD_Caracter
  27.                 MOVLW   'O'
  28.                 CALL    LCD_Caracter
  29.  
  30.                 NOP
  31.                 GOTO    $-1
  32.                 GOTO    MENU            ; No deberia llegar nunca aca

Y en el archivo de la configuracion del LCD, el CBLOCK le falta ponerle el valor, lo cual quedaria asi:

Código: ASM
  1. CBLOCK 0x70
  2.         LCD_Dato
  3.         LCD_GuardaDato
  4.         LCD_GuardaTRISB
  5.         LCD_Auxiliar1
  6.         LCD_Auxiliar2
  7.         ENDC

( Elegi 0x70 asi no colisiona con ningun otro )

Y una cosa mas...

Si vas a crar registros para usarlos en los delays, usa siempre los mismos, es decir tenes asi:

Delay 1ms: GRAL1 y GRAL2
Delay 1.5ms : TOTO
Delay 25s : PDel0, PDel1, PDel2

Mientras que podrias hacerlo asi:

Delay 25s : PDel0, PDel1, PDel2
Delay 1ms: PDel0, PDel1
Delay 1.5ms : PDel0

Y listo... ahora solo tenes definido 3 registros y podes usar todos los delays sin problema, mientras que antes tenias 6 sin sentido.

Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 24 de Febrero de 2016, 11:41:36
Exelente !! mas tarde cuando llegue a casa me pongo a probarlo y te comento , muchas pero muchas gracias !!!
abrazo
Ruben Dario Figueredo
Pergamino,BsAs,Argentina
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 24 de Febrero de 2016, 13:55:16
hola , aunque no entendi bien lo de los delays te comento que sigo sin poder ver algo , reforme segun lo que me dijiste , pero no reforme el tema de los delays , anda igual o sin ese arreglo no funciona.
 - Tienes que ingresar para ver archivos adjuntos -  - Tienes que ingresar para ver archivos adjuntos -
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 24 de Febrero de 2016, 15:05:10
Te falto agregarle el NOP antes del GOTO $-1 . Aparte de eso por ahora no veo nada distinto.
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 24 de Febrero de 2016, 15:22:31
Debo tener algun problema en el hard o no se , no me funciona  , sigo revisando
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 24 de Febrero de 2016, 23:40:04
Una pregunta, que posee este archivo ?

include <RETARDOS.INC>
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 25 de Febrero de 2016, 12:02:44
no son los retardo que usa el include del lcd ??
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 25 de Febrero de 2016, 12:21:27
Si pero seguro que ahi dentro hay un CBLOCK tambien. Por eso te pedi que lo pasaras :P

Y te olvidaste el NOP antes del GOTO $-1 en el loop principal.
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 25 de Febrero de 2016, 13:37:37
en los mensajes anteriores esta el archivo, igual ahi lo subo.
 - Tienes que ingresar para ver archivos adjuntos -
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 25 de Febrero de 2016, 13:52:41
Código: ASM
  1. CBLOCK
  2.         R_ContA                         ; Contadores para los retardos.
  3.         R_ContB
  4.         R_ContC
  5.         ENDC

Ves..

Ponele un

   CBLOCK 0x60

Sino los delays que usa la libreria del LCD no van a funcionar correctamente.
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 25 de Febrero de 2016, 14:01:25
se los puse pero no anda igual
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 25 de Febrero de 2016, 14:14:50
y el diagrama esta bien verdad ???
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 25 de Febrero de 2016, 15:07:42
No me parece ver nada raro. Aunque tenes un pin del PORTE conectado a RW lo cual deberias quitarlo, ya que lo unico que estas haciendo es desperdiciar un pin del PIC. Pero todo lo demas me parece correcto. Es algo del programa que tal ves se me esta escapando. Aunque ahora tiene una inicializacion correcta. Y descartando cosas.... voy por:

- Correcta inicializacion de los puertos, estan como digitales y no esta activo el PSP
- Es correcto el envio de un caracter
- Ahora no deberia conflicto con los CBLOCKs
- La inicializacion del LCD es correcta segun el datasheet, respeta los tiempos
- La conexion tambien es correcta del LCD
- Esta a 4Mhz lo cual deberia funcionar, la libreria y los retardos estan realizados para eso.

Lo unico que esta faltando es el delay al comienzo del programa, ( un delay de unos 15ms hasta el power-up del LCD ). Antes!! del CALL LCD_Inicializa.
Si ya con eso no funciona, no se Realmente que es, mas que echarle la culpa al LCD. Supongo que tiene un driver HD44780 ya que en eso nos basamos todo este tiempo.
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 25 de Febrero de 2016, 15:36:10
Lo voy a montar en un protoboard a ver que pasa .
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 26 de Febrero de 2016, 14:02:07
definitivamente NO funciona  :(
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 26 de Febrero de 2016, 14:06:23
Pinolillo16 acaba de usar casi la misma libreria, nomas que la modifico para su microcontrolador un PIC16F1707 y le funciono, Y supongo que es la misma, por que era casi igual ( aunque lo son todos iguales, ya que son copias de copias ). Y le funciono ( en Proteus ) sinceramente no se que tiene, tenes otro LCD para probar por las dudas ?
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 26 de Febrero de 2016, 14:22:24
otro LCD en PROTEUS ??
en real tampoco anda
yo creo que es un problema del programa y lo que me parece es que esta en la rutina del lcd .
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 26 de Febrero de 2016, 14:55:47
Ni siquiera en Proteus te funciona ... Yo crei que se estaba probando en fisico.

Como podras observar es la misma libreria:

http://www.todopic.com.ar/foros/index.php?topic=45384.msg384161#msg384161

Creo que le cambio un par de demoras, pero lo demas es igual.
Ojo, no vas a querer usar el programa de el, solo la libreria ( acordate de darle un valor al CBLOCK ). Ya que posee otro PIC y se maneja de otra forma.
Título: Re:LCD con 16F877A no me funciona
Publicado por: Pinolillo16 en 26 de Febrero de 2016, 22:41:49
Que tal Voltio, gracias por invitarme a este post. Bueno te puedo pedir que me compartas tu ultimo codigo y esquematico para ver como te puedo ayudar?

Saludos
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 27 de Febrero de 2016, 10:26:30
Buen dia Pinolillo16 ahi te envio lo ultimo que tengo .
gracias
 - Tienes que ingresar para ver archivos adjuntos -
Título: Re:LCD con 16F877A no me funciona
Publicado por: Pinolillo16 en 27 de Febrero de 2016, 18:03:45
Extrañamente no me funciono tu codigo en absoluto. Mire otro con tus librerias y funciono. Aca el codigo de funcion:


Código: ASM
  1. LIST P=16F877A, F=INHX32
  2. INCLUDE <P16F877A.INC>
  3. __CONFIG _BODEN_OFF & _CP_OFF & _WRT_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC & _DEBUG_OFF & _CPD_OFF & _LVP_OFF
  4.  
  5. ERRORLEVEL 1;-302 ;Eliminate bank warning
  6.  
  7.         CBLOCK 0x20
  8.  
  9.         ENDC
  10.         ORG        0000H  
  11.         call    LCD_Inicializa
  12.         bsf        STATUS,5    ;Cambiando al Banco-1
  13.         movlw      0x06        
  14.         movwf      ADCON1  
  15.         CLRF       PORTB
  16.         clrf       PORTC
  17.         clrf       PORTD
  18.         clrf       PORTE
  19.         bcf        STATUS,5    ;Regresando al Banco-0
  20.  
  21.         CALL    LCD_Linea1
  22. PRINCIPAL      
  23.  
  24.         MOVLW '1'
  25.         CALL LCD_Caracter
  26.         GOTO    PRINCIPAL
  27.  
  28. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  29.         INCLUDE <LCD_4BIT_1.INC>
  30.         INCLUDE <RETARDOS.INC>
  31.         END

Como comentario solo revisa la LCD por que en mi proteus la cambie.

Saludos
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 28 de Febrero de 2016, 09:39:01
disculpa colega, cambiaste el lcd del proteus ???
gracias
Título: Re:LCD con 16F877A no me funciona
Publicado por: Pinolillo16 en 28 de Febrero de 2016, 16:10:44
Voltio sinla cambie porque no sabía si era eso la tuya se apreciaba más clara desconozco si es la versión del proteus pero bien podrías similar el código y si no funciona cambia la LCD. Saludos
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 28 de Febrero de 2016, 16:23:00
no funciona el codigo ya que en la vida real tampoco funciona he montado en protoboard y no funciona tampoco.
 :( :( :( :( :(
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 28 de Febrero de 2016, 16:46:06
La unica solucion que encuentro VOLTIO, es que lo simules paso a paso y ver que exactamente estan saliendo los datos como corresponden.

Tambien podes agrandar un poco los delays, de esa forma te aseguras que no sean problemas de tiempo, luego los vas sacando.
Acordate que el "delay" mas importante es cuando se le da el pulso a la salida E.

Mas ya no se que hacer.
Título: Re:LCD con 16F877A no me funciona
Publicado por: Pinolillo16 en 29 de Febrero de 2016, 03:59:56
Voltio ya probaste con el código que puse. Ese a me funcionó bien. Saludos
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 29 de Febrero de 2016, 15:06:08
hola Pinolillo16 si lo probe pero no anda , yo estoy tan confundido que no se que hacer , cuando lo simulaste lo hiciste con mi diagrama verdad ?? entonces no se porque el unico lcd que viene en proteus es este.
Título: Re:LCD con 16F877A no me funciona
Publicado por: Pinolillo16 en 29 de Febrero de 2016, 23:08:54
Te anexo el diagrama con el que lo simule. Saludos
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 01 de Marzo de 2016, 10:05:01
hola PINOLILLO estoy probando en otra pc y ahora me funciona tu codigo , raro es el mismo proteus, lo que me gustaria me digas que modificaste en tu programa para ir viendo si puedo armar el mio, no me doy cuenta que retocaste, o si fue dentro de la rutina del lcd o de los retardos.
Desde ya muy agradecido por todo

 - Tienes que ingresar para ver archivos adjuntos -
Título: Re:LCD con 16F877A no me funciona
Publicado por: Pinolillo16 en 01 de Marzo de 2016, 14:18:59
Solo el encabezado del pic si te das cuenta es diferente. Fuera de eso no modifico nada si tu PIC lo manejas con un cristal de 4mhz todo va igual, ahora si le cambias la velocidad tienes que hacer tus propios retardos y revisar las direcciones de los registros para saber donde estan alojadas. Espero que te sea útil, si es para implementar algun proyecto no estaria demas que revisaras otros micros que son mas economicos y tienen muchas cosas mas interesantes.

Saludos
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 01 de Marzo de 2016, 15:34:58
si copio tu simulacion con tus archivos, funciona, todo lo mismo pero con mi simulacion no funciona.NO ENTIENDO
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 01 de Marzo de 2016, 15:39:35
ya encontre el error era la masa y el +b del lcd la tenia invertida.
PERDON
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 02 de Marzo de 2016, 14:37:55
hola PINOLILLO16 pude hacer funcionar mi codigo , pero ahora me titila continuamente los dos mensajes de las dos lineas , como hago para que quede fijo ??? eso no lo se .
saludos
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 02 de Marzo de 2016, 19:10:26
Te titila, por que estas escribiendolo una y otra ves al LCD.. Lo que podes hacer es escribirlo una sola ves y luego quedarte esperando un loop infinito.

Es decir reemplaza:

Código: ASM
  1. GOTO    MENU

por:

Código: ASM
  1. NOP
  2.                 GOTO    $-1

Entocnes una ves escrito todo el mensaje se queda ahi esperando, y no vuelve a enviar el mensaje. Esto por que tu programa no tiene mas nada.
Pensa exactamente linea a linea lo que hace tu programa y vas a ver el error
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 02 de Marzo de 2016, 20:01:39
Exelente, yo voy a usar un par de botones que al oprimirlos deben hacer algo y ademas mostrarlo en pantalla , pero ahora al menos ya  veo los mensajes, es cuestion de armar el programa.
La unica consulta que me queda al respecto es como se trabaja con el llamado a mansajes a travez de tablas, vi por ahi se que llama a la rutina con pcl creo.
MUCHAS GRACIAS me has ayudado muchisimo , tambien KILLERJC .

Saludos
Ruben Figueredo
Pergamino,BsAs,Argentina
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 02 de Marzo de 2016, 20:59:57
Las tablas dependen demasiado del PIC que estas usando. Algunos PICs no pueden leer la memoria flash, por lo tanto deben SI o SI tener que usar tablas con RETLW, aunque normalmente se usa una directiva de preprocesamiento para no tener que escribir todos los RETLW. Si tu PIC puede leer la flash, va a depender si es un PIC16 o un PIC18, si es un PIC16 no vas a tener cambios mas que una forma diferente para leer la tabla, si es un PIC18, cambia la directiva de preprocesamiento por que no usa RETLW para poner mas datos dentro.

Si queres saber como hacerlo te voy a dar 3 pistas.

1- Pagina 36 Datasheet del PIC, 3.5 Reading Flash Program Memory

2- Pagina 100 del manual de usuario del compilador MPASM, directiva DT , http://ww1.microchip.com/downloads/en/DeviceDoc/33014L.pdf

3- Pagina 191 del manual de usuario del compilador MPASM,  LOW, HIGH AND UPPER OPERATORS

Con eso en mente ( que ya el mismo datasheet te da el codigo ) podes hacer tu tabla.
Hay ejemplos seguidos y todo :3
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 02 de Marzo de 2016, 23:57:07
gracias Genio !!!
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 03 de Marzo de 2016, 01:04:04
A ver ahi modifique un poco para que se inicie con un mensaje de inicio en este caso "ELECTRONICA FIGUEREDO"  y luego el programa sigue con unos botones , los cuales si yo oprimo quiero que se borre todo y muestre otra cosa , ahora yo puse nombres cualquieras para probar pero no logro ver donde me estoy equivocando porque me titilan los mensajes y ademas cuando oprimo aparece el msj pero no borra el anterior
gracias
 - Tienes que ingresar para ver archivos adjuntos -
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 03 de Marzo de 2016, 03:31:39
Solo decirte VOLTIO que estos problemas son ya basicos y significan que no conoces exactamente que hacen las instrucciones, no entiendo como es que se llego a hacer funcionar el LCD. Pero bueno este es tu problema:

Código: ASM
  1. MENU   
  2.                
  3.                 BTFSS   SW1
  4.                 CALL    MENSAJE2
  5.                                
  6.                 BTFSS   SW2
  7.                 CALL    MENSAJE3
  8.                                
  9.                 BTFSS   SW3
  10.                 CALL    MENSAJE4
  11.                        
  12.                 CALL    INICIO

Cambiando 1 sola linea, quedando asi:

Código: ASM
  1. MENU   
  2.         BTFSS   SW1    
  3.         CALL    MENSAJE2
  4.                                
  5.         BTFSS   SW2
  6.         CALL    MENSAJE3
  7.                        
  8.         BTFSS   SW3
  9.         CALL    MENSAJE4
  10.                        
  11.         GOTO    MENU
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 03 de Marzo de 2016, 10:50:08
exelenteeeeee
graciasss
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 03 de Marzo de 2016, 15:27:40
Bien y como hago para mostrar un mensaje alternativo con otro, o sea muestro un mensaje bienvenida , borro todo y muestro un mensaje diferente y que cuando en cualquier momento oprimo sw1 por ej. muestre otro mensaje diferente, yo pense que era llendo a la rutina LCD_Borra y luego  LCD_Iinicialliza para despues mostrar un mensaje nuevo , pero no me funciona.
Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 03 de Marzo de 2016, 17:03:43
Volves a la linea 1 y sobreescribis todo.
Título: Re:LCD con 16F877A no me funciona
Publicado por: VOLTIO en 08 de Marzo de 2016, 14:33:25
Exelente hasta aca , pude resolver alguno problemas que tenia de conocimiento y gracias a ustedes he podido hacerlo y entenderlo eso es lo principal y mas valioso.
Ahora tengo algunas otras dudas sobre este mismo micro y es con el tema de interrupciones, seguimos aca o hago un nuevo hilo una nueva pregunta con el titulo de interrupciones en asm en 16f877
MUCHAS GRACIAS

Título: Re:LCD con 16F877A no me funciona
Publicado por: KILLERJC en 08 de Marzo de 2016, 15:01:08
Crea uno nuevo, este lleva ya varias paginas. Lo mejor seria separarlo en otro tema.
Título: Re:LCD con 16F877A no me funciona
Publicado por: jo.an. en 10 de Marzo de 2016, 00:30:50
 Un saludo a todos:Me podrias orientar sobre este programa.No me sale la linea 5 ni 6 ni 7 ni 8.Cuando llega a la 4 salta hasta la 1.No encuentro el error por ningun lado.El lcd es un YJ-2002-A
de 2X20.Gracias