0% encontró este documento útil (0 votos)
2 vistas35 páginas

Módulo A/D en Microcontroladores PIC

El documento aborda el módulo conversor A/D en sistemas digitales, enfocándose en la conversión de señales analógicas a digitales y sus características. Se detalla el funcionamiento del convertidor A/D de aproximaciones sucesivas y su implementación en el microcontrolador PIC 16F877A, incluyendo aspectos como la programación, registros de control y tiempos de digitalización. Además, se discuten los procesos de muestreo, retención, cuantificación y codificación necesarios para la conversión A/D.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
2 vistas35 páginas

Módulo A/D en Microcontroladores PIC

El documento aborda el módulo conversor A/D en sistemas digitales, enfocándose en la conversión de señales analógicas a digitales y sus características. Se detalla el funcionamiento del convertidor A/D de aproximaciones sucesivas y su implementación en el microcontrolador PIC 16F877A, incluyendo aspectos como la programación, registros de control y tiempos de digitalización. Además, se discuten los procesos de muestreo, retención, cuantificación y codificación necesarios para la conversión A/D.
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

SISTEMAS DIGITALES II

TEMA 9
MÓDULO CONVERSOR A/D

9.1.- INTRODUCCIÓN
9.2.- CONVERSIÓN ANALÓGICA/DIGITAL
9.2.1.- CONVERTIDOR A/D DE APROXIMACIONES SUCESIVAS
9.2.2.- CARACTERÍSTICAS DE LOS CONVERTIDORES A/D
9.3.- EL MÓDULO DE CONVERSIÓN A/D DE 10 BITS EN LOS MICROCONTROLADORES PIC 16F877A
9.3.1.- CARACTERÍSTICAS GENERALES EN EL PIC16F877A
9.3.2.- FUNCIÓN DE TRANSFERENCIA DEL CONVERTIDOR A/D
9.3.3.- REGISTROS DE CONTROL DEL MÓDULO A/D: ADCON0 y ADCON1
9.3.4.- TIEMPOS RELACIONADOS CON LA DIGITALIZACIÓN DE UNA SEÑAL ANALÓGICA EN
EL MÓDULO DE CONVERSIÓN A/D
9.3.5.- PROGRAMACIÓN DEL MÓDULO DE CONVERSIÓN A/D
9.3.6.- EFECTOS DE UN RESET SOBRE EL MÓDULO A/D
9.3.7.- REGISTROS RELACIONADOS CON LAS INTERRUPCIONES DE A/D
9.3.8.- MÓDULO A/D CUANDO EL MICRO ENTRA EN MODO DORMIDO (SLEEP)
9.3.9.- EJEMPLOS
Módulo Conversor A/D SDII-2

9.1.- INTRODUCCIÓN
• La información en el mundo real (presión, temperatura, etc) se representa mediante señales
analógicas.
• Las señales analógicas varían de forma continua a lo largo del tiempo. Pueden tomar infinitos
valores.
• Los sistemas digitales utilizan señales digitales (2 valores).
• Los sistemas encargados de realizar la conversión entre el mundo analógico y el digital son:
Convertidores A/D
Convertidores D/A.

PARÁMETRO PARÁMETRO
TRANSDUCTOR FÍSICO SISTEMA FÍSICO FÍSICO TRANSDUCTOR
(VENTILADOR) (HORNO) (TERMOPAR)
TEMPERATURA TEMPERATURA

SEÑAL SEÑAL
ANALÓGICA ANALÓGICA

CONVERSIÓN SISTEMA DIGITAL CONVERSIÓN


D/A (ORDENADOR) A/D
SEÑAL SEÑAL
DIGITAL DIGITAL
Módulo Conversor A/D SDII-3

9.2.-CONVERSIÓN ANALÓGICA/DIGITAL CIRCUITO S/H (Sample and Hold)

Interruptor Señal de
• Requiere 4 procesos Señal
analógica
electrónico muestras
retenidas
Buffer Buffer
VA VM
C
1.- Muestreo: Obtener valores ("muestras") de la señal analógica
en determinados instantes de tiempo.
S Señal de muestreo

2.- Retención: Mantener los valores el tiempo necesario para la VA +


+
conversión. - C VM
-
VA S

Señal
analógica
t
Cuanto mayor sea la frecuencia de muestreo (fs = 1/Ts),
mayor será el número de muestras obtenidas, y más
información se obtendrá de la señal analógica de
entrada.
S
Señal de
muestreo El período de muestreo (Ts) determinado por el tiempo de
t conversión del convertidor A/D.
TS

VM
Teorema de muestreo:
Señal de La frecuencia de muestreo viene dada por el criterio de
muestras Nyquist, según el cual dicha frecuencia debe ser mayor
retenidas
t que el doble del ancho de banda de la señal de entrada. Es
decir una señal de frecuencia fm se puede reconstruir a
partir de muestras tomadas a una frecuencia fs  2fm
Módulo Conversor A/D SDII-4

3.- Cuantificación: Conversión de señal (muestra) continua en amplitud (infinitos valores) en


señal discreta (nº finito de valores).
Asignar el mismo valor a todas las muestras del mismo intervalo (Q intervalo de cuantificación).
La función de transferencia ideal de un cuantificador es una escalera. Es la mejor aproximación
a la función de transferencia rectilínea ideal.
- En todo proceso de cuantificación se comete un error (error de cuantificación). Se está
asignando un único valor a todas las muestras de un intervalo.
- En la función de transferencia en escalera, el error tiene forma de diente de sierra y como máximo
vale Q/2.
- Para que el error sea pequeño, hay que hacer pequeño el intervalo de cuantificación, es decir,
aumentar el número de intervalos de cuantificación y de valores de salida.
- El intervalo de cuantificación (Q) no tiene porque ser constante.

