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:
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
Última edición por un moderador: