Buenos dias FORER@S,
Necesito consultaros algo por si podeis echarme una mano.
Estoy tratando de desarrollar una tarjeta de adquisicion de datos ANALOGICA-DIGITAL que transmita las señales por puerto serie a un PC. (sin muchas complicaciones)
Al simular en PROTEUS, tengo un problema con el CAD y es que introduzco una señal por NA0 y por el puerto serie entrega un valor que no corresponde con esa señal. Creo que no hace correctamente la conversion.
He usado dos opciones diferentes pero basadas en el mismo calculo.
OPCION 1.
uso 8 bits de conversion (256 cuentas) y 5 V de ref.
introduciendo 0.6V en AN0
0.6V*(256cuentas/5V)= 30.72 cuentas (aprox 31 cuentas). El CAD entrega otra cosa.
Con la opcion 1, y usando un LM35 de 0.01V/ºC pierdo informacion [resolucion=Vref/2^n = 5/256= 0.01953 (aprox. 0,02)] Puede que ese sea el fallo. Por ello llego a la opcion 2.
OPCION 2.
uso 8 bits de conversion (256 cuentas) y 2.56 V de ref.
introduciendo 0.6V en AN0
0.6V*(256cuentas/2.56V)= 60 cuentas
Con la opcion 2, no deberia perder informacion pero el CAD sigue entregando un valor erroneo y no se si es fallo de programacion o que. Lo cierto es que necesitaría un poco de ayuda para retomar "EL CAMINO".
Os dejo el codigo por si podeis echarle un ojo. UN MILLON DE GRACIAS POR VUESTRO TIEMPO.
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
list p=16f877
include <p16f877.inc>
ADDR_L equ 0x20
DATA_L equ 0x21
contador
org 0x00
nop
nop
bcf STATUS,RP0 ; ir al banco 0
bcf STATUS,RP1
movlw b'10000001' ; A/D conversion a Fosc/8
movwf ADCON0
bsf STATUS,RP0 ; ir al banco 1
bcf STATUS,RP1
clrf TRISA ;Configuracion de puertos.
clrf TRISB
clrf TRISC
clrf TRISD
clrf TRISE
bsf TRISA,0 ; configuracion de AN0 como entrada
bcf TRISC,6 ; RC6/TX/DT como salida.
movlw b'00001000' ; A/D port AN0/RA0 b'01001110'
movwf ADCON1
movlw d'12' ;2400 baudios para cristal de 4MHz.
movwf SPBRG
bcf TXSTA,BRGH ; BRGH=0 baja velocidad
bcf TXSTA, SYNC ; Modo asincrono.
bcf STATUS,RP0 ; ir al banco 0
bcf STATUS,RP1
bsf RCSTA,SPEN ; habilita el puerto serie.
bsf STATUS,RP0 ; ir al banco 1
bcf STATUS,RP1
bcf TXSTA,TX9 ; TX9=0 9 bit de transferecia no habiliado.
bsf TXSTA,TXEN ; TXEN=1 activacion de la transmision serie.
bcf STATUS,RP0 ; ir al banco 0
bcf STATUS,RP1
_adc
bsf ADCON0,GO ; habilita la conversion.
_espera
btfsc ADCON0,GO ; ¿ha finalizado la conversion?
goto _espera ; si no ha finalizado vuelve a _adc
movf ADRESH,W ; si ha finalizado guarda el valor de ADRESH en W
movwf TXREG ;cargael registro TXREG con W
movwf PORTC ;saca el valor de w por el puerto C
_esperatx
btfss PIR1,TXIF ; comprueba si se ha vaciado el registro de transmision TSR. Entonces habrá acabado la transmision.
goto _esperatx ; si no se ha vaciado aun está transmitiendo. Espera.
; goto _adc ; si ha finalizado inicia el ciclo convirtendo otro valor.
_delay
movlw .10000
movwf contador
_zcero
decf contador,F
btfss STATUS,Z
goto _zcero
goto _adc
end