4.- Codificación: Asignación de una combinación binaria a cada uno de los valores de salida
del cuantificador.
Con n bits se podrán codificar m valores de salida si se cumple la relación m  2n

Señal de Señal Señal


muestras discreta digital
CUANTIFICADOR CODIFICADOR
V2 V3 V4
Módulo Conversor A/D SDII-5

Salida V3 Q Salida V3
discreta 3 discreta 3
2 2
1 1
-3.5 -2.5 -1.5 -0.5 t4 t5 t6 t
0.5 1.5 2.5 3.5 V2 t1 t2 t3
-1 Entrada -1
analógica
-2 -2
-3 -3

V2
t1 Entrada
t2 analógica Ejemplo:
t3
SALIDA
t4 INTERVALO CODIFICACIÓN
CUANTIFICADOR

t5 [-2.5, -1.5] -2 110


t6
[-1.5, -0.5] -1 111
t
V3-V2 Error de cuantificación
[-0.5, 0.5] 0 000
Q/2
-Q/2
Módulo Conversor A/D SDII-6

9.2.1. CONVERTIDOR A/D DE APROXIMACIONES SUCESIVAS

Entrada RELOJ
analógica VA El método de conversión que utiliza es
S/H + REGISTRO DE análogo al que se emplea en las
COMP APROXIMACIONES balanzas para calcular el peso de un
VD/A VC SUCESIVAS
- objeto, y que consiste en ir añadiendo
o quitando pesas hasta equilibrar la
COMPARADOR
balanza. Se trata de llegar al valor final
mediante aproximaciones sucesivas.
Convertidor Salida
D/A digital

VD/A
1 111
1 111 RAS FS 8
0 110
110 111 7/8 FS 7
1 101 110 6/8 FS 6
VC=1 0
101
101 5/8 FS 5
0 100
100 100 4/8 FS 4 VA
1 011
011 3/8 FS 3
1 011
VC=0 010 010 2/8 FS 2
0
010
1 001 1/8 FS 1
001 Impulsos
0
001 000 0
de reloj
0 000 0 1 2 3
Módulo Conversor A/D SDII-7

El convertidor A/D integrado en los microcontroladores, y la mayor parte de los convertidores


A/D periféricos, están basados en el algoritmo de aproximaciones sucesivas:

Se comienza la conversión inicializando el registro de aproximaciones sucesivas con la combinación


(10...0), es decir, poniendo a "1" el bit más significativo (MSB) y el resto a "0". De esta manera, a la
salida del convertidor D/A se obtiene un valor de tensión (VDA) que es equivalente a la mitad del
rango (1/2 FS). Esa tensión (VD/A) se compara con la tensión analógica de entrada (VA), pudiendo
ocurrir dos casos:

a) Si VA > VD/A se investiga la parte superior del rango. La salida del comparador se pone a 1
(VC=1). El 1º MSB (bit más significativo) del RAS no se modifica. El 2º MSB pasa a 1. El
resto de los bits quedan en 0. El RAS almacena (110...0).
b) Si VA < VD/A se investiga la parte inferior del rango. La salida del comparador se pone a 0
(VC=0). El 1º MSB del RAS se pone a 0. El 2º MSB pasa a 1. El resto de los bits quedan en 0.
El RAS almacena (010...0).

Tanto en un caso como en el otro, se efectúa una nueva conversión D/A y se aplica el mismo criterio
para el 2º MSB y 3º MSB del RAS. El proceso se repite hasta alcanzar el LSB (bit menos
significativo). Si el registro tiene n bits, el proceso se realiza n veces.

El tiempo de conversión es fijo e independiente del valor de VA. Para cada conversión se
necesita un número fijo de impulsos de reloj, que coincide con el número de bits del registro.
Módulo Conversor A/D SDII-8

9.2.2.- CARACTERÍSTICAS DE LOS CONVERTIDORES A/D

Algunas características de los convertidores A/D son:

Resolución
Mínimo incremento necesario en la entrada analógica para producir un cambio en la combinación
binaria de salida.
Se suele expresar con el número de bits de salida del convertidor.

Tiempo de adquisición
Tiempo necesario para cargar el condensador de mantenimiento (CHOLD).

Tiempo de conversión
Tiempo necesario para obtener la salida digital equivalente a la entrada analógica.
Orden de (ns) para los convertidores de gran velocidad como los flash.
Orden de (μs) para los de mediana velocidad como los de aproximaciones sucesivas
Orden de (ms) para los de velocidad baja como los de rampa doble.
Depende muchas veces de la tensión analógica de entrada.
Módulo Conversor A/D SDII-9

EL MICROCONTROLADOR PIC16F877A – CONVERTIDOR A/D


BDIR-INST Bus de datos
13 BDAT RA0/AN0
Memoria de Contador 8 RA1/AN1
Programa Programa PORTA RA2/AN2/VREF-/CVREF
FLASH (PC) RA3/AN3/VREF+
7 0
RA4/T0CKI/C1OUT
13 0 Memoria RA5/AN4/SS#/C2OUT
de datos
(Archivo de
Pila (STACK) RB0/INT
14 Bus de programa Registros)
de 8 niveles RB1
BINST RAM RB2
(13 bits)
PORTB RB3/PGM
9 BDIR-DAT RB4
Registro de RB5
Instrucciones Mux. Direc. RB6/PGC
RB7/PGD
7 Direc.
8 indirecto
Direccionamiento RC0/T1OSO/T1CKI
directo Reg. FSR RC1/T1OSI/CCP2
RC2/CCP1
PORTC RC3/SCK/SCL
Dato inmediato Reg. STATUS RC4/SDI/SDA
8 RC5/SDO
RC6/TX/CK
RC7/RX/DT
Timer de encendido 3
(PWRT) Mux
Decodificación Timer de arranque RD0/PSP0
de instrucciones RD1/PSP1
del Oscilador (OST) RD2/PSP2
y control Reset de encendido RD3/PSP3
PORTD RD4/PSP4
(POR) ALU
Timer del watchdog 8 RD5/PDP5
Generación de RD6/PDP6
RD7/PDP7
tiempo BroWn-out Reset
Reg. W
Depurador In-circuit RE0/AN5/RD#
PORTE RE1/AN6/WR#
RE2/AN7/CS#
Programación en Puerto
OSC1/CLKIN esclavo
Bajo voltaje
OSC27CLKOUT paralelo
Interrupciones INT
MCLR# VDD, VSS (Externa)
(Internas)

