Sei sulla pagina 1di 14

El ADC interno del PI C16F87X

Eduardo Romero A. Laboratorio de Sistemas Digitales I I I


PRCTICA NO. 9

EL CONVERTIDOR ANALGICO DIGITAL DEL PIC16F877


OBJETIVOS:

El alumno se familiarizar con el uso del ADC interno del MC68HC11, sus
registros de control y configuracin.

Manejo del convertidor A/D en los diferentes modos de operacin que son: Sondeo
e interrupciones.


INTRODUCCIN

En la actualidad los sistemas digitales que se encargan de controlar variables fsicas
como la temperatura, humedad, presin, flujo etc. Tienen incorporados convertidores de
analgico a digital (ADC) y de digital a analgico (DAC). En la figura 9.1 se muestra un
diagrama a bloques de las partes que conforman un sistema digital.









Figura 9.1: Sistema de procesamiento digital de variables fsicas.


Cualquier informacin que se desea introducirse a un sistema digital primero debe
trasladarse a algn formato binario para que el microcontrolador pueda procesarlo. De
igual manera la salida de un sistema de esta naturaleza es entregada en forma digital.

Los PIC16F87X poseen un mdulo ADC interno que les permite manejar 5 entradas
analgicas para los dispositivos de 28 pines y 8 para los de 40 pines. En la figura 1 se
muestra un diagrama de bloques del mdulo ADC interno.

TRANSDUCTOR ADC
SISTEMA
DIGITAL DAC ACTUADO
R
Variable
Fsica
Variable
Fsica
El ADC interno del PI C16F87X
Eduardo Romero A. Laboratorio de Sistemas Digitales I I I


Figura 9.2: Arquitectura del mdulo convertidor A/D.

El multiplexor.- El ADC es un convertidor de aproximaciones sucesivas de 10 bits, el cual
puede realizar la conversin de una de las 8 entradas (o canales) analgicas AN0 hasta
AN7 multiplexadas por la lgica interna que utiliza como lneas de seleccin del canal los
bits CHS2-CHS0, en donde se coloca el nmero en binario del canal a convertir.

Voltajes de Referencia.- Todo convertidor ADC requiere voltajes de referencia que
determinan el valor de mnima escala (V
REF
-) y el de plena escala (V
REF
+), de manera que
la conversin de un valor de voltaje analgico V
in
en el rango de V
REF
- a V
REF
+ producir
un valor equivalente binario (D) en el rango de 0 a 2
n
-1, Donde n es la resolucin del
convertidor (n = 10)

Como la relacin entre escalas es lineal, una regla de tres proporciona la relacin entre el
voltaje analgico de entrada (V
in
) y el valor digital (D) obtenido por el ADC.

ecuacin (1)

Con la eleccin ms comn: V
REF
+ = VDD = 5v, V
REF
- = VSS = 0V, y como n = 10, se
obtiene:
ecuacin (2)
El ADC interno del PI C16F87X
Eduardo Romero A. Laboratorio de Sistemas Digitales I I I

De donde puede visualizarse que cuando V
in
vara en todo su rango, desde 0 hasta 5V, el
valor obtenido D lo hace tambin de 0 a 1023.

Cabe sealar que la conversin del dato D al voltaje correspondiente requiere una
multiplicacin por un nmero fraccionario, para lo cual el PIC no posee instrucciones: De
tal forma que si se desea realizar esta multiplicacin en el MCU deber programarse una
rutina que multiplique nmeros de punto fijo o de punto flotante.

Otro punto importante en el ADC del PIC16F87X es el que se refiere a la configuracin de
los bits ADCS2, ADCS1 y ADCS0, que se usan para seleccionar la frecuencia de reloj
para la conversin de acuerdo a lo dispuesto en la tabla 9.1


ADCS2:ADCS1:ADCS0 Frecuencia del ADC T
AD

000 F
osc
/2 2 T
osc

100 F
osc
/4 4 T
osc

001 F
osc
/8 8 T
osc

101 F
osc
/16 16 T
osc

010 F
osc
/32 32 T
osc

110 F
osc
/64 64 T
osc


Tabla 9.1: Bits para configurar la frecuencia de operacin del ADC en los PIC16F87X

Donde T
AD
se define como el tiempo que dura la conversin de un bit y en los PIC16F87X
nunca debe ser menor a 1.6 s.

En el diagrama de tiempo de la figura 9.3 se muestran los eventos que tienen lugar
durante el proceso de una conversin analgico/digital. Puede notarse que el proceso
completo de conversin para 10 bits es de 12 T
AD
.



Figura 9.3: Diagrama de tiempo del proceso de conversin A/D.

El ADC interno del PI C16F87X
Eduardo Romero A. Laboratorio de Sistemas Digitales I I I


