modulo adc

Upload: mirian-carmen-mayta-castro

Post on 20-Jul-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Mdulo de Conversin A/D

Microcontroladores PIC

ATE-Universidad de Oviedo

1

Mdulo de Conversin A/D

Caractersticas generales en el PIC16F877 (A)Ocho canales de conversin.Cinco pines de PORTA y los tres de PORTE.

Convierte la seal analgica en un nmero digital de 10 bits.

Tensiones de referencia VREF+ y VREF- seleccionables por software.Pueden ser VDD y VSS o las tensiones aplicadas en los pines RA3 / RA2.

Puede seguir funcionando cuando el PIC est en modo SLEEP ya que dispone de un oscilador RC interno propio Hay 11 registros asociados a este perifrico.Definicin de pines de entrada y seales aplicadas Manejo de interrupcionesTRISA PORTA TRISE - PORTE INTCON PIE1 PIR1 ADCON0 ADCON1 ADRESH - ADRESLATE-Universidad de Oviedo

Control del conversor A/DMicrocontroladores PIC

2

Mdulo de Conversin A/D

Estructura internaMultiplexor analgico 8 a 1RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA5/AN4 RE0/AN5 RE1/AN6 RE2/AN7000 001 010 011 100 101 110 111

CHS2:CHS0

Seleccin del canal analgicoVAIN (Input Voltage)

Mdulo A/DSS RSS Circuito de Muestreo y Retencin CHOLD

VDD

Configuracin entradas PCFG3:PCFG0VREF+

PCFG3:PCFG0 VREFVSS Microcontroladores PIC ATE-Universidad de Oviedo

GO /DONE

3

Mdulo de Conversin A/D

Funcin de transferencia conversor A/D La primera transicin tiene lugar cuando la tensin analgica de entrada alcanza el valor VREF- + (VREF+ - VREF-)/1024 1LSb.11 bits

400h 3FFh 3FEh 3FDh 3FCh

004h 003h 002h 001h 000h

(VREF-)

(VREF+)

1022 LSb 1023 LSb 1024 LSb

1 LSb 2 LSb 3 LSb 4 LSb

1021 LSb

Microcontroladores PIC

ATE-Universidad de Oviedo

4

ADRESH

A/D

ADRESL

Mdulo de Conversin A/D

Funcin de transferencia conversor A/DCaso de que V REF+ = VDD y que V REF- = VSS11 bits

400h 3FFh 3FEh 3FDh 3FCh

004h 003h 002h 001h 2 LSb 4 LSb 1021 LSb 1022 LSb0V

1 LSB = VDD/1024

1023 LSb 1024 LSb

3 LSb

1 LSb

000h

VDD

Ve

Microcontroladores PIC

ATE-Universidad de Oviedo

5

Mdulo de Conversin A/D

Registro ADCON0 (1Fh)ADCS1 ADCS0 CHS2 CHS1 CHS0

caso de los PIC16F87x y versiones antiguas

GO/DONE

-

ADON

bit 7-6

ADCS1:ADCS0: Seleccin del reloj para la conversin A/D00 = fOSC / 2 01 = fOSC / 8 10 = fOSC / 32 11 = fRC

bit 5-3

CHS2:CHS0: Seleccin del canal de conversin000 = Canal 0 100 = Canal 4 001 = Canal 1 101 = Canal 5 010 = Canal 2 110 = Canal 6 011 = Canal 3 111 = Canal 7

bit 2

GO/DONE: Estado de la conversinSi ADON=1: 1 = Conversin en progreso 0 = Conversin finalizada

bit 0

ADON: Bit de encendido del convertidor A/D1 = Mdulo A/D encendido 0 = Mdulo A/D apagado 6

Microcontroladores PIC

ATE-Universidad de Oviedo

Mdulo de Conversin A/D

Registro ADCON0 (1Fh)ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE

caso de los PIC16F87xA

-

ADON

bit 7-6

ADCS1:ADCS0: Seleccin del reloj para la conversin A/D junto con ADCS2 que est en ADCON100 = fOSC / 2 00 = fOSC / 4 01 = fOSC / 8 01 = fOSC / 16 10 = fOSC / 32 10 = fOSC / 64 11 = fRC 11 = fRC

ADCS2= 0 ADCS2= 1

bit 5-3

CHS2:CHS0: Seleccin del canal de conversin000 = Canal 0 100 = Canal 4 001 = Canal 1 101 = Canal 5 010 = Canal 2 110 = Canal 6 011 = Canal 3 111 = Canal 7

bit 2