Convertidor
Timer0 Timer1 Timer2 A/D Comparador La configuración del
de 10 bits
convertidor A/D se realiza
mediante la carga de ciertos
Memoria de
Módulos
SSP Referencia registros presentes en RAM
Datos Puerto serie USART de
CCP1,2
EEPROM síncrono voltaje
Módulo Conversor A/D SDII-10

9.3.- EL MÓDULO DE CONVERSIÓN A/D DE 10 BITS EN LOS


MICROCONTROLADORES PIC 16F877A

Multiplexor ADCON1 ADCON0 Registros de control


analógico 8 a 1
000
AN0/RA0
001
GO DONE#
AN1/RA1 Circuito de muestreo

CONVERTIDOR A/D (CAD)


AN2/VREF-/RA2
010 y retención (S&H)

Registros con el resultado de la


011 SS
AN3/VREF+/RA3 Va RSS
Vam

ADRESL
100

(8 bits)
(tensión (tensión
AN4/RA5 analógica) analógica
CHOLD
101 muestreada)

conversión A/D
AN5/RE0
110
AN6/RE1

10 bits
111
AN7/RE2
OSC Reloj
DIVISOR

ADRESH
CHS2:CHS0

(8 bits)
TRIS A VDD
(Selección canal)
ADCS2:ADCS0
VREF+
PORTA
TRIS E PCFG3:PCFG0 (Configuración entradas)
PORTE VREF-

VSS
Módulo Conversor A/D SDII-11

9.3.1.- CARACTERÍSTICAS GENERALES EN EL PIC16F877A

Ocho canales de conversión.


Cinco pines de PORTA y los tres de PORTE.

Convierte la señal analógica en un número 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 periférico.


Definición de pines de entrada y señales aplicadas
TRISA – PORTA – TRISE - PORTE
Manejo de interrupciones
INTCON – PIE1 – PIR1
Control del conversor A/D
ADCON0 – ADCON1 – ADRESH - ADRESL
Módulo Conversor A/D SDII-12

• Los componentes principales de este módulo son:


- Multiplexor analógico de hasta 8 canales de entrada.
- Amplificador de muestreo y retención (sin seguidor de entrada ni salida).
- Convertidor A/D de aproximaciones sucesivas, de 10 bits.
- Registros para controlar el módulo (ADCON0 y ADCON1) y
- Registros para almacenar el resultado de la conversión A/D (ADRESH y ADRESL).

• Este módulo puede tener hasta ocho entradas analógicas, que están disponibles como
funciones alternativas de los terminales de los puertos paralelos. El número de entradas
analógicas o canales de entrada depende del PIC en particular. Por ejemplo, el PIC16F873 tiene 5
entradas analógicas, disponibles en igual número de terminales del puerto paralelo A (RA0/AN0,
RA1/AN1, RA2/AN2/VREF-, RA3/AN3/VREF+ y RA5/AN4). En los PIC que tienen más de cinco
entradas analógicas, PIC16F877, PIC16F877A, que tiene ocho, se utilizan también tres terminales
del puerto E para las entradas analógicas AN5, AN6 y AN7.
La selección del canal se realiza mediante los bits CHS2:CHS0 del registro ADCON0 (que
son las entradas de selección del multiplexor analógico).

• El amplificador de muestreo y retención está compuesto básicamente por un condensador


(sin amplificadores de entrada ni de salida), que empieza a cargarse en cuanto se
selecciona en el multiplexor el canal deseado. La tensión en el condensador sigue la evolución
de la tensión de entrada, y cuando se da una orden el condensador se desconecta de la entrada
analógica y empieza la conversión.
Módulo Conversor A/D SDII-13

• La tensión de referencia para la conversión A/D puede ser la tensión de alimentación del
microcontrolador (VDD y VSS) o una tensión externa que se aplique entre los terminales
AN3/VREF+ y AN2/VREF-.
La selección se hace por software, con los bits PCFG3:PCFG0 del registro ADCON1. En la opción
por defecto (es decir, la que se tiene después de una acción de reset), la tensión de referencia se
toma de la alimentación del microcontrolador.

• Las conversiones A/D se realizan en sincronismo con una señal de reloj. Este reloj se
obtiene o bien del oscilador principal del microcontrolador mediante un divisor programable, o bien
de un oscilador RC interno de frecuencia fija.
En el caso de los PIC16F87xA, con el bit ADCS2 del registro ADCON1 y los bits ADCS1 y
ADCS0 del registro ADCON0 se selecciona la fuente del reloj y se programa el divisor de
frecuencia si la fuente es el oscilador principal del microcontrolador.
Para que el CAD funcione mientras el microcontrolador está en el modo de bajo consumo (sleep),
hay que seleccionar el oscilador RC interno.