MATERIAL Y EQUIPO EMPLEADO

Laboratorio equipado con computadoras que tengan instalado el MPLAB versin
v7.40 y el ICPROG v1.05.

Cantidad Descripcin
1 Programador compatible con ICPROG.
1 Microcontrolador PIC16F877
1 Potenciometro de 100k
8 Leds o una barra de leds
8 Resistencia de 330

1 Tableta experimental
1 Multmetro
Osciloscopio
Generador de funciones
1 Fuente de alimentacin de CD


Pre-reporte:

Leer previamente toda la prctica.
Llevar implementado en un protoboard el circuito de la figura 9.10.

DESARROLLO

I. El ADC en modo sondeo y canal simple

1. Edite el siguiente programa en MPLAB, el cual configura al ADC para convertir
continuamente en modo sondeo el canal 0 (AN0) y mostrar el resultado de la conversin
(10 bits) por los puertos C (2 MSB) y B (8 LSB).


;************************************************************************

LIST P=16F877 ; Modificar de acuerdo al PIC empleado
RADIX HEX
include "p16f877.inc"

TEMP1 EQU 20

;************************************************************************
org 0
goto INICIO ; Salta a INICIO

org 4
goto INICIO ; No se usan interrupciones
El ADC interno del PI C16F87X
Eduardo Romero A. Laboratorio de Sistemas Digitales I I I
;************************************************************************
; Rutina de retardo de 1 ms, una frecuencia
; de oscilacin de 4 MHZ
RETARDO
nop ; 1 ciclo
movlw 249 ; 1 ciclo
movwf TEMP1 ; 1 ciclo

CICLO
nop ; K ciclos
decfsz TEMP1,f ; (K-1)+2 ciclos
goto CICLO ; 2(K-1) ciclos
return ; 2

;************************************************************************
; Rutina de configuracin del ADC
; para convertir el canal AN0 en modo sondeo
; y resultado justificado a los MSB.
CONFIG_ADC
bsf STATUS,RP0 ; Banco 1
movlw b'10001110' ; Activar solo primer canal (AN0) del ADC,
movwf ADCON1
bcf STATUS,RP0 ; Banco 0
movlw b'01000000' ; Elegir Fosc/8 y convertir solo AN0
movwf ADCON0
bsf ADCON0,0 ; Enciende el ADC
return

;************************************************************************
; Rutina para configurar la direccionalidad
; de los puertos del PIC,
CONFIG_PUERTOS
bsf STATUS,RP0 ; Cambio al BANCO 1
bsf TRISA,0 ; Configura RA0 como entrada analgica (AN0)
bsf TRISA,1 ; Configura RA1 como entrada
clrf TRISB ; Puerto B como salida
clrf TRISD ; Puerto D como salida
bcf TRISC,0 ; RC0 como salida
bcf TRISC,1 ; RC1 como salida
bcf STATUS,RP0 ; Regreso al BANCO 0
return

;************************************************************************
; Ciclo de inicializacion
INICIALIZACION
call CONFIG_PUERTOS ; Configura puertos
clrf PORTC
clrf PORTB
clrf PORTD
call CONFIG_ADC ; Rutina de configuracin del ADC
call RETARDO ; Retardo (excesivo) de 1 ms para
return ; estabilizar el ADC

;************************************************************************
; Ciclo de adquisicion
ADQUISICION
bsf ADCON0,2 ; Inicia conversion
El ADC interno del PI C16F87X
Eduardo Romero A. Laboratorio de Sistemas Digitales I I I
ADC_BUSY
btfsc ADCON0,2 ; Ya termino la conversion?
goto ADC_BUSY ; No
comf PORTD,f
movf ADRESH,w ; Si, lee los 2 LSB
movwf PORTC ; envialos al puerto C
bsf STATUS,RP0 ; Banco 1
movf ADRESL,w ; Lee los 8 LSB
bcf STATUS,RP0 ; Banco 0
movwf PORTB ; envialos al puerto B
return

;************************************************************************
; Programa principal
INICIO
call INICIALIZACION
call ADQUISICION
goto $-1

END

2 Realic el procedimiento de ensamble del programa en la forma acostumbrada y
verifique que no existan errores inspeccionando el archivo error. Posteriormente proceda
a descargar el archivo HEX al PIC.

3 Con ayuda del multmetro y una fuente de alimentacin variable, ajuste hasta obtener un
Vin = 1V. Energice el PIC y ejecute el programa Cul es el valor binario de la conversin
que se observa en los leds? (El puerto C muestra los 2 MSB y el B los 8 LSB).

________________________________________________________________________

4 Repita el experimento anterior, variando el V
in
con los valores que se indican en la tabla
y anotando el valor correspondiente de su conversin. Para calcular el resultado terico
de conversin usar la ecuacin (2).


Vin

Resultado de la
conversin
(terico)
Resultado de la
conversin
(Binario)
Resultado de
la conversin
(Hexadecimal)
0 V.
0.5 V
1 V
1.5 V
2 V
2.5 V
3 V
3.5 V
4 V
4.5 V
5 V

Tabla 9.2: Relacin entre Vin y la salida digital del ADC
El ADC interno del PI C16F87X
Eduardo Romero A. Laboratorio de Sistemas Digitales I I I

5 Con los valores obtenidos en la tabla 2, grafique la funcin de transferencia del ADC.



Figura 9.4: Grfica de la funcin de transferencia del ADC


II. El ADC en modo interrupcin y canal simple

Cuando se requiere que el proceso de conversin sea ms eficiente y no genere tiempos
muertos que esclavicen al MCU, se debe configurar al ADC en modo interrupcin. Esto
evitar que el MCU tenga que sondear el bit GO/DONE y por lo tanto, puede programarse
para realizar otras tareas mientras el ADC realiza la conversin, con la plena certeza de
que cuando esta finalice se generar un interrupcin.

;************************************************************************
; Programa que realiza 16 conversiones consecutivas con el ADC usando
; interrupciones y las almacena en una tabla, para posteriormente
; desplegarlas por los puertos C y B.
;************************************************************************

LIST P=16F877 ; Modificar de acuerdo al PIC empleado
RADIX HEX
include " p16f877.inc"

org 20h
CONVS res .32

CBLOCK 50H
N_CONV
TEMP1
TEMP2
ENDC
El ADC interno del PI C16F87X
Eduardo Romero A. Laboratorio de Sistemas Digitales I I I

;************************************************************************
org 0
goto INICIO ; Salta a INICIO

org 4
goto ISR_ADC ; No se usan interrupciones

;************************************************************************
; Rutina de retardo de 1 ms, una frecuencia
; de oscilacin de 4 MHZ
RETARDO
nop ; 1 ciclo
movlw .249 ; 1 ciclo
movwf TEMP1 ; 1 ciclo

CICLO
nop ; K ciclos
decfsz TEMP1,f ; (K-1)+2 ciclos
goto CICLO ; 2(K-1) ciclos
return ; 2

;************************************************************************
; Rutina de retardo variable
; Manda a llamar a RETARDO
; RETARDO TOTAL = TEMP2 * 1 ms
RETVAR
movf TEMP2,f
btfsc STATUS,2 ; Z = 1?
goto SALIR ; Si, termina
OTRO call RETARDO ; No, ejecuta retardo
decfsz TEMP2,f ; No, TEMP2 - 1 = 0?
goto OTRO ; Si, termina
SALIR
return

;************************************************************************
; Rutina de configuracin del ADC
; para convertir el canal AN0 en modo sondeo
; y resultado justificado a los MSB.
CONFIG_ADC
bsf STATUS,RP0 ; Banco 1
movlw b'10001110' ; Activar solo canal (AN0) del ADC,
movwf ADCON1 ; con resultado de conversin
; justificado al LSB
bcf STATUS,RP0 ; Banco 0
movlw b'01000000' ; Elegir Fosc/8 y convertir solo AN0
movwf ADCON0
bsf ADCON0,0 ; Enciende el ADC
bcf PIR1,ADIF ; Limpia flag del ADC
bsf STATUS,RP0 ; Banco 1
bsf PIE1,ADIE ; Activa interrupciones del ADC
bsf INTCON,PEIE ; Activa interrupciones de perifericos
bsf INTCON,GIE ; Activa mascara goblal de interrup.
bcf STATUS,RP0 ; Banco 1
return
El ADC interno del PI C16F87X
Eduardo Romero A. Laboratorio de Sistemas Digitales I I I

;************************************************************************
; Rutina para configurar la direccionalidad
; de los puertos del PIC,
CONFIG_PUERTOS
bsf STATUS,RP0 ; Cambio al BANCO 1
bsf TRISA,0 ; Configura como entrada RA0/AN0
bsf TRISA,1 ; Configura RA1 como entrada
clrf TRISB ; Puerto B como salida
bcf TRISC,0 ; RC0 como salida
bcf TRISC,1 ; RC1 como salida
bcf STATUS,RP0 ; Regreso al BANCO 0
return

;************************************************************************
; Rutina de inicializacion
INICIALIZACION
movlw .16 ; Numero de conversiones
movwf N_CONV
movlw CONVS ; Apuntador a la tabla
movwf FSR ; de cada conversion
call CONFIG_PUERTOS ; Configura puertos
clrf PORTC
clrf PORTB
call CONFIG_ADC ; Rutina de configuracin del ADC
call RETARDO ; Retardo (excesivo) de 1 ms para
return ; estabilizar el ADC

;************************************************************************
; Ciclo de adquisicion
ISR_ADC
Movf ADRESH,w ; Lee los 2 MSB
movwf INDF ; Almacenalos en (FSR)
incf FSR,f ; FSR++
bsf STATUS,RP0 ; Banco 1
movf ADRESL,w ; Lee los 8 LSB
bcf STATUS,RP0 ; Banco 0
movwf INDF ; Almacenalos en (FSR+1)
incf FSR,f ; FSR++
decfsz N_CONV,f ; N_CONV--? = 0
goto $+3 ; No
clrf INTCON ; Si, desactiva las interrupciones
retfie

bcf PIR1,ADIF ; Limpia flag del ADC
bsf ADCON0,2 ; Inicia otra conversion
retfie

;************************************************************************
; Ciclo de despliegue
DESPLIEGUE
movlw .16 ; Numero de conversiones
movwf N_CONV
movlw CONVS ; Apuntador a la tabla
movwf FSR ; para cada conversion
El ADC interno del PI C16F87X
Eduardo Romero A. Laboratorio de Sistemas Digitales I I I

OTRO_DESPLIEGUE
movf INDF,w ; Lee los 2 MSB
movwf PORTC ; envialos al puerto C
incf FSR,f ; FSR++
movf INDF,w ; Lee los 8 LSB
movwf PORTB ; envialos al puerto B
incf FSR,f
movlw .250
movwf TEMP2
call RETVAR ; 250 ms
movlw .250
movwf TEMP2
call RETVAR ; 250 ms
movlw .250
movwf TEMP2
call RETVAR ; 250 ms
movlw .250
movwf TEMP2
call RETVAR ; 250 ms
decfsz N_CONV,f
goto OTRO_DESPLIEGUE
return


;************************************************************************
; Programa principal
INICIO
Call INICIALIZACION
bsf ADCON0,2 ; Inicia primera conversion
ESPERA
btfsc PORTA,1
goto ESPERA
call DESPLIEGUE ; Despliega las conversiones
goto $
END

6. El siguiente programa configura al ADC para realizar 16 conversiones del canal 0 (AN0)
empleando interrupciones y despus muestra el resultado de cada conversin por los
puertos C (2 MSB) y B (8 LSB). Analcelo y comprelo con el anterior. Cules son las
diferencias en la estructura del programa?

________________________________________________________________________

________________________________________________________________________

Qu diferencias en la rutina que configura al ADC?

________________________________________________________________________

________________________________________________________________________

7. Proceda a editar, compilar y descargar el programa en el PIC en la forma
acostumbrada.
El ADC interno del PI C16F87X
Eduardo Romero A. Laboratorio de Sistemas Digitales I I I

8. Con la ayuda del osciloscopio, establezca en el generador de funciones una seal
senoidal positiva de 2.5 KHz similar a la mostrada en la figura 9.5. Utilice la perilla offset
para desplazar el nivel de la tierra.

t
+ 5
+ 2.5
400 us
V
i
0

Figura 9.5: Seal senoidal positiva de 2.5 KHz

9. Proceda a conectar el generador de f unciones al nodo rotulado con Vin del circuito.
Encienda el girador y ejecute el programa Se observa algo en los leds?, justifique su
respuesta.

________________________________________________________________________

________________________________________________________________________


10. Oprima el interruptor SW1 conectado a la terminal RA1 del PIC qu es lo que
sucede?

________________________________________________________________________

________________________________________________________________________


11. Oprima el botn de reset del circuito para volver a ejecutar el programa, repita el
paso anterior pero ahora anote cada uno de los valores desplegados en los leds y
grafquelos en la figura 9.6.

El ADC interno del PI C16F87X
Eduardo Romero A. Laboratorio de Sistemas Digitales I I I



Figura 9.6: Grfica para seal senoidal


12. Repita el paso anterior, pero ahora cambie la seal por una rectangular y luego por
una triangular. Posteriormente grafique el valor de cada una de las conversiones para
cada tipo de seal en las figuras 9.7 y 9.8.



Figura 9.8: Grfica para seal triangular

El ADC interno del PI C16F87X
Eduardo Romero A. Laboratorio de Sistemas Digitales I I I


Figura 9.9: Grfica para seal rectangular


13. De acuerdo a su graficas, intente determinar el tiempo que hay entre cada una de las
muestras y con base en ello determine la frecuencia de muestreo y antela. De ser
necesario, decremente o incremente el nmero de conversiones (muestras) que realiza el
programa hasta obtener la grafica de un ciclo completo.


El ADC interno del PI C16F87X
Eduardo Romero A. Laboratorio de Sistemas Digitales I I I


Figura 9.10: Circuito para verificar el funcionamiento del ADC

Potrebbero piacerti anche