GO/DONE: Estado de la conversinSi ADON=1: 1 = Conversin en progreso 0 = Conversin finalizada

bit 0

ADON: Bit de encendido del convertidor A/D1 = Mdulo A/D encendido 0 = Mdulo A/D apagado 7

Microcontroladores PIC

ATE-Universidad de Oviedo

Mdulo de Conversin A/D

Registro ADCON1 (9Fh)ADFM PCFG3 PCFG2

caso de los PIC16F87x y versiones antiguas

PCFG1

PCFG0

bit 7

ADFM: Seleccin de formato del resultado1 = Ajuste a la derecha 0 = Ajuste a la izquierda

bit 3-0

PCFG3:PCFG0: Configuracin de las entradas al mdulo A/DPCFG3: AN7 PCFG0 RE2 0000 0001 0010 0011 0100 0101 011x 1000 1001 1010 1011 1100 1101 1110 1111 A A D D D D D A D D D D D D D AN6 RE1 A A D D D D D A D D D D D D D AN5 RE0 A A D D D D D A A A A D D D D AN4 RA5 A A A A D D D A A A A A D D D AN3 RA3 A VREF+ A VREF+ A VREF+ D VREF+ A VREF+ VREF+ VREF+ VREF+ D VREF+ AN2 RA2 A A A A D D D AN1 RA1 A A A A A A D A A A A A A D D AN0 RA0 A A A A A A D A A A A A A A A

VREFA A VREFVREFVREFD VREF-

Microcontroladores PIC

ATE-Universidad de Oviedo

8

Mdulo de Conversin A/D

Registro ADCON1 (9Fh)ADFM ADCS2 PCFG3 PCFG2

caso de los PIC16F87xA

PCFG1

PCFG0

bit 7 bit 6 bit 3-0

ADFM: Seleccin de formato del resultado ADCS2: Seleccin de reloj para conversin A/D junto con ADCS1 y ADCS0 PCFG3:PCFG0: Configuracin de las entradas al mdulo A/DPCFG3: AN7 PCFG0 RE2 0000 0001 0010 0011 0100 0101 011x 1000 1001 1010 1011 1100 1101 1110 1111 A A D D D D D A D D D D D D D AN6 RE1 A A D D D D D A D D D D D D D AN5 RE0 A A D D D D D A A A A D D D D AN4 RA5 A A A A D D D A A A A A D D D AN3 RA3 A VREF+ A VREF+ A VREF+ D VREF+ A VREF+ VREF+ VREF+ VREF+ D VREF+ AN2 RA2 A A A A D D D AN1 RA1 A A A A A A D A A A A A A D D AN0 RA0 A A A A A A D A A A A A A A A

1 = Ajuste a la derecha

0 = Ajuste a la izquierda

vase carga del registro ADCON0 en PIC16F87xA

VREFA A VREFVREFVREFD VREF-

Microcontroladores PIC

ATE-Universidad de Oviedo

9

Mdulo de Conversin A/D

Registro INTCON (0Bh , 8Bh , 10Bh , 18Bh)GIE PEIE T0IE INTE RBIE T0IF INTF RBIF

bit 7 bit 6

GIE: Habilitacin global de interrupciones PEIE: Habilitacin de interrupciones de perifricos

Registro PIE1 (8Ch)PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

bit 6

ADIE: Habilitacin de la interrupcin del convertidor A/D

Registro PIR1 (0Ch)PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

bit 6

ADIF: Flag de la interrupcin del convertidor A/D1 = Conversin A/D completada. 0 = Conversin A/D an no completada. 10

Microcontroladores PIC

ATE-Universidad de Oviedo

Mdulo de Conversin A/D

Pasos en una conversin A/D1. Configurar el mdulo A/D.Definir entradas analgicas y tensin de referencia. Seleccionar el canal de la conversin. (ADCON0) Seleccionar el reloj de la conversin. (ADCON0) Encender el mdulo A/D. (ADCON0)(ADCON1)

2. Configurar la interrupcin por conversin A/D. - Bajar el flag ADIF. (PIR1)

- Habilitar la interrupcin del convertidor A/D. - Habilitar las interrupciones de los perifricos. - Habilitar la mscara global de interrupciones.

(PIE1) (INTCON) (INTCON)

3. Esperar a que transcurra el tiempo de adquisicin.

- Tiempo necesario para capturar el valor analgico a convertir. - Los valores tpicos del tiempo de adquisicin son del orden de 20s.ATE-Universidad de Oviedo

Microcontroladores PIC

11

Mdulo de Conversin A/D

4. Comenzar la conversin.

- Poner a 1 el bit GO/DONE.

