Conversor ADC, distinta salida para la misma entrada

Buenas noches, compañeros! Estoy trabajando con el conversor análogo/digital del PIC16F684A. El problema es que, aunque la señal de entrada es la misma, cada vez que hago la conversión la salida es distinta. Lo más extraño es que la salida cambia con un patrón:

1º Conversión: 1111 1111
2º Conversión: 1011 1111
3º Conversión: 0111 1111
4º Conversión: 0011 1111
5º Conversión: 1111 1111 (y se repite)
6º Conversión: 1011 1111 ...

Me pasa en la simulación y en la vida real, he revisado el código muchas veces y no encuentro el error. Les adjunto los archivos de MPLAB y Proteus por si me pueden ayudar. Y de todas formas, aquí les pongo el código:

Código:
    LIST    P=16F684
    RADIX    HEX
    INCLUDE    <P16F684.INC>

CONT1    equ 0x20
CONT2    equ 0x21
CONT3    equ    0x22
REG        equ    0x23

    ORG        0x00            ;Vector de reset
    goto    INICIO
    ORG        0x05

INICIO
;banco1
    banksel    ADCON1
    ;movlw    b'01010000'        ;Configurar reloj de ADC, FOSC/16 (para 8 MHz, conversión en 2 us)
    movlw    b'00100000'        ;Configurar reloj de ADC, FOSC/32 (para 8 MHz, conversión en 4 us)
    movwf    ADCON1
;banco0
    banksel    PORTA
    clrf    PORTA            ;Borrar básculas de datos en PORTA
    clrf    PORTC            ;Borrar básculas de datos en PORTC
    movlw    0x07            ;Desactivar comparadores
    movwf    CMCON0
;banco1
    banksel    ANSEL
    movlw    0x01            ;AN<0> análogo, AN<7:1> digitales
    movwf    ANSEL
    movlw    0x09            ;RA0 y RA3 entradas
    movwf    TRISA
    movlw    0x00            ;RC<5:0> salidas
    movwf    TRISC
    movlw    b'01110101'        ;Reloj interno a 8MHz
    movwf    OSCCON
;banco0
    banksel    PORTA

MAIN
    btfss    PORTA,3
    goto    $-1
    call    DELAY_20ms        ;Espera para evitar rebotes en el pulsador
    btfsc    PORTA,3            ;Espera a que suelte el pulsador
    goto    $-1
    call    CONVERTIR
    movwf    PORTC            ;Mostrar Resultado <5:0> en PORTC
    rrf        REG,F            ;Rotar Resultado <7:6> hasta las posiciones <5:4>
    rrf        REG,F
    movf    REG,W
    andlw    b'00110000'
    addwf    PORTA,F            ;Mostrar Resultado <7:6> en PORTA<5:4>
    goto    MAIN

CONVERTIR
    bsf        PORTA,1
    call    DELAY_1s
    bcf        PORTA,1
    call    DELAY_1s
;banco0
    movlw    b'00000001'        ;Canal AN4, justificado a la izquierda
    movwf    ADCON0
    call    DELAY_20us        ;(En la simulación no funciona con: 8 us) Esperar 8 us, el "Aquisition time", para que se aliste el convertidor
    call    DELAY_20us
    bsf        ADCON0,GO
    btfsc    ADCON0,GO
    goto    $-1
;banco0
    banksel    ADRESH
    movf    ADRESH,W
    movwf    REG
    return

DELAY_20us
    movlw    0x0B
    movwf    CONT1
DELAY_20us_0
    decfsz    CONT1, f
    goto    DELAY_20us_0
    goto    $+1
    return

DELAY_20ms
    movlw    0x3E
    movwf    CONT1
    movlw    0x20
    movwf    CONT2
DELAY_20ms_0
    decfsz    CONT1, f
    goto    $+2
    decfsz    CONT2, f
    goto    DELAY_20ms_0
    goto    $+1
    nop
    return

DELAY_1s
    movlw    0x11
    movwf    CONT1
    movlw    0x5D
    movwf    CONT2
    movlw    0x05
    movwf    CONT3
DELAY_1s_0
    decfsz    CONT1, f
    goto    $+2
    decfsz    CONT2, f
    goto    $+2
    decfsz    CONT3, f
    goto    DELAY_1s_0
    return

END
 

Adjuntos

  • Análogo.rar
    39.6 KB · Visitas: 7
Última edición por un moderador:
Hola, te comento que tenias un pequeño error, adjunto la correccion.
 

Adjuntos

  • Análogo_.rar
    40.3 KB · Visitas: 5
Gracias Saint_, esta es la primera vez que alguien me corrige el código jaja. Pero tengo duda, al final me agregaste esto:

;**********************************************
org 0x2007 ;direccion donde se encuentran los bits de confuguracion del pic
data 0x34C4 ;palabra de configuracion
;**********************************************

¿Para qué sirven? Es decir, ¿le indican algo al microcontrolador? Y también, ¿cómo puedo saber cuáles son los valores para otros microcontroladores?
 
Atrás
Arriba