Autor Tema: problemas con un pic y lcd  (Leído 1939 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado FCR15

  • PIC10
  • *
  • Mensajes: 4
problemas con un pic y lcd
« en: 23 de Julio de 2015, 16:55:34 »
hola disculpen ayuda por favor alguien que tenga un codigo en ensamblador para inicializar un pantalla lcd de 16x2 con un PIC16F877A mi codigo en proteus si funciona pero cuando lo conecto fisicamente ya no funciona solo la lcd prende los cuidritos de arriba y no hace nada...cren que se deba a que estoy utilizando una entrada analogica en el PORTA,0.

miren con una pantalla lcd de 16x2 y un PIC16F877A y un potenciometro y en ensamblador se pretende hacer que en la pantalla lcd mustre un mensaje cuando el potencimetro se valla moviendo, en el proteus se me funciona pero ya en fisico no por favor a que cren que se deba..

agradesco muchicimo su ayuda.. gracias..


Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: problemas con un pic y lcd
« Respuesta #1 en: 23 de Julio de 2015, 17:56:35 »
Has ajustado bien el contraste con el potenciómetro?? Tienes los pined configurados como digitales??
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado FCR15

  • PIC10
  • *
  • Mensajes: 4
Re: problemas con un pic y lcd
« Respuesta #2 en: 24 de Julio de 2015, 17:42:20 »
hola QIQE si ya revise eso y no me funciona, cres estoy inicalizando mal la lcd mira aqui esta una parte del programa no lo puse todo es que esta muy grande pero aqui muestra la parte donde inicializa la lcd y la convercion analogica. GRACIAS SALUDOS.

LIST        p=16F877A
        ;__CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
        INCLUDE    <P16F877A.INC>
        __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF
       
        CICLO1      EQU      0X20
        CICLO2      EQU      0X21
        CICLO3       EQU      0X22
        CICLO4      EQU     0X31
        CICLO5      EQU     0X32
        CICLO6      EQU     0X33
        TEMP      EQU      0X25
        DATO      EQU      0X30

        #DEFINE BANCO0 BCF STATUS,5            ;SE DEFINE LA INSTRUCCIÓN BANCO0
        #DEFINE BANCO1 BSF STATUS,5            ;SE DEFINE LA INSTRUCCIÓN BANCO1
       
        STATUS           EQU    0X03
        PORTD            EQU    0X08
        PORTB            EQU    0X06
        TRISD            EQU    0X88
        TRISB            EQU    0X86
        LCD_LINEA1     EQU    80   
        LCD_LINEA2     EQU    0C0   
        LCD_CLR         EQU    01   
        LCD_CASA     EQU    02   
        LCD_INC         EQU    06   
        LCD_DEC         EQU    04   
        LCD_ON         EQU    0C   
        LCD_OFF         EQU    08   
        CURSOR_ON     EQU    0E   
        CURSOR_OFF     EQU    0C   
        CURSOR_PARP     EQU    0F
        LCD_IZDA     EQU    18   
        LCD_DECHA     EQU    1C   
        CURSOR_IZDA     EQU    10   
        CURSOR_DECHA     EQU    14   
        LCD_FUNCIÓN     EQU    38   
        LCD_CGRAM     EQU    40   
        CBLOCK 0x0D
        ENDC
         
           ORG 0X00                            ;VECTOR DE RESET Ó ENCENDIDO DEL PIC
         GOTO INICIO               ;SALTA A LA ETIQUETA INICIO

            ORG   0X04                            ;VECTOR DE INTERRUPCION
         GOTO INTERRUP               ;SALTA A LA ETIQUETA INTERRUP

   ;ORG 0X10
                             
INICIO   

            CALL   INI_AD
            CALL    INI_PWM
         CALL   SETUPDELAY           ;TIEMPO NECESARIO PARA LA CAPTURA DEL
         CALL   SETUPDELAY          ;VALOR ANALOGICO A CONVERTIR

           BANCO1
         MOVLW    B'00000000'   
         MOVWF    TRISB
         MOVLW    B'00000000'   
         MOVWF    TRISC
         MOVLW    B'00000000'   
         MOVWF    TRISD
            BANCO0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;INICIA PROGRAMA;;;;;;;;;;;;;;;;;;;
       CALL  PAUSA_5ms
       BCF   PORTC,5
       Call  DELAY1SEG
       
         
           
        bsf         STATUS,RP0
        movlw        b'00011000'   
        movwf        TRISD       
        clrf        TRISB       
        bcf         STATUS,RP0               
        clrf        PORTD       
        clrf        PORTB
        movlw        LCD_FUNCIÓN   
        call        LCD_COMANDO   
        call        PAUSA_5ms   
        movlw        LCD_FUNCIÓN   
        call        LCD_COMANDO   
        call        PAUSA_5ms   
        movlw        LCD_FUNCIÓN   
        call        LCD_COMANDO   
        call        PAUSA_5ms   
        movlw        LCD_CLR       
        call        LCD_COMANDO
        call        PAUSA_5ms     
        movlw        LCD_INC       
        call        LCD_COMANDO
        call        PAUSA_5ms     
        movlw        LCD_ON       
        call        LCD_COMANDO
        call        PAUSA_5ms           
     
       SIGUE1      NOP
            BCF     STATUS,Z
            BSF      ADCON0,GO           ;COMIENZA LA CONVERSION
         CALL   PAUSA
         BCF    STATUS,Z   
         MOVF   DATO,W
         BCF    STATUS,Z
            SUBLW   D'42'            ;RESTARLE 42 A DATO
            BTFSS   STATUS,Z
            GOTO   SIGUE2
           
            movlw    80
        call    LCD_COMANDO
         movlw    ' '
        call    LCD_CARACTER       
        movlw    ' '           
        call    LCD_CARACTER       
        movlw    ' '                         
        call    LCD_CARACTER       
        movlw    'V'                     
        calL    LCD_CARACTER
        movlw    'E'                     
        calL    LCD_CARACTER               
        movlw    'L'
        call    LCD_CARACTER       
        movlw    'O'           
        call    LCD_CARACTER       
        movlw    'C'                         
        call    LCD_CARACTER       
        movlw    'I'                     
        calL    LCD_CARACTER       
        movlw    'D'           
        call    LCD_CARACTER
        movlw    'A'           
        call    LCD_CARACTER
        movlw    'D'           
        call    LCD_CARACTER       
        movlw    0C0
        call    LCD_COMANDO
        movlw    ' '
        call    LCD_CARACTER       
        movlw    ' '
        call    LCD_CARACTER
        movlw    ' '
        call    LCD_CARACTER
        movlw    '5'
        call    LCD_CARACTER
        movlw    ' '
        call    LCD_CARACTER
        movlw    'K'
        call    LCD_CARACTER
        movlw    'M'
        call    LCD_CARACTER
        movlw    '/'
        call    LCD_CARACTER
        movlw    'H'
        call    LCD_CARACTER
        movlw    'r'
        call    LCD_CARACTER     
        GOTO ATRAS   

subrutinas   de la LCD  Y PARA LA CONVERCION ANALOGICA.   
          CBLOCK
        CONTA1
        CONTA2
        GUARDA_CARÁCTER
        ENDC
PAUSA_5ms   
        movlw        64
        movwf        CONTA2       
        clrf        CONTA1       
RETRASO1   
        decfsz        CONTA1,1   
        goto        RETRASO1   
        decfsz        CONTA2,1   
        goto        RETRASO1   
        return               
LCD_COMANDO   
                clrf        PORTD       
        movwf        PORTB       
        call        LCD_CHEQUEA
        goto        LCD_HABILITA
LCD_CARACTER
        clrf    PORTD           
        call    LCD_CARÁCTER_ESPECIAL
        movwf    PORTB           
        call    LCD_CHEQUEA       
        bsf     PORTD,0               
        goto    LCD_HABILITA       
LCD_CARÁCTER_ESPECIAL
        movwf    GUARDA_CARÁCTER       
        sublw    'ñ'             
        btfss    STATUS,Z       
        goto    LCD_EÑE_MAYÚSCULA   
        movlw    b'11101110'       
        movwf    GUARDA_CARÁCTER   
        goto    LCD_FIN_CARACTER_ESP   

LCD_EÑE_MAYÚSCULA
        movfw    GUARDA_CARÁCTER       
        sublw     'Ñ'             
        btfss       STATUS,Z       
        goto       LCD_GRADO       
        movlw    b'11101110'       
        movwf    GUARDA_CARÁCTER       
        goto       LCD_FIN_CARACTER_ESP   
LCD_GRADO
        movfw    GUARDA_CARÁCTER       
        sublw      'º'           
        btfss      STATUS,Z           
        goto       LCD_FIN_CARACTER_ESP   
        movlw    b'11011111'       
        movwf    GUARDA_CARÁCTER       

LCD_FIN_CARACTER_ESP
        movfw    GUARDA_CARÁCTER   
        return           
LCD_CHEQUEA           
        bsf         STATUS,RP0               
        movlw        0FF       
        movwf        TRISB       
        bcf         STATUS,RP0           
        bcf         PORTD,0           
        bsf         PORTD,1           
BUCLE       
        bsf         PORTD,2               
        movf        PORTB,0       
        bcf         PORTD,2               
        addlw        84   
        btfsc        STATUS,C         
        goto        BUCLE       
        bsf         STATUS,RP0               
        clrf        TRISB       
        bcf         STATUS,RP0               
        bcf         PORTD,1       
        return       
LCD_HABILITA   
        bsf         PORTD,2               
        nop
        nop               
        bcf         PORTD,2               
        return
       
              
         
         
         
;-------------------------------
;-------------------------------
;-------------------------------
;PROGRAMA PARA LA ACTIVACION DE LA CONVERCION ANALOGICA.

INTERRUP   BTFSS   PIR1,ADIF
         RETFIE
         MOVF   ADRESH,W
         MOVWF   DATO
         BCF      PIR1,ADIF         
         CALL   SETUPDELAY

         RETFIE

INI_AD      BANCO1
         MOVLW   B'01000100'    ;RA3,RA1,RA0 SON ENTRADAS DEL CONVERTIDOR
         MOVWF   ADCON1         ;CONVERSION GUARDADA EN ADRESHL
         BSF      PIE1,ADIE      ;HABILITAR LAS INTERRUPCIONES A/D.
         BANCO0
         MOVLW   B'10000001'     ;SELECCION DEL RELOJ DE CONVERSION Fosc / 64,MODULO DE CONVERSOIN ACTIVO
         MOVWF   ADCON0          ;Y SELECCION DEL CANAL 0 (RA0/AN0)
         BCF      PIR1,ADIF       ;LIMPIAR FLAG DE INTERRUPCION
         BSF      INTCON,PEIE     ;HABILITAR INTERRUPCIONES DE PERIFERICOS
         BSF      INTCON,GIE      ;HABILITAR INTERRUPCIONES GLOBALES
         RETURN

INI_PWM      BANCO1
         MOVLW   0X3F
         MOVWF   PR2
         BCF      TRISC,2
         BANCO0
         MOVLW   B'000000000'
         MOVWF   CCPR1L
         BCF      CCP1CON,CCP1X
         BCF      CCP1CON,CCP1Y
         MOVLW   B'000000100'
         MOVWF   T2CON
         BSF      CCP1CON,CCP1M3
         BSF      CCP1CON,CCP1M2
         RETURN
SETUPDELAY   MOVLW   0X50
         MOVWF   TEMP
SD         DECFSZ   TEMP,F
         GOTO   SD
         RETURN

PAUSA      CLRF   CICLO1
         CLRF   CICLO2
PAU         DECFSZ   CICLO2,F
         GOTO   PAU
         DECFSZ   CICLO1,F
         GOTO   PAU
         RETURN           
DELAY1SEG   MOVLW   0XF0
         MOVWF   CICLO4
DEL03      MOVLW   0XF0
         MOVWF   CICLO5
DEL04      MOVLW   0X05
         MOVWF   CICLO6
DEL05      DECFSZ   CICLO6,F
         GOTO   DEL05
         DECFSZ   CICLO5,F
         GOTO    DEL04
         DECFSZ   CICLO4,F
         GOTO   DEL03
         RETURN                                   
         
           RETURN
         
 
           
         
        END   

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: problemas con un pic y lcd
« Respuesta #3 en: 25 de Julio de 2015, 10:25:02 »
Con que frecuencia de cristal estas probando ?

Desconectado FCR15

  • PIC10
  • *
  • Mensajes: 4
Re: problemas con un pic y lcd
« Respuesta #4 en: 27 de Julio de 2015, 10:56:15 »
hola que tal pues lo estoy haciendo con n cristal de 4MHz

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: problemas con un pic y lcd
« Respuesta #5 en: 28 de Julio de 2015, 05:59:14 »
Claramente tenes mal el driver del LCD, no lo revise en mucho detalle pero asi a simple vista esta mal y te voy a decir que encontre mal, pero no como solucionarlo, hay muchos ejemplos de drivers
( http://www.piclist.com/techref/io/lcd/pic.htm ) en 4 y 8 bits, en ASM y C

Aca
Código: ASM
  1. movlw        LCD_FUNCIÓN    
  2.         call        LCD_COMANDO

Aca dentro copias lo que hay que enviar al puerto D y pones a 0 el D ( imagino que aca estan los de control, CS, E, RS entre otros )
Código: ASM
  1. LCD_COMANDO    
  2.                 clrf        PORTD        
  3.         movwf        PORTB        
  4.         call        LCD_CHEQUEA
  5.         goto        LCD_HABILITA

Normalmente al poner el dato debe indicar si es una instruccion o un dato ( con el RS ) y para que entre ese dato al LCD darle un pulso a el pin E del LCD. Pero vos no:

Código: ASM
  1. LCD_CHEQUEA            
  2.         bsf         STATUS,RP0                
  3.         movlw        0FF        
  4.         movwf        TRISB        
  5.         bcf         STATUS,RP0            
  6.         bcf         PORTD,0            
  7.         bsf         PORTD,1            
  8. BUCLE        
  9.         bsf         PORTD,2                
  10.         movf        PORTB,0        
  11.         bcf         PORTD,2                
  12.         addlw        84    
  13.         btfsc        STATUS,C        
  14.         goto        BUCLE        
  15.         bsf         STATUS,RP0                
  16.         clrf        TRISB        
  17.         bcf         STATUS,RP0                
  18.         bcf         PORTD,1        
  19.         return

Pones todo el puerto B como entrada y luego procedes a activar los pines del LCD ( E,RS ), por ultimo cuando cambiaste todo recien ahi pasas a salida y le estas dando los valores al LCD.
Resumiendo esta mal el tema del LCD, tampoco queda muy claro en tu codigo cuales son los pines de E , RS, CS ,R/W(si es que usas) y demas.

Tambien no recuerdo los tiempos pero yo hice un driver en C y cuando mire los tiempos algunos eran de 20us como minimo y otros de hasta 100us, y vos por ahi solo tenes 2 nop ( 2us a 4Mhz ) entre cambio y cambio de pin.


 

anything