You are on page 1of 10

Mdulo de Conversin A/D

Microcontroladores PIC

ATE-Universidad de Oviedo

Mdulo de Conversin A/D

Caractersticas generales en el PIC16F877


Ocho canales de conversin.
Cinco pines de PORTA y los tres de PORTE.

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

Tensin de referencia seleccionable por software.

Puede ser VDD o la tensin aplicada en los pines RA2 y/o RA3.

Posibilidad de seguir funcionando cuando el PIC est en modo SLEEP. Hay 11 registros asociados a este perifrico.
Definicin de pines de entrada Manejo de interrupciones
INTCON PIE1 PIR1 ADCON0 ADCON1 ADRESH - ADRESL
ATE-Universidad de Oviedo

TRISA PORTA TRISE - PORTE

Control del conversor A/D

Microcontroladores PIC

Mdulo de Conversin A/D

Estructura interna
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

Convertidor A/D
VAIN (Input Voltage)

PCFG3:PCFG0 VDD VREF+

PCFG3:PCFG0

VSS Microcontroladores PIC ATE-Universidad de Oviedo

VREF-

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 4

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 5

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


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

vase carga del registro ADCON0 en PIC16F87xA

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

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. 8

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

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

10

Mdulo de Conversin A/D

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

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

Mientras no se complete la conversin, no empieza otra adquisicin.


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

11

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

12

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

A partir de aqu es posible una nueva conversin

Interruptor cerrado

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 13

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 A partir de aqu se podra lanzar una nueva conversin porque ya se ha alcanzado el valor de la tensin 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

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

14

Mdulo de Conversin A/D

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

Funcin de transferencia

400h 3FFh

3FEh 3FDh 3FCh

004h 003h 002h 001h 000h


(VREF-) (VREF+)

1 LSb 2 LSb

1022 LSb

1023 LSb

1024 LSb

3 LSb

4 LSb

1021 LSb

Microcontroladores PIC

ATE-Universidad de Oviedo

15

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

16

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 17

Microcontroladores PIC

ATE-Universidad de Oviedo

Mdulo de Conversin A/D

Mdulo A/D durante el modo 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). Cuando se escoga como reloj el RC, el mdulo A/D espera 1 ciclo de instruccin antes de iniciar la conversin. Esto permite que se ejecute la instruccin SLEEP, lo cual elimina todo posible ruido de conmutacin (debido al paso de normal a dormido) en la conversin. Cuando se haya completado la conversin, el bit GO/DONE se pone a 0 y el resultado se carga en los registros ADRES. 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 este ejecutando se aborte y que el mdulo A/D se apague aunque el bit ADON siga a 1.
Microcontroladores PIC ATE-Universidad de Oviedo

18

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

19

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 II. 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 0C1h ; 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 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

20

10

You might also like