• Para iniciar una conversión A/D hay que activar el bit de control GO. Cuando ha terminado
la conversión, se activa el bit de estado DONE#. En realidad, GO y DONE# están realizados en
un mismo bit: el bit GO/DONE# del registro ADCON0. El programador debe poner a 1 este bit para
iniciar una conversión A/D y cuando este bit toma el valor 0, el resultado de la conversión está
disponible en ADRESH y ADRESL. Cuando finaliza una conversión A/D, se activa también el
bit ADIF del registro PIR1 para solicitar interrupción. Si el bit ADIE del registro PIE1 está
activo y el sistema de interrupción del microcontrolador está habilitado (el bit GIE del
registro INTON es 1), la solicitud de interrupción se hace efectiva.
Módulo Conversor A/D SDII-14

• El resultado de una conversión A/D (10 bits) se deposita para ser leído en los registros
ADRESH y ADRESL, en un formato que se especifica con el bit ADFM del registro ADCON1.
- Si ADFM = 0  resultado justificado a la izquierda  en ADRESH quedan los 8 bits más
significativos de la conversión.
Este caso es el apropiado para hacer operar al CAD como un convertidor de 8 bits con el
resultado de la conversión en el registro ADRESH.
- Si ADFM = 1  resultado justificado a la derecha  en ADRESL quedan los 8 bits menos
significativos de la conversión.

ADFM = 0 ADFM = 1
Resultado 10 bits

7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0

0 0 0 0 0 0 0 0 0 0 0 0

ADRESH ADRESL ADRESH ADRESL

Resultado 10 bits Resultado 10 bits


Módulo Conversor A/D SDII-15

9.3.2.- FUNCIÓN DE TRANSFERENCIA DEL CONVERTIDOR A/D


Caso general: VREF+ y VREF-
La primera transición tiene lugar cuando la tensión analógica
de entrada alcanza el valor VREF+ - VREF-
+ VREF-  1LSb VREF+ - VREF-
1024 LSb =
1024
Salida digital (10 bits)
(11 bits) 10000000000b = 400h
1111111111b = 3FFh
1111111110b = 3FEh

1111111101b = 3FDh
1111111100b = 3FCh
El valor a
fondo de
escala no se
0000000100b = 004h alcanza
0000000011b = 003h
0000000010b = 002h
0000000001b = 001h
VREF- VREF+
0000000000b = 000h
Tensión

1024 LSb
1021 LSb
1022 LSb
1023 LSb
1 LSb

2 LSb
3 LSb
4 LSb

entrada
analógica
Módulo Conversor A/D SDII-16

9.3.3.- REGISTROS DE CONTROL DEL MÓDULO A/D


a) REGISTRO ADCON0
REGISTRO ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE# - ADON
(dirección 1Fh)
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

bit 7-6 ADCS1:ADCS0: Selección del reloj para bit 5-3 CHS2:CHS0:
la conversión A/D junto con ADCS2 que está Selección del canal de conversión
en ADCON1 000 = Canal 0 100 = Canal 4
001 = Canal 1 101 = Canal 5
Frecuencia del reloj del 010 = Canal 2 110 = Canal 6
Fuente convertidor A/D
ADCS1:ADCS0
de reloj 011 = Canal 3 111 = Canal 7
ADCS2 = 0 ADCS2 = 1
Oscilador
00 Fosc/2 Fosc/4 bit 2 GO/DONE#:
principal
Oscilador Estado de la conversión
01 Fosc/8 Fosc/16 Si ADON=1:
principal
Oscilador 1 = Conversión en progreso
10 Fosc/32 Fosc/64
principal 0 = Conversión finalizada
Oscilador 167 KHz 167 KHz
11 RC a a
interno 500 KHz bit 0 ADON:
500 KHz
Bit de encendido del convertidor A/D
1 = Módulo A/D encendido
0 = Módulo A/D apagado
Módulo Conversor A/D SDII-17

b) REGISTRO ADCON1

REGISTRO ADCON1 ADFM ADCS2 - - PCFG3 PCFG2 PCFG1 PCFG0


(dirección 9Fh)
bit 7 bit 6 bit 5 bit 4 bit3 bit 2 bit 1 bit 0

bit 7 ADFM: Selección de formato del bit 3-0 PCFG3:PCFG0: Configuración de las
resultado entradas al módulo A/D
1 = Ajuste a la derecha PCFG3
0 = Ajuste a la izquierda AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0
: VREF+ VREF-
RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0
PCFG0
ADFM = 0 ADFM = 1 0000 A A A A A A A A VDD VSS
Resultado 10 bits 0001 A A A A VREF+ A A A RA3 VSS
0010 D D D A A A A A VDD VSS
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 0011 D D D A VREF+ A A A RA3 VSS
0 0 0 0 0 0 0 0 0 0 0 0 0100 D D D D A D A A VDD VSS
0101 D D D D VREF+ D A A RA3 VSS
ADRESH ADRESL ADRESH ADRESL
011x D D D D D D D D - -
1000 A A A A VREF+ VREF- A A RA3 RA2
Resultado 10 bits Resultado 10 bits
1001 D D A A A A A A VDD VSS
1010 D D A A VREF+ A A A RA3 VSS
1011 D D A A VREF+ VREF- A A RA3 RA2
bit 6 ADCS2: Selección de reloj para
1100 D D D A VREF+ VREF- A A RA3 RA2
conversión A/D junto con ADCS1 y
1101 D D D D VREF+ VREF- A A RA3 RA2
ADCS0 de ADCON0 1110 D D D D D D D A VDD VSS
1111 D D D D VREF+ VREF- D A RA3 RA2

D: digital y A; analógica
Módulo Conversor A/D SDII-18

EJEMPLO:
Configuración para conversión de la tensión analógica presente en el canal 3 (RA3/AN3) y
reloj TAD a partir del oscilador RC interno y con formato ajustado a la derecha. Caso de un
PIC16F877A
bit 7 bit 6 REGISTRO ADCON1 (Dirección 9Fh) bit 0

