Está en la página 1de 12

Mdulo de Conversin A/D

Microcontroladores PIC

ATE-Universidad de Oviedo

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 interrupciones
TRISA PORTA TRISE - PORTE INTCON PIE1 PIR1 ADCON0 ADCON1 ADRESH - ADRESL
ATE-Universidad de Oviedo

Control del conversor A/D


Microcontroladores PIC

Mdulo de Conversin A/D

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

CHS2:CHS0

Seleccin del canal analgico


VAIN (Input Voltage)

Mdulo A/D
SS RSS Circuito de Muestreo y Retencin CHOLD

VDD

Configuracin entradas PCFG3:PCFG0


VREF+

PCFG3:PCFG0 VREFVSS Microcontroladores PIC ATE-Universidad de Oviedo

GO /DONE

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

ADRESH

A/D

ADRESL

Mdulo de Conversin A/D

Funcin de transferencia conversor A/D


Caso de que V REF+ = VDD y que V REF- = VSS
11 bits

400h 3FFh 3FEh 3FDh 3FCh

004h 003h 002h 001h 2 LSb 4 LSb 1021 LSb 1022 LSb
0V

1 LSB = VDD/1024

1023 LSb 1024 LSb

3 LSb

1 LSb

000h

VDD

Ve

Microcontroladores PIC

ATE-Universidad de Oviedo

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/D


00 = fOSC / 2 01 = fOSC / 8 10 = fOSC / 32 11 = fRC

bit 5-3

CHS2:CHS0: Seleccin del canal de conversin


000 = 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 conversin


Si ADON=1: 1 = Conversin en progreso 0 = Conversin finalizada

bit 0

ADON: Bit de encendido del convertidor A/D


1 = 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 ADCON1
00 = 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 conversin


000 = 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 conversin


Si ADON=1: 1 = Conversin en progreso 0 = Conversin finalizada

bit 0

ADON: Bit de encendido del convertidor A/D


1 = 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 resultado


1 = Ajuste a la derecha 0 = Ajuste a la izquierda

bit 3-0

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


PCFG3: 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

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/D
PCFG3: 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

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/D


1 = 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/D


1. 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<10K.

Hasta que no acabe la conversin, no empieza otra adquisicin (SS abierto)


Esperar TACQ : a) tras una conversin; b) tras seleccionar un nuevo canal; c) tras encender el mdulo A/D.
ATE-Universidad de Oviedo

Microcontroladores PIC

13

Mdulo de Conversin A/D

Tiempo de conversin
La conversin de 10 bits dura 12TAD.
Tciclo TAD TAD TAD b9 TAD b8 TAD b7 TAD b6 TAD b5 TAD b4 TAD b3 TAD b2 TAD b1 TAD b0

Comienza la conversin Se abre SS (tp. 100ns) GO/DONE 1

Se carga ADRES Se pone GO/DONE a 0 Se levanta el flag ADIF CHOLD conectado a entrada analgica

TAD configurable en ADCON0 (reloj de la conversin).

TAD=2TOSC - TAD=8TOSC - TAD=32TOSC - TAD=2s6s (tp. 4s) Tambin TAD=4TOSC - TAD=16TOSC - TAD=64TOSC en PIC16F87xA

Para un funcionamiento correcto se necesita un valor mnimo de TAD=1,6s.


Microcontroladores PIC ATE-Universidad de Oviedo

14

Mdulo de Conversin A/D

Tiempo de conversin y Tiempo de adquisicin


Fijo: 12 TAD
El interruptor de muestreo se abre al cabo de 100ns de GO=1 Fin de conversin

caso de los PIC16F87x y en versiones antiguas

2 TAD

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

T. de conversin

T. de adquisicin

GO/DONE 0
Interruptor abierto Inicio de conversin Interruptor cerrado

A partir de aqu es posible una nueva conversin

GO/DONE 1 SS RSS CHOLD VSS


CONDICIN a cumplir: Int. abierto Int. cerrado t

SS RSS

CHOLD VSS

T muestreo > 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 adquisicin


Fijo: 12 TAD
El interruptor de muestreo se abre al cabo de 100ns de GO=1

caso de los PIC16F87xA

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

T. de conversin

T. de adquisicin

SS

RSS CHOLD VSS


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

SS

RSS CHOLD VSS


V 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 1
CONDICIN 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 resultado


1 = Ajuste a la derecha
PCFG3: 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 izquierda
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

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/D


00 = fOSC / 2 01 = fOSC / 8 10 = fOSC / 32 11 = fRC

bit 5-3

CHS2:CHS0: Seleccin del canal de conversin


000 = 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 conversin


Si ADON=1: 1 = Conversin en progreso 0 = Conversin finalizada

bit 0

ADON: Bit de encendido del convertidor A/D


1 = 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/D


Un 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 <P16F877.INC> 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<0> (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

También podría gustarte