practica 9 adc

Upload: israel-fuentes

Post on 11-Oct-2015

12 views

Category:

Documents


0 download

TRANSCRIPT

  • El ADC interno del PIC16F87X

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

    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 PIC16F87X

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

    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 (VREF-) y el de plena escala (VREF+), de manera que la conversin de un valor de voltaje analgico Vin en el rango de VREF- a VREF+ producir un valor equivalente binario (D) en el rango de 0 a 2n-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 (Vin) y el valor digital (D) obtenido por el ADC.

    ecuacin (1) Con la eleccin ms comn: VREF+ = VDD = 5v, VREF- = VSS = 0V, y como n = 10, se obtiene:

    ecuacin (2)

  • El ADC interno del PIC16F87X

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

    De donde puede visualizarse que cuando Vin 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 TAD 000 Fosc/2 2 Tosc 100 Fosc /4 4 Tosc 001 Fosc /8 8 Tosc 101 Fosc /16 16 Tosc 010 Fosc /32 32 Tosc 110 Fosc /64 64 Tosc

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

    Donde TAD 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 TAD.

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

  • El ADC interno del PIC16F87X

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

    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 PIC16F87X

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

    ;************************************************************************ ; 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 PIC16F87X

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

    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 Vin 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 PIC16F87X

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

    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 PIC16F87X

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

    ;************************************************************************ 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 PIC16F87X

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

    ;************************************************************************ ; 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 PIC16F87X

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

    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 PIC16F87X

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

    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 usVi

    0

    Figura 9.5: Seal senoidal positiva de 2.5 KHz

    9. Proceda a conectar el generador de funciones 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 PIC16F87X

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

    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 PIC16F87X

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

    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 PIC16F87X

    Eduardo Romero A. Laboratorio de Sistemas Digitales III

    Figura 9.10: Circuito para verificar el funcionamiento del ADC

    PRCTICA NO. 9EL CONVERTIDOR ANALGICO DIGITAL DEL PIC16F877MATERIAL Y EQUIPO EMPLEADO

    DESARROLLOOLE_LINK1OLE_LINK2