ADFM 1 -
ADCS2 0 - - PCFG3 0 PCFG2 0 PCFG1 1 PCFG0 0

bit 7 ADFM: Selección de formato del resultado bit 3-0 PCFG3:PCFG0: Configuración de las
1 = Ajuste a la derecha entradas al módulo A/D
0 = Ajuste a la izquierda
PCFG3: AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0
PCFG0 RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0
0000 A A A A A A A A
0001 A A A A VREF+ A A A
ADFM = 0 ADFM = 1
Resultado 10 bits 0010 D D D A A A A A
0011 D D D A VREF+ A A A
0100 D D D D A D A A
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
0 0 0 0 0 0 0 0 0 0 0 0
0101 D D D D VREF+ D A A
011x D D D D D D D D
ADRESH ADRESL ADRESH ADRESL 1000 A A A A VREF+ VREF- A A
1001 D D A A A A A A
Resultado 10 bits Resultado 10 bits 1010 D D A A VREF+ A A A
1011 D D A A VREF+ VREF- A A

bit 6 ADCS2: 1100 D D D A VREF+ VREF- A A


1101 D D D D VREF+ VREF- A A
(junto a ADCS1:ADCS0 de ADCON0)
1110 D D D D D D D A
Selección del reloj para la conversión A/D
1111 D D D D VREF+ VREF- D A
Módulo Conversor A/D SDII-19

bit 7 REGISTRO ADCON0 (Dirección 1Fh) bit 0

ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE - ADON

1 1 0 1 1 0 1

bit 7-6 ADCS1:ADCS0: bit 5-3 CHS2:CHS0:


(junto a ADCS2 de ADCON1) Selección del canal de conversión
Selección del reloj para la conversión A/D 000 = Canal 0
001 = Canal 1
Frecuencia del reloj del 010 = Canal 2
Fuente convertidor A/D
ADCS1:ADCS0 011 = Canal 3
de reloj
ADCS2 = 0 ADCS2 = 1
100 = Canal 4
Oscilad 101 = Canal 5
00 or Fosc/2 Fosc/4
principal 110 = Canal 6
Oscilad
111 = Canal 7
01 or Fosc/8 Fosc/16
principal bit 2 GO/DONE:
Oscilad Estado de la conversión
10 or Fosc/32 Fosc/64 Si ADON=1:
principal 1 = Conversión en progreso
Oscilad 167 KHz 167 KHz 0 = Conversión finalizada
11 or RC a a
interno 500 KHz 500 KHz
bit 0 ADON:
Bit de encendido del convertidor A/D
1 = Módulo A/D encendido
0 = Módulo A/D apagado
Módulo Conversor A/D SDII-20

9.3.4.- TIEMPOS RELACIONADOS CON LA DIGITALIZACIÓN DE UNA SEÑAL


ANALÓGICA EN EL MÓDULO DE CONVERSIÓN A/D

• La digitalización de una señal analógica se realiza en dos etapas sucesivas: el muestreo y


retención, que tiene lugar en el circuito de igual nombre, y la conversión A/D.

• En los PIC de la gama media, el condensador de retención tarda en cargarse un tiempo que es el
tiempo de adquisición (TACQ). Una vez transcurrido este tiempo puede comenzar la conversión
en el convertidor A/D de 10 bits, que dura un tiempo TCONV (tiempo de conversión).
TAD TACQ : tiempo de adquisición.
TACQ TCONV TAD: tiempo de conversión de un bit
en el convertidor A/D.
Tiempo TCONV: tiempo de conversión A/D de
un dato
TDIG
TDIG: tiempo de digitalización.
• La suma de los tiempos de adquisición y conversión constituye el tiempo de digitalización (TDIG)
de la señal analógica,
TDIG = TACQ + TCONV

• Si una señal analógica se digitaliza periódicamente con un periodo Ts, denominado periodo de
muestreo, la frecuencia de muestreo es Fs = 1/Ts.
Ts debe ser mayor o igual que la duración del proceso de digitalización.
1
En los PIC16F87xA Ts  TDIG  Fs 
TDIG
Módulo Conversor A/D SDII-21

a) Tiempo de adquisición (TACQ)

• TACQ es el tiempo necesario para cargar el condensador de mantenimiento (CHOLD).


• En los PIC de la gama media, el condensador de retención es de 120 pF
• Según el fabricante, el tiempo de adquisición en los PIC de gama media está entre 10 µs
y 20 µs, es decir,
10 µs  TACQ  20 µs
• TACQ depende mucho de la resistencia de salida (Rs) de la fuente de señal. El fabricante de
los PIC recomienda que Rs, sea siempre menor que 10 k. Si Rs = 10 k, resulta TACQ =
20 µs, y para Rs = 50 se obtiene TACQ = 10 µs.
• Hasta que no acabe la conversión, no empieza otra adquisición (SS abierto)
Esperar TACQ: a) tras una conversión;
b) tras seleccionar un nuevo canal;
c) tras encender el módulo A/D.
Módulo Conversor A/D SDII-22

b) Tiempo de conversión (TCONV)


TCY a TAD TAD TAD TAD TAD TAD TAD TAD TAD TAD TAD TAD

b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
Comienza la conversión
Se abre SS (típ. 100ns) Se carga ADRES
Se pone GO/DONE# a “0”
1  GO/DONE#
Se levanta el flag ADIF
CHOLD conectado a entrada analógica

• Según el fabricante, en el convertidor A/D de 10 bits de los PIC de la gama media, la


conversión de 10 bits dura 12*TAD
TCONV = 12 * TAD
donde TAD es el tiempo de conversión de un bit.

• Para la operación correcta del convertidor A/D, el fabricante recomienda:


TAD > 1,6 µs

• Para TAD = 1,6 µs, el tiempo de conversión A/D de 10 bits es TCONV = 19,2 µs

• El valor de TAD es igual al periodo del reloj del convertidor A/D. Como el reloj de convertidor
A/D se puede obtener del oscilador principal del microcontrolador, el valor de la frecuencia de este
oscilador debe establecerse de modo que se cumpla la condición TAD > 1,6 µs.
Módulo Conversor A/D SDII-23

• Valor (máximo) que debe tener la frecuencia (Fosc) del oscilador principal del
microcontrolador para que el tiempo de conversión (mínimo) por bit (TAD) sea de 1,6 µs, en
las diferentes configuraciones.

Frecuencia del
Fuente de Fosc 
ADCS2:ADCS1:ADCS0 reloj del TAD Fosc
reloj
convertidor A/D (para TAD  1,6 µs)
Oscilador
000 Fosc / 2 2 / Fosc 2 / TAD 1,25 MHz
principal
Oscilador
100 Fosc / 4 4 / Fosc 4 / TAD 2,5 MHz
principal
Oscilador
001 Fosc / 8 8 / Fosc 8 / TAD 5 MHz
principal
Oscilador
101 Fosc / 16 16 / Fosc 16 / TAD 10 MHz
principal
Oscilador
010 Fosc / 32 32 / Fosc 32 / TAD 20 MHz
principal
Oscilador
110 Fosc / 64 64 / Fosc 64 / TAD 40 MHz
principal
Oscilador 167 KHz 2 µs a 6 µs
x11 a -
RC interno 500 KHz (Típico 4 µs)
Módulo Conversor A/D SDII-24

TIEMPO DE CONVERSIÓN Y TIEMPO DE ADQUISICIÓN (de los PIC16F87xA)

Tiempo fijo = 12 TAD Depende de la Rs externa

Tiempo de conversión (TCONV) Tiempo de adquisición (TACQ)


El interruptor de muestreo El interruptor de muestreo cerrado
se abre al cabo de 100ns de GO=1 para alcanzar el nuevo valor a convertir
SS SS
RSS RSS
Va Va
(tensión (tensión
analógica)
CHOLD
Vcondensador analógica)
CHOLD
Vcondensador

Inicio de conversión Fin de conversión A partir de aquí se podría lanzar


1  GO / DONE# Se cargan ADRESH:ADRESL una nueva conversión porque
Se pone GO / DONE# a “0” ya se ha alcanzado el valor de la
Se levanta el flag ADIF tensión a convertir

Va
(tensión
analógica) Vcondensador

CONDICIÓN A CUMPLIR:
Tiempo
T muestreo > T conversión + T adquisición
Tiempo Tiempo
conversión adquisición
Módulo Conversor A/D SDII-25

9.3.5.- PROGRAMACIÓN DEL MÓDULO DE CONVERSIÓN A/D


El módulo de conversión A/D se puede atender utilizando las técnicas de entrada por consulta
o espera, o por interrupción. Los pasos que hay que seguir para medir la tensión analógica en
un canal de entrada son:

1. Configurar el módulo de conversión A/D


• Configurar los terminales de los puertos A y E como entradas analógicas, referencias de
tensión, o entradas o salidas digitales, colocando los valores apropiados en los bits
PCFG3:PCFG0 de (ADCON1) y en los registros TRISA y TRISE.
• Seleccionar el canal de la conversión mediante los bits CHS2:CHS0 de (ADCON0)
• Seleccionar el formato del resultado de la conversión A/D con el bit ADFM de
(ADCON1).
• Seleccionar la procedencia del reloj del módulo de conversión A/D y el valor apropiado
del tiempo de conversión por bit (TAD) mediante los bits ADCS2:ADCS0 de (ADCON1 y
ADCON0).
• Encender o activar el módulo A/D mediante el bit ADON de (ADCON0).

2. Si el módulo se atiende por interrupción, configurar la interrupción del módulo de


conversión A/D.
• Desactivar (poner a 0) el flag o indicador de interrupción del convertidor A/D, que es el
bit ADIF de (PIR1)
• Habilitar la interrupción del convertidor A/D, poniendo a 1 el bit ADIE de (PIE1)
• Habilitar las interrupciones de los periféricos poniendo a 1 el bit PEIE de (INTCON)
• Habilitar la máscara global de interrupciones, poniendo a 1 el bit GIE de (INTCON).
Módulo Conversor A/D SDII-26

3. Esperar a que transcurra el tiempo de adquisición (TACQ) requerido.


• Tiempo necesario para capturar el valor analógico a convertir.
• Los valores típicos del tiempo de adquisición son del orden de 20μs.

4. Comenzar la conversión.
• 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 conversión A/D.


a) Si el tratamiento es por consulta o espera: controlando cuando el bit GO/DONE# del
registro ADCON0 se pone a “0” o el bit ADIF del registro PIR1 se pone a “1”.
b) Si el tratamiento es por interrupción: cuando se produce la interrupción del convertidor
A/D.

6. Leer el resultado de la conversión.


• Disponible en los registros ADRESH:ADRESL.
• Desactivar (poner a 0) el flag ADIF.

7. Llevar a cabo la siguiente conversión.


• Volver al paso 1 ó 2, según convenga.
• Espera mínima antes de empezar la siguiente adquisición: 2·TAD
TAD: Tiempo necesario para la conversión de un bit.
(Esta espera no es necesaria en el caso de los PIC16F87xA porque el
interruptor de captura se “cierra” en cuanto se obtiene el resultado)
Módulo Conversor A/D SDII-27

9.3.6.- EFECTOS DE UN RESET SOBRE EL MÓDULO A/D

