Buenas, soy nuevo en este foro. Les cuanto mi problema
Estoy realizando una practica con mi pic 16f877a para aprender a utilizar el adc, coloque un potenciometro en el Ra0 para varialo y ver los distintos valores del adc en una pantalla lcd, pero los valores en la pantalla se vuelven locos, suben y bajan, segun queria que al momento de tener 5v en ra0 el valor de la lcd fuera 1024 que son 2^10 que son los bits que posee este pic para el adc..
Les anexo mi codigo para ver si alguien me puede ayudar
Agradecido con el que me eche una mano.
Estoy realizando una practica con mi pic 16f877a para aprender a utilizar el adc, coloque un potenciometro en el Ra0 para varialo y ver los distintos valores del adc en una pantalla lcd, pero los valores en la pantalla se vuelven locos, suben y bajan, segun queria que al momento de tener 5v en ra0 el valor de la lcd fuera 1024 que son 2^10 que son los bits que posee este pic para el adc..
Les anexo mi codigo para ver si alguien me puede ayudar
Agradecido con el que me eche una mano.
Código [Seleccionar]
;******************************************************************************************************************************************
; PRACTICA PARA EL ADC, UTILIZO UN POTENCIOMETRO EN RA0 Y EL VALOR EN BINARIO LO VISUALIZO EN LA LCD
;
;
;
;******************************************************************************************************************************************
INCLUDE <P16F877A.INC>
LIST P=16F877A
__CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF & _BOREN_ON & _LVP_OFF
;REDIFINICION DE NOMBRE
#DEFINE PUERTO_A PORTA
#DEFINE PUERTO_B PORTB
#DEFINE PUERTO_C PORTC
#DEFINE LCD_RS PORTC,7
#DEFINE LCD_RW PORTC,6
#DEFINE LCD_E PORTC,5
#DEFINE LCD_PUERTO PORTB
CBLOCK H'20' ;BLOQUE DE VARIABLES O REGISTROS
CONT1
CONT2
CONT3
CONTX
LOOPS
LOOPS1
LOOPS2
REGA0 ;lsb
REGA1
REGA2
REGA3 ;msb
REGB0 ;lsb
REGB1
REGB2
REGB3 ;msb
REGC0 ;lsb
REGC1
REGC2
REGC3 ;msb
DSIGN ;Digit Sign. 0=positive,1=negative
DIGIT1 ;MSD
DIGIT2
DIGIT3
DIGIT4
DIGIT5 ;Decimal (BCD) digits
DIGIT6
DIGIT7
DIGIT8
DIGIT9
DIGIT10 ;LSD
MTEMP
MCOUNT
CONTA
ENDC
ORG H'00'
GOTO COMIENZO
ORG H'100'
COMIENZO CALL PUERTO ;LLAMDA A PUERTO.
CALL CONFIG_LCD ;LLAMO A CONFIGURACION DE LCD
CALL RETARDO3 ;ESPERA DE 3 SEGUNDOS
CALL VISUALIZAR_LCD ;VISUALIZO EN LA L1 "ING. MECATRONICA"
CICLO CALL CONFIG_ADC ;CONFIGURACION DE ADCON 0
CALL ADC ;CONFIGURO
CALL VALOR_ADC
GOTO CICLO
;*****************************************************************************************************************************************
; BLOQUE DE RUTINAS BLOQUE DE RUTINAS
;*****************************************************************************************************************************************
PUERTO BSF STATUS,RP0
BCF STATUS,RP1
MOVLW B'111111'
MOVWF TRISA
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'00000000'
MOVWF TRISC
MOVLW B'00000000'
MOVWF TRISD
MOVLW B'111'
MOVWF TRISE
CLRF OPTION_REG
NOP
MOVLW B'10000000'
MOVWF ADCON1 ;1PARA ADRSH=2 Y ADRESL=8,0 OSCILADO/8,1110= TODOS D MENOS RAO=a
BSF PIE1,ADIE ; HABILITADA LA CONVERSION
BCF STATUS,RP0
MOVLW B'00000000'
MOVWF INTCON
RETURN
;******************************************************************************************************************************************
;RUTINA PARA LA CONFIGURACION DE LAS OPERACIONES DE LA LCD
CONFIG_LCD MOVLW 0X01 ;EQUIVALENTE A BORRAR LA LCD
CALL CONTROL_LCD ;LLAMO LA HABILITACION DE CONTROL
MOVLW 0X02 ;EQUIVALENTE A RETORDAR EL CURSOR AL INICIO
CALL CONTROL_LCD ;LLAMO LA HABILITACION DE CONTROL
MOVLW 0X06 ;CONFIGURA EL MODO DE ENTRADA COMO EL INCREMENTO DEL CURSOR Y MODO NORMAL(AQUIPUEDOACTIVAR DESZPLAZAMIENTO)
CALL CONTROL_LCD ;LLAMO LA HABILITACION DE CONTROL
MOVLW 0X0F ;COFIG DISPLAY CONTROL: DISPALY=ON,CURSOR=ON,PARPADEO DEL CURSOR=ON
CALL CONTROL_LCD ;LLAMO LA HABILITACION DE CONTROL
MOVLW 0X38 ;FUNCTION SET:BUS DE 8 BIT,LCD DE 2 LINEAS,CARACTER DE 5X7 PUNTOS
CALL CONTROL_LCD ;LLAMO LA HABILITACION DE CONTROL
MOVLW 0X01 ;EQUIVALENTE A BORRAR LA LCD
CALL CONTROL_LCD ;LLAMO LA HABILITACION DE CONTROL
RETURN
;******************************************************************************************************************************************
;RUTINIA DE HABILATACION DE CONTROL Y DATOS PARA LA CONFIGURACION DEL LCD
CONTROL_LCD MOVWF LCD_PUERTO ;MUEVO EL VALOR DE W QUE POSEE EL CONTROL AL PUERTO PARA CONFIGURARLO
BCF LCD_RW ;COLOCO RW=0 PARA ACTIVAR LA ESCRITURA
BCF LCD_RS ;COLOCO RS=0 PARA ACTIVAR EL CONTROL
SALTOX BSF LCD_E ;COLOCO E=0 PARA DAR EL PULSO
NOP
NOP
BCF LCD_E ;PARA DAR POR TERMINADO EL PULSO
BCF LCD_RW ;PARA LIMPIARLO
BCF LCD_RS ;PARA LIMPIARLO
GOTO RETARDO1 ;VOY AL RETARDO DE 5m SEGUNDOS PARA LA ESPERA DE LA LCD
DATO_LCD MOVWF LCD_PUERTO ;MUEVO EL VALOR DE W QUE POSEE EL DATO A VISUALIZAR EN LA LCD
BCF LCD_RW ;COLOCO RW=0 PARA LA ESCRITURA
BSF LCD_RS ;COLOCO RS=1 PARA ACTIVAR EL MODO DE DATOS
GOTO SALTOX ;ME VOY A SALTOX PARA DAR EL PULSO DE ACTIVACION Y LIMPIAR LOS REGISTROS
;******************************************************************************************************************************************
VISUALIZAR_LCD CALL BORRAR_LCD ;BORRO LA LCD POR SI TENGO ALGO EN ELLA
MOVLW 'I' ;SEGMENTO 1 LINEA 1
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW 'N' ;SEGMENTO 2 LINEA 1
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW 'G' ;SEGMENTO 3 LINEA 1
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW '.' ;SEGMENTO 4 LINEA 1
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW ' ' ;SEGMENTO 5 LINEA 1
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW 'M' ;SEGMENTO 6 LINEA 1
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW 'E' ;SEGMENTO 7 LINEA 1
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW 'C' ;SEGMENTO 8 LINEA 1
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW 'A' ;SEGMENTO 9 LINEA 1
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW 'T' ;SEGMENTO 10 LINEA 1
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW 'R' ;SEGMENTO 11 LINEA 1
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW 'O' ;SEGMENTO 12 LINEA 1
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW 'N' ;SEGMENTO 13 LINEA 1
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW 'I' ;SEGMENTO 14 LINEA 1
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW 'C' ;SEGMENTO 15 LINEA 1
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW 'A' ;SEGMENTO 16 LINEA 1
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW 0XC0 ;LO UTILIZO PARA MOVERME A LA LINEA 2
CALL CONTROL_LCD ;HABILITACION DE CONTROL
MOVLW 'A' ;SEGMENTO 1 LINEA 2
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW 'D' ;SEGMENTO 2 LINEA 2
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW 'C' ;SEGMENTO 3 LINEA 2
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW '=' ;SEGMENTO 4 LINEA 2
CALL DATO_LCD ;LLAMO LA HABILITACION DE DATOS
MOVLW ' ' ;SEGMENTO 5 LINEA 2
CALL DATO_LCD ;LLAMO LA HABILITAION DE DATOS
RETURN
;******************************************************************************************************************************************
;RUTINA PARA BORRAR LA LCD
BORRAR_LCD MOVLW 0X01 ;EQUIVALENTE AL CONTROL BORRAR LCD
GOTO CONTROL_LCD ;LLAMO LA HABILITACION DE CONTROL
;******************************************************************************************************************************************
;RUTINA PARA REGRESAR EL CURSOR AL INICIO
REGRESAR_LCD MOVLW 0X02 ;EQUIVALENTE A RETORDAR EL CURSOR AL INICIO
GOTO CONTROL_LCD ;LLAMO LA HABILITACION DE CONTROL
;******************************************************************************************************************************************
CONFIG_ADC CALL clrdig ;BORRO LOS VALORES DEL ADC
MOVWF B'01000001'
MOVWF ADCON0 ;CONFIGURO OSCILADO/8,CANAL 0, DONE, ENCIENDO
GOTO RETARDO4 ;ESPERA EL TIEMPO DE ADQUISICION
;******************************************************************************************************************************************
ADC BSF ADCON0,2 ;INICIA EL PROCESO
NOP
NOP
REPETIR BTFSS ADCON0,2 ;CHEQUEO SI LA CONVERSION TERMINO
GOTO REPETIR
MOVF ADRESH,W ;MUEVO LOS 2 BITS MAS SIGNIFICATIVOS A W
MOVWF REGA1 ;CARGO LOS 2 BITS MAS SIGNIFICATVIOS A REG0
CLRF REGA2 ;LIMPIO REGA1
CLRF REGA3 ;LIMPIO REGA2
BSF STATUS,RP0 ;ME MUEVO AL BANCO 1`PARA UTILIZAR EL ADRESL
MOVF ADRESL,W ;PASO LOS 8 BITS RESTANTES A W
BCF STATUS,RP0 ;ME MUEVO AL BANCO 0 PARA UTILIZAR LOS REGISTROS DE PROPOSITOS GENERALES
MOVWF REGA0 ;CARGO EL VALOR DEL ADRESL EN REGA0
BCF ADCON0,0 ;TERMINO LA CONVERSION ASI QUE LO APAGO
GOTO BIN_BCD
;****************************************************************************************************************************************
BIN_BCD clrf MTEMP ;Reset sign flag
call absa ;Make REGA positive
skpnc
return ;Overflow
call clrdig ;Clear all digits
movlw D'32' ;Loop counter
movwf MCOUNT
b2dloop rlf REGA0,f ;Shift msb into carry
rlf REGA1,f
rlf REGA2,f
rlf REGA3,f
movlw DIGIT10
movwf FSR ;Pointer to digits
movlw D'10' ;10 digits to do
movwf CONTA
adjlp rlf INDF,f ;Shift digit and carry 1 bit left
movlw D'10'
subwf INDF,w ;Check and adjust for decimal overflow
skpnc
movwf INDF
decf FSR,f ;Next digit
decfsz CONTA,f
goto adjlp
decfsz MCOUNT,f ;Next bit
goto b2dloop
btfsc MTEMP,0 ;Check sign
bsf DSIGN,0 ;Negative
clrc
return
clrdig clrf DSIGN
clrf DIGIT1
clrf DIGIT2
clrf DIGIT3
clrf DIGIT4
clrf DIGIT5
clrf DIGIT6
clrf DIGIT7
clrf DIGIT8
clrf DIGIT9
clrf DIGIT10
return
absa rlf REGA3,w
skpc
return ;Positive
;****************************************************************************************************************************************
VALOR_ADC MOVLW 0X30
ADDWF DIGIT7,W
CALL DATO_LCD
MOVLW 0X30
ADDWF DIGIT8,W
CALL DATO_LCD
MOVLW 0X30
ADDWF DIGIT9,W
CALL DATO_LCD
MOVLW 0X30
ADDWF DIGIT10,W
CALL DATO_LCD
MOVLW 0X0C ;COFIG DISPLAY CONTROL: DISPALY=ON,CURSOR=OFF,PARPADEO DEL CURSOR=OFF
CALL CONTROL_LCD
MOVLW B'11000101'
GOTO CONTROL_LCD
;******************************************************************************************************************************************
RETARDO1 MOVLW .41 ;RETARDO DE 5MILISEGUNDOS
MOVWF CONT1
MOVlW .41
MOVWF CONT2
DEMORA1 DECFSZ CONT1,F
GOTO DEMORA1
DECFSZ CONT2,F
GOTO DEMORA1
RETURN
;****************************************************************************************************************************************
RETARDO2 MOVLW .183 ;RETARDO DE 1 SEGUNDOS
MOVWF CONT1
MOVlW .183
MOVWF CONT2
MOVLW .11
MOVWF CONT3
DEMORA2 DECFSZ CONT1,F
GOTO DEMORA2
DECFSZ CONT2,F
GOTO DEMORA2
DECFSZ CONT3,F
GOTO DEMORA2
RETURN
;****************************************************************************************************************************************
RETARDO3 CLRF CONT1 ;RETARDO DE 3 SEGUNDOS PARA MOSTRAR EL NUMERO
CLRF CONT2
MOVLW .16
MOVWF CONT3
DEMORA3 DECFSZ CONT1,F
GOTO DEMORA3
DECFSZ CONT2,F
GOTO DEMORA3
DECFSZ CONT3,F
GOTO DEMORA3
RETURN
;****************************************************************************************************************************************
RETARDO4 MOVLW .18 ;RETARDO DE 1MILISEGUNDOS
MOVWF CONT1
MOVlW .18
MOVWF CONT2
DEMORA4 DECFSZ CONT1,F
GOTO DEMORA4
DECFSZ CONT2,F
GOTO DEMORA4
RETURN
;****************************************************************************************************************************************
END