La salida del convertidor analogico digital es de 10 bits, asi que el resultado de la conversion A/D se almacena en dos bytes, uno es la parte alta y otro es la parte baja.
Para simplificar se uso referencia de 5 V lo cual significa que si le aplico de 0 a 1 volt el resultado cabrá en un solo byte, que es la parte baja, este byte se mueve entonces a un puerto del pic para presentarse como un numero binario en un display de leds.
Así Funciona:
VA EL PROGRAMA:
++++++++++++++++inicia programa++++++++++++++++++++++++++++
;PROGRAMA QUE PRUEBA LA CONVERSION AD DEL PIC
;1stentropy
;DICIEMBRE 2 DE 2009 8:39AM
__config _LVP_OFF & _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF & _BODEN_OFF & _DEBUG_OFF
list p=16f876
#include
cont1 equ 0x21
cont2 equ 0x22
org 0x00
GOTO Inicio
org 0x04 ;rutina de servicio de interrupciones
Interrupciones
retfie
Inicio
BCF STATUS,RP0 ; Select Bank0
BCF STATUS,RP1
CLRF PORTA ; limpia el puerto A
CLRF PORTB ; y el puerto B
BSF STATUS,RP0 ; Select Bank1
CLRF ADCON1 ; Configure A/D inputs todas las entradas en el puerto A seran entradas analogicas
BSF ADCON1,ADFM ; Se alineara a la derecha los diez digitos del resultado de la conversion A/D
MOVLW 0x3F ;Cargo W=b'00111111'
MOVWF TRISA ;y lo paso a trisA. para que los pines funcionen como entradas.
MOVLW 0x00
MOVWF TRISB ;Configura puerto B como salidas
BCF STATUS,RP0 ; Select Bank0
MOVLW 0xC1 ; Clock 1/32 fosc, Channel RA0 is selected, A/D module is on
MOVWF ADCON0 ;
; BCF PIR1,ADIF ; Clear A/D interrupt flag bit
; BSF INTCON,PEIE ; Enable peripheral interrupts
; BCF INTCON,GIE ; Enable all interrupts
Adquiere
CALL Espera ; Ensure that the required sampling time for the selected input
; channel has elapsed. Then the conversion may be started.
;
BSF ADCON0,GO ; Start A/D Conversion
; The ADIF bit will be set and the GO/DONE
; bit is cleared upon completion of the
; A/D Conversion.
Conversion
BTFSC ADCON0,GO
GOTO Conversion
BSF STATUS,RP0 ; Select Bank1
MOVF ADRESL,W
BCF STATUS,RP0 ; Select Bank0
MOVWF PORTB
GOTO Adquiere
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Espera
CLRF cont1
; CLRF cont2
Retardo
DECFSZ cont1,f
GOTO Retardo
; DECFSZ cont2,f
; GOTO Retardo
RETURN
END
+++++++++++++++++++++termina programa++++++++++++++++++++++++++
SI QUSIERA USAR EL CONVERTIDOR A/D PARA MILIVOLTS SERA POSIBLE?? QUISIERA USAR UN RANGO DE 0 A 1 VOLT
ResponderEliminarsi, es posible, si el convertidor tiene una resolucion de 10 bits significa que el intervalo de 0 a 5 volts se divide en 1023 partes (0000000000 cuando tenga 0 volt y 1111111111 cuando tenga 5 volt, la mitad del intervalo: 2.5 volt sera 0111111111).
ResponderEliminarSi se divide en 1023 partes significa que tienes una resolucion de 0.0048875 V, es decir cada numero binario que cuentas te permite medir en intervalos de 4.88 miliVolt.
De 0 a 1 Volt se ocuparia contar desde 0 a 204 en decimales o en binarios seria 00000000 para 0 volts y 11001100 para 1 volt.
uuuuuhhh... espero ser un poco claro en mi explicacion, saludos.
hola, me gustaria hacer en lenguaje ensamblador un voltimetro.
ResponderEliminarutilizaría el pic de tu ejercicio.
tengo 3 displays conectados a ra0, ra1 y ra2, la lectura llega a traves del puerto b
me podrias echar un cable?
mil gracias !! =)
Ese programa presenta 37 errores muchas gracias por enseñar y educar.
ResponderEliminar