Un RESET del dispositivo provoca que los registros del módulo A/D se inicialicen a los
valores indicados en la tabla. Por tanto, un RESET provoca que el módulo A/D se apague y
que cualquier conversión que se estuviera realizando cuando se produce el RESET se aborte.
Todos los pines asociados al módulo A/D pasan a ser entradas analógicas. Los valores
acumulados en ADRESH:ADRESL no se modifican por un Power-On-Reset. El valor que
contendrán los registros ADRESH:ADRESL tras un POR serán desconocidos inicialmente.

Value on
Value on:
Dirección Registro Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 MCLR
POR, BOR
WDT
0Bh. 8Bh
INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
10Bh, 18Bh
0Ch PIR1 PSPIP(1) ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 0000 0000 0000 0000
8Ch PIE1 PSPIE(1) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 0000 0000 0000 0000
1Eh ADRESH A/D Result Register High Byte xxxx xxxx uuuu uuuu
9Eh ADRESL A/D Result Register High Byte xxxx xxxx uuuu uuuu
1Fh ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE - ADON 0000 00-0 0000 00-0
9Fh ADCON1 ADFM - - - PCFG3 PCFG2 PCFG1 PCFG0 --0- 0000 --0- 0000
-
85h TRISA - PORTA Data Direction Register --11 1111 --11 1111
-
05h PORTA - PORTA Data Latch when writen. PORTA pins when read --0x 0000 --0u 0000
89h(1) TRISE IBF OBF IBOV PSPMODE - PORTE Data Direction bits 0000 -111 0000 -111
-
09h(1) PORTE - - - - RE2 RE1 RE0 ---- -xxx ---- -uuu
Legend: x = unknown. u = unchanged. - = unimplemented locations read as ‘0’. Shaded cells are not used
Módulo Conversor A/D SDII-28

9.3.7.- REGISTROS RELACIONADOS CON LAS INTERRUPCIONES DE A/D

REGISTRO INTCON(Direcciones 0B, 8Bh, 10Bh, 18Bh)


bit 7 bit 0

GIE PEIE T0IE INTE RBIE T0IF INTF RBIF

bit 7 GIE: Habilitación global de interrupciones (escribiendo un 1 se habilita y escribiendo un


0 se inhabilita)
bit 6 PEIE: Habilitación de interrupciones de periféricos

REGISTRO PIE1 (Dirección 8Ch)


bit 7 bit 0

PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

bit 6 ADIE: Habilitación de la interrupción del convertidor A/D

REGISTRO PIR1 (Dirección 0Ch)


bit 7 bit 0

PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

bit 6 ADIF: Flag de la interrupción del convertidor A/D


1 = Conversión A/D completada. 0 = Conversión A/D aún no completada.
Módulo Conversor A/D SDII-29

9.3.8.-MÓDULO A/D CUANDO EL MICRO ENTRA EN MODO DORMIDO (SLEEP)

• El módulo A/D puede funcionar durante el modo dormido si se selecciona como


reloj para la conversión el RC interno (ADCS1:ADCS0 = 11).

• Si se elige como reloj el RC, el módulo A/D espera 1 ciclo de instrucción antes de
iniciar la conversión. Esto permitiría la ejecución de la instrucción SLEEP que se
coloque a continuación, esto eliminaría todo posible ruido de conmutación (debido
al paso de normal a dormido) durante la conversión.

• Cuando se haya completado la conversión, el bit GO/DONE se pondrá a “0” y el


resultado se cargará en los registros ADRESH y ADRESL. Si la interrupción del
conversor A/D está habilitada (ADIE y PEIE a “1”) el dispositivo se “despertará”. Si
no estuviera habilitada, el módulo A/D se apagará aunque el bit ADON siga a “1”.

• Si la fuente de reloj para la conversión no es la RC interna, una instrucción SLEEP


provocará que la conversión que se esté ejecutando se aborte y que el módulo A/D
se apague aunque el bit ADON siga a “1”.
Módulo Conversor A/D SDII-30

9.3.9.- EJEMPLOS
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 PIC16F877A, 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 potenciómetro conectado a RA0 en 10 bits, de los
; que los 8 bits más significativos se muestran en los leds conectados al PORTB.

list p=16F877A
include <[Link]>
TEMP equ 20h ; Variable de almacenamiento temporal.

ORG 0x00 ; Vector de Reset.


goto Inicio
org 0x04 ; Vector de interrupción.
goto RAI ; (RAI es la rutina de atención a la interrupción).
org 0x10
Inicio movlw 0FFh ; PORTB = 11111111b
movwf PORTB
bsf STATUS,RP0 ; Seleccionar Banco 1 para configurar los terminales.
movwf TRISA ; Configuro los terminales del PORTA como entradas (W=FFh).
clrf TRISB ; Configuro los terminales del PORTB como salidas.
bcf STATUS,RP0 ; Volvemos al Banco 0.
call IniciarCAD ; Llamo a la subrutina que configura el módulo A/D
call RetardoTACQ ; Retardo de adquisición
call RetardoTACQ ; mayor de 20 us (TACQ)
bsf ADCON0,GO ; Inicia la conversión A/D.
Loop goto loop
Módulo Conversor A/D SDII-31

;----------------------------------------------------------------------------------
; Subrutina para inicializar (configurar) el modulo A/D:
; Selecciona RA0, RA1 y RA3 como entradas analógicas. Tensiones VDD y VSS.
; Selecciona el resultado justificado a la izquierda.
; Selecciona el canal CH0.
; Selecciona el reloj RC.
;----------------------------------------------------------------------------------
IniciarCAD bsf STATUS,RP0 ; Selecciono Banco 1.
movlw B'00000100‘ ; RA0,RA1,RA3 entradas analógicas,
movwf ADCON1 ; justificado a la izquierda el resultado
; con los 8 bits más significativos en ADRESH.
bsf PIE1,ADIE ; Habilitamos interrupciones A/D.
bcf STATUS,RP0 ; Selecciono Banco 0.
movlw b’11000001’ ; Oscilador RC, Entrada analógica CH0,
movwf ADCON0 ; Modulo A/D en funcionamiento.
bcf PIR1,ADIF ; Limpio flag interrupción.
bsf INTCON,PEIE ; Habilito interrupciones de periféricos.
bsf INTCON,GIE ; Habilito interrupciones globales.
return