(ADCON0) No activar este bit a la vez que se enciende el convertidor A/D

5. Esperar a que se complete la conversin A/D.

a) Controlando cundo el bit GO/DONE se pone a 0. b) Esperando a que llegue la interrupcin del convertidor. - Disponible en los registros ADRESH:ADRESL. - Bajar el flag ADIF si se estn usando interrupciones.

6. Leer el resultado de la conversin.

7. Llevar a cabo la siguiente conversin.- Volver al paso 1 2, segn convenga. - Espera mnima antes de empezar la siguiente adquisicin: 2TAD (Esta espera no es necesaria en el caso de los PIC16F87xA porque el interruptor de captura se cierra en cuanto se obtiene el resultado)TAD: Tiempo necesario para la conversin de un bit.Microcontroladores PIC ATE-Universidad de Oviedo

12

Mdulo de Conversin A/D

Tiempo necesario para cargar el condensador de mantenimiento (CHOLD).VDD

Tiempo de adquisicin

RS VA

ANX CPIN 5pF

RIC 1K IFUGAS 500nA

SS

RSS CHOLD 120pF VSS

En estas condiciones, TACQ=Amplifier Settling Time +Hold Capacitor Charging Time +Temperature Coefficient =TAMP + TC + TCOFF =2s + TC + [(Temperature -25C)(0.05s/C)] TC = - CHOLD (RIC + RSS + RS) Ln(1/2047) = -120pF (1k. + 7k. + 10k.) Ln(0.0004885) = 16.47s TACQ=2s + 16.47s + [(50C -25C)(0.05s/C) = 19.72s 20s

Mxima impedancia recomendada para la fuente: Rs T conversin + 2TAD +T adquisicin

Desde el fin de conversin hasta que se vuelve a cerrar el interruptor transcurren 2TAD 15

Microcontroladores PIC

ATE-Universidad de Oviedo

Mdulo de Conversin A/D

Tiempo de conversin y Tiempo de adquisicinFijo: 12 TADEl interruptor de muestreo se abre al cabo de 100ns de GO=1

caso de los PIC16F87xA

Depende de Rs externaInterruptor de muestreo cerrado para alcanzar el nuevo valor a convertir

T. de conversin

T. de adquisicin

SS

RSS CHOLD VSSFin de conversin: Se cargan ADRESH:ADRESL Se pone GO/DONE a 0 Se levanta el flag ADIF

SS

RSS CHOLD VSSV analgica

A partir de aqu se podra lanzar una nueva conversin porque ya se ha alcanzado el valor de la tensin a convertir

Inicio de conversin

GO/DONE 1CONDICIN a cumplir:

V condensador t t. conversin t. adquisicin

T muestreo > T conversin + T adquisicin

Microcontroladores PIC

ATE-Universidad de Oviedo

16

Mdulo de Conversin A/D

Ejemplo: Configuracin para conversin de la tensin analgica presente en el canal 3 (RA3/AN3)

Registro ADCON1 (9Fh)ADFM 1 PCFG3 0 PCFG2 0 PCFG1 1 PCFG0 0

bit 7 bit 3-0

ADFM: Seleccin de formato del resultado1 = Ajuste a la derechaPCFG3: AN7 PCFG0 RE2 0000 0001 0010 0011 0100 0101 011x 1000 1001 1010 1011 1100 1101 1110 1111 A A D D D D D A D D D D D D D AN6 RE1 A A D D D D D A D D D D D D D AN5 RE0 A A D D D D D A A A A D D D D AN4 RA5 A A A A D D D A A A A A D D D

0 = Ajuste a la izquierdaAN3 RA3 A VREF+ A VREF+ A VREF+ D VREF+ A VREF+ VREF+ VREF+ VREF+ D VREF+ AN2 RA2 A A A A D D D AN1 RA1 A A A A A A D A A A A A A D D AN0 RA0 A A A A A A D A A A A A A A A

PCFG3:PCFG0: Configuracin de las entradas al mdulo A/D

VREFA A VREFVREFVREFD VREF-

Microcontroladores PIC

ATE-Universidad de Oviedo

17

Mdulo de Conversin A/D

Registro ADCON0 (1Fh) y reloj TAD a partir de la red RC interna ADCS1 1 ADCS0 1 CHS2 0 CHS1 1 CHS0 1 GO/DONE 0 ADON 1

bit 7-6

ADCS1:ADCS0: Seleccin del reloj para la conversin A/D00 = fOSC / 2 01 = fOSC / 8 10 = fOSC / 32 11 = fRC

bit 5-3

CHS2:CHS0: Seleccin del canal de conversin000 = Canal 0 100 = Canal 4 001 = Canal 1 101 = Canal 5 010 = Canal 2 110 = Canal 6 011 = Canal 3 111 = Canal 7

bit 2

GO/DONE: Estado de la conversinSi ADON=1: 1 = Conversin en progreso 0 = Conversin finalizada

bit 0

ADON: Bit de encendido del convertidor A/D1 = Mdulo A/D encendido 0 = Mdulo A/D apagado 18

Microcontroladores PIC

ATE-Universidad de Oviedo

Mdulo de Conversin A/D

Mdulo A/D cuando el micro entra en modo dormido (SLEEP)* El mdulo A/D puede funcionar durante el modo dormido si se selecciona como reloj para la conversin el RC interno (ADCS1:ADCS0 = 11). * Si se elige como reloj el RC, el mdulo A/D espera 1 ciclo de instruccin antes de iniciar la conversin. Esto permitira la ejecucin de la instruccin SLEEP que se coloque a continuacin, esto eliminara todo posible ruido de conmutacin (debido al paso de normal a dormido) durante la conversin. * Cuando se haya completado la conversin, el bit GO/DONE se pondr a 0 y el resultado se cargar en los registros ADRESH y ADRESL. Si la interrupcin del conversor A/D est habilitada (ADIE y PEIE a 1) el dispositivo se despertar. Si no estuviera habilitada, el mdulo A/D se apagar aunque el bit ADON siga a 1. * Si la fuente de reloj para la conversin no es la RC interna, una instruccin SLEEP provocar que la conversin que se est ejecutando se aborte y que el mdulo A/D se apague aunque el bit ADON siga a 1.Microcontroladores PIC ATE-Universidad de Oviedo

19

Mdulo de Conversin A/D

Efectos de un RESET sobre el mdulo A/DUn RESET del dispositivo provoca que los registros del mdulo A/D se inicialicen a los valores indicados en la tabla. Por tanto, un RESET provoca que el mdulo A/D se apague y que cualquier conversin que se estuviera realizando cuando se produce el RESET se aborte. Todos los pines asociados al mdulo A/D pasan a ser entradas analgicas. Los valores acumulados en ADRESH:ADRESL no se modifican por un Power-On-Reset. El valor que contendrn los registros ADRESH:ADRESL tras un POR sern desconocidos inicialmente.

Microcontroladores PIC

ATE-Universidad de Oviedo

20

Mdulo de Conversin A/D

Ejemplo sencillo de uso del modulo A/D (1 solo canal e interrupciones); ; ; ; ; ; ; ; ; ; ; ; ; ; Este es un programa ejemplo de uso del conversor A/D en un PIC16F877, donde se usa un solo canal (CH0) y se usan interrupciones El conversor A/D se configura como sigue: Vref = +5V interna. A/D Osc. = RC interna Canal A/D = CH0 Se puede usar como Hardware para probar este ejemplo la tarjeta PICDEM 2. El programa convierte el valor del potenciometro conectado a RA0 en 10 bits, de los que los 8 bits ms significativos se muestran en los leds conectados al PORTB. include equ 20h ORG goto ; Variable de almacenamiento temporal 0x00 start ; Vector de Reset ; Rutina de interrupcin A/D: ; muestra valor en los leds del PORTB service_int btfss PIR1,ADIF retfie movf ADRESH,W movwf PORTB bcf PIR1,ADIF call SetupDelay call SetupDelay bsf ADCON0,GO retfie ; Interrupcion del modulo A/D? ; Si no retornamos ; Cojo los 8 bits altos de la conversin ; los muestro en los LEDS del PORTB ; Reseteo el flag ; Delay de adquisicin ; mayor de 20 us ; lanzo una nueva conversin ; retorno, habilito GIE

; TEMP ; ; ; ; ; start

org 0x04 ; Vector de interrupcin goto service_int org 0x10 movlw 0FFh movwf PORTB bsf STATUS,RP0 movwf TRISA clrf TRISB bcf STATUS,RP0 call InitializeAD call SetupDelay bsf ADCON0,GO goto loop

; PORTB = 11111111b ; Banco 1 ; PORTA son entradas ; PORTB son salida ; Banco 0 ; Delay para Tad ; Inicia conversin A/D

; InitializeAD, inicializa el modulo A/D. ; Selecciona CH0 a CH3 como entradas analgicas, reloj RC y lee el CH0. ; InitializeAD bsf STATUS,RP0 ; Banco 1 movlw B'00000100' ; RA0,RA1,RA3 entradas analogicas movwf ADCON1 ; Justificado a la izquierda ; 8 bits mas significativos en ADRESH bsf PIE1,ADIE ; Habilitamos interrupciones A/D bcf STATUS,RP0 ; Banco 0 movlw b11000001 ; Oscilador RC, Entrada analgica CH0 movwf ADCON0 ; Modulo A/D en funcionamiento bcf PIR1,ADIF ; Limpio flag interrupcin bsf INTCON,PEIE ; Habilito interrupciones de perifericos bsf INTCON,GIE ; Habilito interrupciones globales return ; Esta rutina es un retardo software de ms de 10us si ; se usa un oscilador de 4MHz que se usa para asegurar ; un tiempo de adquisicin de ms de 20 us mediante una doble llamada ; antes de lanzar una nueva conversin. SetupDelay SD movlw 3 movwf TEMP decfsz TEMP, F goto SD return END ; Carga Temp con 3 ; Bucle de retardo

loop ;

Microcontroladores PIC

ATE-Universidad de Oviedo

21

Mdulo de Conversin A/D

Ejemplo de uso del mdulo A/D (conversin de 8 canales secuencialmente) (1);************************************************************************** ; ; Programa de ejemplo de manejo del conversor A/D ; para realizacin de conversiones secuenciales de los 8 canales ; analgicos disponibles en un PIC16F877 y almacenamiento de los ; resultados de la conversin en una pila circular de 16 posiciones ; (dos para cada canal) ; Se supone una Fosc de 8 MHz ; ; Autor: Francisco Fernandez Linera ; ;************************************************************************** list p=PIC16F877 include "p16f877.inc" TEMP ADTABLE EQU EQU ORG goto bsf movlw movwf 0x20 0x30 0x00 START STATUS,RP0 ; Pasamos al Banco 1 b'10000000' ; Definimos todos los pines como analgicos ADCON1 ; referencia de 5V ; y resultado ajustado a la derecha ; 8 bits menos significativos en ADRESL ; 2 bits ms significativos en ADRESH STATUS,RP0 ; Volvemos al Banco 0 b'10000001' ; Oscilador: Tad=32*Tosc=4us, A/D encendido ADCON0 ; y seleccion inicial en RA (canal CH0) ;Definimos MCU a utilizar ;Incluimos fichero de etiquetas ; posicin auxiliar temporal ; posicion inicial de la pila para guardar resultados de lasconversiones

; START

bcf movlw movwf

Microcontroladores PIC

ATE-Universidad de Oviedo

22

Mdulo de Conversin A/D

Ejemplo de uso del modulo A/D (conversin de 8 canales secuencialmente) (2)movlw movwf new_ad call bsf LOOP btfsc goto ADTABLE FSR delay_adq ADCON0,GO ADCON0,GO_DONE LOOP ; colocamos el puntero del dir. indirecto (FSR) ; apuntando a la primera posicion de la tabla ; espero el tiempo de adquisicion ; lanzo una conversin ; espero a que finalice la conversin

bsf STATUS,RP0 ; guardo el resultado de la conversin en la pila movf ADRESL,W ; primero los 8 bits menos significativos movwf INDF ; que estn en ADRESL (en el banco 1) incf FSR ; Se incrementa el puntero de direcciones RAM bcf STATUS,RP0 ; Volvemos al banco 0 movf ADRESH,W ; para recoger ahora los 2 bits ms significativos movwf INDF ; los guardamos en la siguiente posicin apuntada por FSR incf FSR ; incrementamos de nuevo FSR movlw 0x08 ; Incrementamos el nmero de canal a convertir addwf ADCON0 ; para lo cual sumamos 1 al bit 3 de ADCON0 btfss ADCON0,6 ; miro si ya he convertido los 8 canales, el bit 6 sera 1 goto new_ad ; si no convierto otro, nueva conversin bcf ADCON0,6 ; en caso contrario, vuelvo a poner Tad=32*Tosc (b6=0) movlw ADTABLE ; de nuevo el puntero del dir. indirecto movwf FSR ; apuntando a la primera posicion de la tabla goto new_ad ; y vuelvo a convertir, empezando por el canal 0 ;*********************************** Temporizacin del tiempo de adquisicin ************************************* delay_adq movlw 8 ; bucle del tiempo de adquisicin movwf TEMP ; 18,5 useg incluyendo call y return adq nop ; 1 ciclo decfsz TEMP,F ; decremento y comparacin con cero goto adq ; si no hemos llegado a cero, repetimos return ; si ya llegamos a cero, retornamos

Microcontroladores PIC

ATE-Universidad de Oviedo

23