;----------------------------------------------------------------------------------------
; Subrutina de retardo para TACQ
; Esta rutina es un retardo software de más de 10us si se usa un oscilador de 4MHz.
; Se usa para asegurar un tiempo de adquisición de más de 20 us mediante una doble llamada
; antes de lanzar una nueva conversión.
;------------------------------------------------------------------------------------------
RetardoTACQ movlw 3 ; Carga Temp con 3
movwf TEMP
SD decfsz TEMP,F ; Bucle de retardo
goto SD
return
Módulo Conversor A/D SDII-32

;--------------------------------------------------------------------------------
; Rutina de atención a la interrupción del A/D:
; Mostrar el valor en los leds del PORTB
;--------------------------------------------------------------------------------
RAI btfss PIR1,ADIF ; ¿Interrupción del modulo A/D?
retfie ; Si no interrupción de A/D, retornamos.
movf ADRESH,W ; Cojo los 8 bits altos de la conversión y
movwf PORTB ; los muestro en los LEDS del PORTB.
bcf PIR1,ADIF ; Desactivo el flag (Reseteo el flag).
call RetardoTACQ ; Retardo de adquisición
call RetardoTACQ ; mayor de 20 us (2TDA)
bsf ADCON0,GO ; Lanzar una nueva conversión.
retfie ; Retorno y habilito GIE.

END
Módulo Conversor A/D SDII-33

Ejemplo de uso del módulo A/D (conversión de 8 canales secuencialmente )


;**************************************************************************
; Programa de ejemplo de manejo del conversor A/D para realización de conversiones secuen-
; ciales de los 8 canales analógicos disponibles en un PIC16F877A y almacenamiento de los
; resultados de la conversión en una pila circular de 16 posiciones (dos para cada canal).
; Se supone una Fosc de 8 MHz
;**************************************************************************
list p=PIC16F877A ;Definimos MCU a utilizar
include "[Link]“ ;Incluimos fichero de etiquetas

TEMP EQU 0x20 ; Posición auxiliar temporal


PTablaAD EQU 0x30 ; Posición inicial de la pila para guardar resultados de
; las conversiones
ORG 0x00 ; Vector RESET.
goto INICIO

ORG 0x10
INICIO bsf STATUS,RP0 ; Selección Banco 1.
movlw 0FFh
movwf TRISA ; Configuro los terminales del PORTA como entradas (W=FFh).
movlw b'10000000‘ ; Definimos todos los pines como analógicos,
movwf ADCON1 ; referencia de VDD = 5V
; y resultado ajustado a la derecha
; 8 bits menos significativos en ADRESL
; 2 bits más significativos en ADRESH.
bcf STATUS,RP0 ; Selección Banco 0.
movlw b'10000001‘ ; Oscilador: TAD=32*Tosc= 4us > 1,6us,
; sin iniciar conversión, A/D encendido
movwf ADCON0 ; y selección inicial en RA<0> (canal CH0).
movlw PTablaAD ; colocamos el puntero del dir. indirecto (FSR)
movwf FSR ; apuntando a la primera posición de la tabla.
Módulo Conversor A/D SDII-34

NuevaCAD call RetardoADQ ; Esperar el tiempo de adquisición.

bsf ADCON0,GO ; Lanzar una conversión.

LOOP btfsc ADCON0,GO


goto LOOP ; Esperar a que finalice la conversión.

bsf STATUS,RP0 ; Guardo el resultado de la conversión en la pila tabla


movf ADRESL,W ; circular, primero los 8 bits menos significativos
movwf INDF ; que están en ADRESL (en el banco 1).
incf FSR ; Se incrementa el puntero de direcciones RAM (de la pila
; tabla).
bcf STATUS,RP0 ; Volvemos al banco 0 (donde está ADRESH)
movf ADRESH,W ; para recoger ahora los 2 bits más significativos y
movwf INDF ; los guardamos en la siguiente posición apuntada
; por FSR (puntero de la pila tabla).
incf FSR ; Incrementamos de nuevo FSR (puntero de la pila tabla).
movlw 0x08 ; Incrementamos el número de canal a convertir
addwf ADCON0 ; para lo cual sumamos 1 al bit 3 de ADCON0.
btfss ADCON0,6 ; Miramos si ya he convertido los 8 canales (el bit 6 de
; ADCON0 se pondrá a 1),
goto NuevaCAD ; si no, convierto otro canal, nueva conversión

bcf ADCON0,6 ; en caso contrario, vuelvo a poner Tad=32*Tosc (b6=0)


movlw PTablaAD ; de nuevo el puntero del dir. Indirecto (FSR)
movwf FSR ; apuntando a la primera posición de la tabla
goto NuevaCAD ; y vuelvo a convertir, empezando por el canal 0.
Módulo Conversor A/D SDII-35

;----------------------------------------------------------------
; Subrutina de retardo
; Temporización del tiempo de adquisición
;----------------------------------------------------------------
RetardoADQ movlw 8 ; bucle del tiempo de adquisición (con 9 sale 20,5 useg)
movwf TEMP ; 18,5 useg incluyendo call y return
adq nop ; 1 ciclo
decfsz TEMP,F ; decremento y comparación con cero
goto adq ; si no hemos llegado a cero, repetimos
return ; si ya llegamos a cero, retornamos

END

También podría gustarte