Вы находитесь на странице: 1из 24

El Convertidor Analgico Digital

(A/D)

5. Introduccin
El microcontrolador PIC16F877 de Microchip puede desempear muchas funciones pero en la
que se va a centrar aqu es la de su conversor analgico-digital. Antes de entrar de pleno en
su funcionamiento se va a comentar los conceptos bsicos de una conversin de una seal
analgica a digital.

5.1. Conversin de una seal analgica a digital


Tanto la voz como muchas de las seales que se envan a travs de un medio guiado como un
cable, o no guiado como es el aire; son de tipo continuo, y pueden tomar infinitos valores a lo
largo del tiempo. Por ejemplo, se puede decir que la seal elctrica que se transmite de la
tarjeta de sonido al altavoz es continua y puede tomar cualquier tensin entre los dos hilos.
En la siguiente figura se muestra una seal analgica:

El inters en digitalizar una seal puede surgir por varios motivos: el hecho de querer
almacenarla en un soporte digital, transmitirla digitalmente para poder reconstruirla, o poder
tratar los valores analgicos que d un sensor en programas computacionales, etc.
Delimitando (acotando) la seal analgica en un intervalo de tiempo y con unos valores
mnimos y mximos de tensin, se tiene que tener en cuenta dos factores fundamentales a la
hora de almacenar digitalmente (con ceros y unos) dicha seal en un formato adecuado, que se
tiene que muestrear y cuantificar, como se explica a continuacin:
1. El muestreo
El muestreo implica que s e t i e n e que coger una muestra de la seal cada T segundos en
el eje de las abscisas, ya que no hay memoria suficiente capaz de almacenar los
infinitos puntos de una seal en un intervalo cualquiera de tiempo. En el ejemplo de la
figura anterior se ha acotado un segundo de tiempo y 5 V de tensin de entrada analgica del
PIC, obtenindose la siguiente figura, que se han tomado 24 muestras en un segundo, esto
es, la frecuencia de muestreo:

2. La cuantificacin
La cuantificacin surge por el mismo motivo que el muestreo pero para el eje de ordenadas:
una vez que se tiene una muestra su amplitud puede tomar infinitos valores, los cuales se
debe redondear entre unos valores fijos a lo largo de ese eje. Estos valores van a
depender del nmero de bits que se vayan a almacenar para cada muestra, por ejemplo, en
la imagen se cogen 4 bits y con ellos se pueden formar 16 combinaciones y por lo tanto 16
distintos niveles en los que se puede dividir el eje. En el PIC se cuantifica con 10 bits lo
que se obtiene 1023 niveles.

NOTA: Tanto en un proceso como en otro, se va a provocar una prdida de la forma de la


seal original, y eso implica que se va a cometer un error de aproximacin cuya
magnitud se puede calcular, la que se va a comentar con ms detalle en el siguiente
apartado.

5.2. Error de muestreo y cuantificacin


1. Muestreo
El parmetro fundamental del muestreo digital es el intervalo de muestreoseg, o su
equivalente frecuencia de muestreo 1/ Hz. Lgicamente, cuanto menor sea , mayor
nmero de valores s e obtienen de la seal, y viceversa. El resultado de dicho muestreo
es la obtencin de una serie discreta ordenada: {xr} = {x0, x1, x3,..., xr,...}, en la que el
ndice r indica la posicin de orden temporal del valor xr. As, el valor de la seal
original, en el tiempo t = r, x (t), se representa por xr.

Si s e aumenta el nmero de muestras por unidad de tiempo, la seal muestreada se


parecer ms a la seal continua. Respecto a esto, el criterio de Nyquist asegura que para
que la seal muestreada contenga la misma informacin que la continua, la separacin
mnima entre dos instantes de muestreo debe ser 1/(2 W), siendo W el ancho de banda
de la seal. Dicho de otra forma, que la frecuencia de muestreo debe ser mayor o igual que
2W.
2. Cuantificacin
Se conoce como error de cuantificacin (o ruido), a la diferencia entre la seal de entrada
(sin cuantificar) y la seal de salida (ya cuantificada). Cuanto mayor sea el nmero de bits
que se va a almacenar cada muestra, se va a cometer menor error de aproximacin de la
seal, l o q u e interesa que el ruido sea lo ms bajo posible.
Ejemplo. Si tenemos una seal cualquiera, y la queremos guardar en un archivo de 4 bits,
tendremos 24 niveles para cuantificarla, (8 para valores positivos, y 8 ms para los
negativos).
= (1/2N-1)= Intervalo de cuantificacin = 1/23 = 0.125
Error: -/2 < error >/2
Ejemplo. A partir de la potencia de una seal, podemos saber que error se est cometiendo.
Potencia: < error2 >= 2/12
Si se tiene una tarjeta de sonido, y trabaja a 16 bits por muestra:
Cometer un error de: (1/215)2/12 = 1/(230 * 12)

5.3. Tcnicas de cuantificacin


Como informacin complementaria, decir que existen diferentes tipos de cuantificacin, cada
uno de los cuales se amoldar a los datos que se est enviando.
4

Cuantificacin uniforme: la distancia entre los niveles de reconstruccin es siempre la


misma. No hacen ninguna suposicin acerca de la naturaleza de la seal a
cuantificar, de ah que no proporcionan los mejores resultados. Sin embargo, tienen como
ventaja que son los ms fciles y menos costosos de implementar.

Cuantificacin logartmica: incrementa la distancia entre los niveles de reconstruccin


conforme aumenta la amplitud de la seal. Muy usada en seales de voz.

Cuantificacin no uniforme: si se conoce la funcin de la distribucin de probabilidad, se


puede ajustar los niveles de reconstruccin a la distribucin de forma que se minimice el
error cuadrtico medio. Esto significa que la mayora de los niveles de reconstruccin se
den en la vecindad de las entradas ms frecuentes y, consecuentemente, se minimice el
error (ruido).

Cuantificacin vectorial: se basa en cuantificar segn las muestras vecinas, resulta ms


eficiente cuantificar los datos en bloques de N muestras.

Cuantificadores de Vecino Ms Cercano (Voronoi): el proceso de codificacin no


necesita almacenar una descripcin geomtrica de las celdas, la codificacin es mediante
una comparacin de distancias.

5.4. Descripcin General del Mdulo Conversin Analgico Digital (ADC)


Los PIC16F87X poseen un mdulo ADC interno que les permite manejar 5 entradas
analgicas para los dispositivos de 28 pines y 8 para los otros dispositivos. En la
siguiente figura se muestra un diagrama de bloques del mdulo ADC.
A travs de la entrada analgica se aplica la seal analgica a un condensador de captura y
retencin (sample and hold) que despus se introduce en el convertidor. El convertidor de
aproximaciones sucesiva da como resultado una palabra de 10 bits.

Anlisis de cada parte del mdulo de Conversin Analgico Digital :


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,...,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.
Las entradas de seleccin del multiplexor de los canales analgicos, son los bits 5-3, CH2:CH0,
del registro de control ADCON0. Adems, los canales analgicos a usar debern tener sus bits
TRIS correspondientes seleccionados como entradas.

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, Donde
n es la resolucin del convertidor (n = 10).
Es decir, el convertidor A/D puede seleccionar como tensin de referencia la interna
VDD y masa o bien una externa que se introduzca entre RA3/AN3/VREF+ y
RA3/AN3/VREF. Cuando se selecciona la tensin de referencia externa, hay que tener en
cuenta que existen algunas limitaciones; el mximo voltaje aplicado a la patilla VREF+
(RA3/AN3) ser VDD+0,3V y el mnimo VDD-2,5V. En cuanto a la tensin VREF(RA2/AN2) la mnima tensin ser VSS-0,3V y la mxima VREF+ - 2V, as por ejemplo, si
la tensin de alimentacin es de 5V, la tensin en RA3/AN3 no podr exceder de 5V. Por
6

lo que el mximo voltaje en VREF- ser de 3V. Siempre se ha de cumplir que


.

Los bit 3-0, PCFG3:PCFG0, del registro de control ADCON1, configuran los canales de
entrada del convertidor A/D, es decir, estos bits son las entradas de seleccin del multiplexor

para la configuracin de las entradas analgicas, entradas digitales y voltajes de


referencia.
El convertidor A/D tiene como caracterstica especial el ser capaz de seguir trabajando
mientras el dispositivo est en el modo SLEEP. Para ello el oscilador interno RC debe
conectarse al conversar.
El mdulo de A/D tiene cuatro registros. Estos registros son:

ADRESH : Parte alta del resultado de la conversin


ADRESL : Parte baja del resultado de la conversin
ADCON0: Registro de Control 0
ADCON1, Registro de Control 1

Los registros ADCON0 de control del funcionamiento del conversar se muestran seguidamente
al igual que el registro ADCON1 de configuracin de los pines del puerto. Los pines del PORTA
pueden configurarse como entradas analgicas (RA, tambin puede ser entrada de tensin de
referencia) o como E/S digital.
Como la relacin entre escalas es lineal, una regla de tres nos da la relacin entre el voltaje
analgico de entrada (Vin) y el valor digital (D) obtenido por el ADC

Con la eleccin ms comn: VREF+ = VDD = 5v, VREF- = VSS= 0v, y como n=10, obtenemos:

De donde se ve que cuando Vin vara en todo su rango, desde 0 hasta 5v, el valor
obtenido D vara tambin en todo su rango, de 0 a 1023.
Si a la inversa, obtenemos un valor D y deseamos saber que voltaje representa, basta con
despejar:

Observacin: Como puede verse, la conversin del dato D al voltaje correspondiente


requiere una multiplicacin por un nmero fraccionario, para lo cual el PIC no posee
instrucciones, si deseamos realizar esta multiplicacin en el PIC debemos hacer un
programa que multiplique nmeros de punto fijo o de punto flotante.

5.5. El proceso de Conversin Analgico/Digital.


En el siguiente diagrama de tiempo se muestran los eventos que tienen lugar durante el proceso
de una conversin analgico / digital.

De acuerdo a la figura, para echar a andar el convertidor


siguientes pasos:

se debern seguir los

1. Configurar el mdulo A/D:


a. Configurar los pines analgicos y los Voltajes de referencia VREF- y VREF+,
mediante el registro ADCON1 (9Fh) (y los correspondientes bits TRIS
como entradas)
b. Seleccionar el canal de entrada a convertir mediante los bits CHS2:CHS0 del
registro ADCON0 (1Fh)
c. Seleccionar el reloj de conversin mediante los bits ADCS1:ADCS0
(ADCON0<7:6>)
d. Habilitar (energizar)el convertidor mediante el bit ADON (ADCON0<0>)
2. Configurar interrupciones para el convertidor A/D (si se desea), para ello: limpiar
a. ADIF y poner ADIE, PEIE y GIE.
3. Esperar mientras transcurre el tiempo de adquisicin (unos 20 seg).
4. Iniciar la conversin poniendo el bit GO/#DONE (ADCON0<2>).
5. Esperar a que termine la conversin:
a. Por poleo (Polling): Consultando continuamente el bit GO/#DONE (el
cual es limpiado por el convertidor cuando la conversin est completa).
b. Por interrupciones: Cuando la conversin termina, la bandera ADIF se activa
y esto genera una solicitud de interrupcin, la cual deber ser atendida por
una rutina de atencin a la interrupcin diseada para ello.
6. Leer el dato convertido D de los registros (ADRESH:ADRESL)
7. Para la siguiente conversin, esperar al menos 2TAD (Donde TAD es el tiempo de
conversin por bit).
8

El diagrama de flujo que deber seguir el programa para realizar una conversin A/D puede ser
la que se muestra en la siguiente figura:

5.6. Los Registros de Control


A continuacin se presenta un resumen de los registros relacionados con la operacin del
convertidor:
1. Registro ADCON0 (direccin lFh)
R/W-0
ADCS1
Bit 7

R/W-0
ADCS0

R/W-0 R/W-0 R/W-0


CHS2 CHS1 CHS0

R/W-0
G0/#DONE

U-0
---

R/W-0
ADON
Bit 0

bit 7-6: ADCS1:ADCS0: bit de seleccin de reloj para el Convertidor A/D


00 Fosc/2
01 Fosc /8
10 Fosc/32
11 FRC (Procede del oscilador RC interno)
* El oscilador RC interno del convertidor tiene un TAD tpico de 4 seg,
sin embargo, puede variar entre 2 y 6 seg.. Este reloj es recomendable
9

para operacin en modo SLEEP, ya que este modo desconecta la frecuencia del
reloj externo.
* Precaucin: El convertidor A/D no trabajar correctamente con un TAD
menor que TAD(mnimo) = 1.6seg. El usuario deber cuidar la eleccin del
reloj adecuado para no violar esta limitante.
bit 5-3:

CH2:CH0: bit de seleccin del canal analgico (Los canales analgicos a usar
debern tener sus bits TRIS correspondientes seleccionados como entradas).
000 = Canal 0, (RA0/AN0)
001 = Canal 1, (RA1/AN1)
010 = Canal 2, (RA2/AN2)
011 = Canal 3, (RA3/AN3)
100 = Canal 4, (RA4/AN4)
101 = Canal 5, (RA5/AN5); los PIC16F87X de 28 pines no tienen este canal
110 = Canal 6, (RA6/AN6); los PIC16F87X de 28 pines no tienen este canal
111 = Canal 7, (RA7/AN7),, los PIC 1 6F87X de 28 pines no tienen este canal

bit 2:

GO/#DONE. bit de estado de la conversin A/D. Con el convertidor encendido,


poniendo este bit en 1 se inicia la conversin del canal seleccionado. Este bit
permanece en 1 durante la conversin y es limpiado automticamente por el
convertidor al terminar la conversin.
1= La conversin A/D est en marcha (mientras est a 1 se est realizando la
conversin)
0 = La conversin ha finalizado. (el bit se pone a cero automticamente por
hardware cuando la conversin A/D finaliza) el resultado de la conversin
aparece en ADRDES:ADRESL

bit 1:

No implementado: Se lee como 0

bit 0:

ADON: bit de puesta en marcha


1 = El convertidor A/D est operativo
0 = El convertidor A/D est apagado y no consume corriente.

2. Registro ADCON1 (direccin 9Fh)


U-0
ADFM
Bit 7
bit 7:

U-0
---

R/W-0
---

U-0
---

R/W-0
PCFG3

R/W-0
PCFG2

R/W-0
PCFG1

R/W-0
PCFG0
Bit 0

ADFM: Selecciona el formato del resultado de la conversin A/D


1 = Pone en el registro ARDESH los seis bit de mayor peso a 0 (alineacin a la derecha).
0 = pone los 6 bit de menor peso del registro ADRESL a 0 (alineacin a la izquierda).
Por lo tanto los 16 bits que forman el registro ARDESH-ARDESL con ADFM=1 tiene los 6
bit de mayor peso a cero y con ADFM=0 los 6 bit de menor peso estn a cero

bit 6-4: No implementados: Se leen como cero


bit 3-0: PCFG3:PCFG0: bits de configuracin de los canales de entrada del convertidor A/D.
Se utilizan para configurar las patillas como E/S digital o como entrada analgica de acuerdo
10

con la siguiente tabla:


PCFG3: AN7(1) AN6(1) AN5(1) AN4 AN3 AN2 AN1 AN0
CAN/(2)
VREF+ VREFPCFG0
/RE1
/RE0 /RA5 /RA3 /RA2 /RA1 /RA0V
REFS
/RE2
0000
A
A
A
A
A
A
A
A
VDD
VSS
8/0
0001
A
A
A
A
VREF+
A
A
A
RA3
VSS
7/1
0010
D
D
D
A
A
A
A
A
VDD
VSS
5/0
0011
D
D
D
A
VREF+
A
A
A
RA3
VSS
4/1
0100
D
D
D
D
A
D
A
A
VDD
VSS
3/0
0101
D
D
D
D
VREF+
D
A
A
RA3
VSS
2/1
011X
D
D
D
D
D
D
D
D
VDD
VSS
0/0
1000
A
A
A
A
VREF+ VREFA
A
RA3
RA2
6/2
1001
D
D
A
A
A
A
A
A
RA3
VSS
6/0
1010
D
D
A
A
VREF+
A
A
A
RA3
VSS
5/1
1011
D
D
A
A
VREF+ VREFA
A
RA3
RA2
4/2
1100
D
D
D
A
VREF+ VREFA
A
RA3
RA2
3/2
1101
D
D
D
D
VREF+ VREFA
A
RA3
RA2
2/2
1110
D
D
D
D
D
D
D
A
VDD
VSS
1/0
1111
D
D
D
D
VREF+ VREFD
A
RA3
RA2
1/2
A= Entrada Analgica; D = E/S Digital; (1) Estos canales no estn disponibles para los dispositivos de
28 pines
Notas: (1) Estos tres canales no existen en los PIC16F873 / 76
(2) Esta columna indica el nmero de canales analgicos de entrada disponibles y
nmero de canales analgicos usados como entradas de voltaje de referencia.

el

3. Registros ADRESH Y ADRESL


El par de registros de resultado ADRESH:ADRESL se carga con el resultado de 10
bits de la conversin A/D. Este par de registros se extienden hasta 16 bits. El mdulo
A/D tiene la posibilidad de justificar el resultado de 10 bits dentro de los 16 bits de la pareja
de registros. La seleccin del formato de justificacin a la izquierda o derecha se realiza
con el bit ADFM (ADCON1). Los bits restantes (a los 10 de la conversin) se llenan con
ceros. Cuando se completa la conversin A/D, el resultado se guarda en los registros y se pone a
cero el bit GO/#DONE y el flag de fin de conversin ADIF (PIR1<6>) se pone a 1.
Estos dos registros cuando el convertidor A/D est en OFF y no se utiliza, pueden utilizarse
como dos registros de 8 bits de propsito general.
Cuando se completa la conversin A/D, el resultado se guarda en los registros y se pone a
cero el bit GO/#DONE.
Despus de que el conversar A/D se ha configurado como se quiere, la seleccin del canal debe
realizarse antes de hacer la adquisicin. Los canales de entrada analgica deben tener los
correspondientes bits del registro TRIS seleccionados como entradas.
En resumen, el par de registros ADRESH:ADRESL (1Eh:9Eh) son cargados con el
dato (D) resultante de una conversin analgico / digital al terminar sta. Cada uno de
11

estos registros es de 8 bits, por lo tanto, juntos pueden guardar hasta 16 bits. Sin embargo,
como el resultado D es de 10 bits, el mdulo de conversin A/D permite justificarlo
(alinearlo) en la parte izquierda o derecha de los 16 bits disponibles, para elegir alguna de las
dos opciones se usa el bit ADFM (ADCON1<7>) como se muestra en la figura siguiente

5.7. Caractersticas Elctricas del convertidor


Las siguientes son algunas de las especificaciones ms importantes, y son vlidas para los
PIC16F87X-04, PIC16F87X-10, PIC16F87X-20, PIC16LF87X-04:
Caracterstica

mnimo

tpico

mximo

VREF+-VREFVREF+
VREFVoltaje analgico VAIN
Impedancia de la fuente de seal externa ZAIN
Corriente promedio
Estndar
consumida por el convertidor
Extendido
IAD

2v
VDD-2.5v
VSS-0.3v
VSS-0.3v
-

220A
90A

VDD+0.3v
VDD+0.3v
VREF+-2v
VREF++0.3v
-10 K

5.8. Otras Caractersticas


1. Requisitos para la Adquisicin A/D
Para que el convertidor A/D pueda tener la exactitud especificada, debe permitirse la carga del
condensador (CHOLD) que mantiene la entrada a un nivel de tensin. La Estructura de un pin de
un canal Analgico se muestra en la siguiente figura.

12

De la impedancia de la fuente (RS) se toma una muestra a travs del interruptor (RSS) la
impedancia afecta directamente al tiempo de carga del condensador CHOLD. La impedancia
recomendada para las fuentes analgicas es de 10 K. Cuando la impedancia disminuye tambin
disminuye el tiempo de adquisicin. Antes de realizar, la conversin debe seleccionarse el canal
de la entrada analgica.
Para calcular el tiempo mnimo de adquisicin mnimo se puede utilizar la siguiente ecuacin,
que asume un error de LSB para 1024 pasos del convertidor A/D.

2. Seleccin del reloj del convertidor A/D


Se define por TAD al tiempo de conversin por bit. El convertidor A/D requiere un mnimo de 12
TAD para la conversin de los 10 bits, La seal de reloj para la conversin A/D se selecciona por
software mediante los bits ADCS1:ADCS0
2 TOSC
8 TOSC
32 TOSC
Oscilador interno RC (2-6 s)

Para realizar conversiones correctas el reloj del convertidor A/D debe seleccionarse para
asegurar un tiempo mnimo de TAD de 1,6 mS.
La tabla siguiente muestra los tiempos de TAD dependiendo de la seal de reloj seleccionada para
la conversin A/D:
Fuente del Reloj A/D
Operacin
ADCS1:ADCS0
FOSC/2
00
FOSC/8
01
FOSC/32
10
RC (1,2,3)
11

Frecuencia mxima del dispositivo


Mx
1.25 MHz
5 MHz
20 MHz
Nota 1
13

Notas:
1. Si la fuente es el oscilador RC tiene un TAD tpico de 4 s, pero puede variar entre 2 6
s.
2. Cuando la frecuencia del dispositivo es mayor de 1MHz, la fuente del oscilador RC para
la conversin A/D se recomienda solo si se trabaja en el modo Sleep.
3. Para dispositivos de tensin mayores (LC), comprobar las caractersticas elctricas
3. Configuracin de los Pines del Puerto Analgico
Los registros ADCON1 y TRIS controlan la configuracin de los pines del puerto del
convertidor A/D. Cuando se desea configurar una entrada como analgica, debe configurarse
como entrada los bits correspondientes del registro TRIS. Si el bits del TRIS correspondiente se
pone a cero (salida), el valor digital de la salida (VOH o VOL) se convertir.
El funcionamiento del convertidor A/D es independiente de los bits CHS2:CHS0 y del valor del
TRIS.
Notas:
1. Al leer el registro del puerto, cualquier pin configurado como un canal analgico se lee
como un cero (nivel bajo). Los pines configurados como entradas digitales convertirn la
entrada analgica. Los niveles analgicos de una entrada digital no afectarn la exactitud
de la conversin.
2. Los niveles analgicos en cualquier pin de entrada digital (AN7:AN0 ) pueden causar que
el buffer de entrada consuma una corriente superior a la de las especificaciones del
dispositivo
4. Conversiones A/D
Si se pone a cero el bit GO/#DONE durante la conversin, se aborta la conversin actual. El par
de registros no se modificarn parcialmente con los bit que se hayan completado hasta el
momento. Es decir, los registros ADRESH:ADRESL seguirn conteniendo el valor de la ltima
conversin completa (o el ltimo valor que se haya escrito en ADRESH:ADRESL) despus de
abortar la conversin A/D, es requerido el TAD de espera para realizar la prxima adquisicin
comience. Despus de 2 TAD de espera, la adquisicin en cauce se comienza automticamente.
En la siguiente figura se presenta los ciclos TAD del convertidor A/D. Despus de poner el bit
GO a uno, la primera vez el segmento tiene un TCY mnimo y un TAD mximo.

14

Nota: El bit GO/#DONE no debe ponerse a uno en la misma instruccin que se pone en ON el
convertidor A/D.
5. Funcionamiento del Convertidor A/D en el modo Sleep
El mdulo del convertidor A/D puede trabajar durante el modo Sleep. Para ello se debe poner
como fuente de reloj el modo RC (ADCS1.ADCS0 = 1l). Cuando la fuente de reloj es el RC
interno, el mdulo A/D espera un ciclo de mquina antes de empezar la conversin. Esto
permite eliminar el ruido de la conversin digital, Cuando la conversin finaliza el bit
GO/#DONE se pone a cero
y el resultado se carga en, la pareja de registros
ADRESH:ADRESL. Si la interrupcin por final de conversin A/D est habilitada, el
dispositivo se despierta. Si la interrupcin no est habilitada, el mdulo A/D se apagar aunque
el bit ADON (ADCON0 <0>) permanezca a uno.
Cuando el reloj del convertidor A/D es otra fuente distinta del RC interno, la instruccin sleep
aborta la conversin actual y el mdulo A/D se apaga, aunque el bit ADON permanezca a uno.
Apagando el mdulo del convertidor A/D el consumo es ms bajo.
6. Efectos del Reset
Cuando se fuerza un Reset se reestablecen todos los registros, esto obliga a apagar el convertidor
A/D y se aborta cualquier conversin en curso. El valor de los registros ADRESH:ADRESL no
es modificado por un Power-on Reset.
7. Registros asociados al Convertidor A/D
Direccin

Nombre

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

Valor en
POR,BOR

Valor en el
resto de
Reset

0Bh,8Bh
10Bh,18Bh

INTCON

GIE

PEIE

TOIE

INTE

RBIE

TOIF

INTF

RBIF

0000 000x

0000 000u

0Ch

PIR1

PSPIF1

ADIF

RCIF

TXIF

SSPIF

CCP1IF

TMR2IF

TMR1IF

0000 0000

0000 0000

0Bh

PIE1

PSPIE1

ADIE

RCIE

TXIE

SSPIE

CCP1IE

TMR2IE

TMR1IE

0000 0000

0000 0000

1E h

ADDRESH

xxxx xxxx

uuuu uuuu

9E h

ADDRESL

xxxx xxxx

uuuu uuuu

1Fh

ADCON0

ADCS1

0000 00-0

0000 00-0

Parte alta de la conversin A/D


Parte baja de la conversin A/D
ADCS0

CHS2

CHS1

CHS0

GO/#DO
NE

---

---

PCFG3

PCFG2

ADOM

9Fh

ADCON1

ADFM

---

--0- 0000

--0- 0000

85h

TRISA

---

---

Registro de direccionamiento de datos de PORTA

--11 1111

--11 1111

05h

Latch de datos para escritura del PORTA

--0x 0000

--0u 0000

0000 -111

0000 -111

---- -xxx

---- uuuu

PORTA

---

---

89h

(1)

TRISE

IBF

OBF

IBOV

PSPMODE

---

09h

(1)

PORTE

---

---

---

---

---

PCFG1

PCFG0

Bit de direccionamiento del


PORTE
RE2

RE1

RE0

8. Caractersticas del convertidor A/D


Symb.
NR

Caractersticas
Resolucin

Mnimo
--

Tpica
--

Mximo
10-bits

Unid.
Bit

Condiciones
VREF=VDD = 5.12V
Vss VAIN VREF

15

EIL

Error absoluto

--

--

<1

LSb

VREF=VDD = 5.12V
Vss VAIN VREF

EDL

Error Direccional

--

--

<1

LSb

VREF=VDD = 5.12V
Vss VAIN VREF

EGN

Error de ganancia

--

--

<1

LSb

VREF=VDD = 5.12V
Vss VAIN VREF

-VREF

Monotonicidad
Voltaje de referencia
(VREF+- VREF-)

-2.0V

Garantizada
--

-VDD+0.3

-V

Vss VAIN VREF


Absoluta
especificacin.
Asegura la precisin
de 10 bits

VREF+

Voltaje de referencia
AVDD-2.5V
alto
Voltaje de referencia
AVSS 0.3
bajo
Voltaje analgico de
VSS-0.3
entrada
Impedancia
recomendada para la
fuente de voltaje
analgico
Corriente de
-conversin
-Estndar
Extendida
Corriente de entrada VREF
10
(Nota 2)
--

AVDD+0.3V

--

VREF + 0.3

--

VREF + 0.3

220
90

__
__

A
A

---

1000
10

A
A

VAIN
ZAIN

IAD

IREF

Promedio de
consumo de corriente
cuando el A/D est
activado (Nota1)
Durante la
adquisicin VAIN
basada en la
diferencia VHOLD y
VAIN a carga Durante
el ciclo de
conversin.

Nota 1: Cuando el mdulo A/D est apagado (OFF) no consume corriente


Nota 2:

Ejemplo 1
Adquisicin de una seal analgica por poleo.
El siguiente programa realiza la conversin repetitiva de una seal analgica conectada al canal
AN0. El dato obtenido en cada conversin es convertido a 4 cdigos ASCII de los
respectivos 4 dgitos hexadecimales equivalentes para poder desplegarlos en la pantalla de
una PC que los recibir a travs de su puerto serie RS232.
El circuito se muestra a continuacin, donde la seal conectada a la lnea AN0 deber estar en el
rango de VSS a VDD, para fines de prueba puede ser usado un potencimetro (de 1 a 10 K):

16

1. Diagrama de Flujo:
Diagrama de flujo del Programa Principal:

17

INICIO

initrans

d30us

GO1

#DONE=0

NO

SI
W

envbayte

envbayte

W0x0D

envia

W0x0A

envia

El diagrama de flujo de la Subrutina envbyte:

18

El diagrama de flujo de la Subrutina asc:

19

El diagrama de flujo de la Subrutina d30us:


d30us

W0x08
contW

contcont-1

NO

Z=1
SI

FIN

El diagrama de flujo de la Subrutina envia:

20

El diagrama de flujo de la Subrutina initrans, no es necesario porque esta subrutina nicamente sirve
para inicializar el puerto serie USART como transmisor a 9600 Bauds, considerando un cristal de reloj de
4 MHZ.
2. Cdigo en Assembler:
;************************************************************************
;* Este programa realiza la conversin de una seal analgica conectada *
;* al canal AN0 y enva a travs del puerto serie el resultado de la
*
;* conversin en forma de 4 dgitos hexadecimales.
*
;************************************************************************
PROCESSOR
16F877
RADIX
DEC
INCLUDE
"P16F877A.INC"
;Setup of PIC configuration flags
__CONFIG
_XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
;Define variables
CBLOCK 0x20
cont
msnib
lsnib
ENDC
org 0x00
inic

CALL initrans
BSF STATUS,RP0
MOVLW 0x8E
MOVWF ADCON1
BSF TRISA,0
BCF STATUS,RP0
MOVLW 0x01
MOVWF ADCON0

;inicializa el puerto serie para transmisin


;Banco 1
;Configura 1 canal analgico, VREF+=VDD y VREF-=VSS
;y el resultado ajustado a la derecha.
;configura como entrada el canal digital RA0
;Banco 0
;Selecciona el canal AN0, reloj de conversin Fosc/2
;y enciende el convertidor

ciclo

CALL pausa
BSF ADCON0,GO
BTFSC ADCON0,2
GOTO espera
MOVF ADRESH,W
CALL Envbyte
BSF STATUS,RP0

;espera 30 seg a que pase el tiempo de adquisicin


;inicia conversin
;Espera a que termine la conversin #DONE=0

espera

;Carga en W el Byte alto del resultado


;enva el byte por el puerto serie
;banco 1

21

MOVF ADRESL,W
CALL Envbyte
MOVLW 0x0D
CALL envia
MOVLW 0x0A
CALL envia
GOTO ciclo

;Carga en W el
;enva el byte
;carga cdigo de
;lo enva
;carga cdigo de
;lo enva
;repite

Byte bajo del resultado


por el puerto serie
retorno de lnea <CR>
avance de lnea <LF>

;***************************************************************
; Subrutina que enva el byte en W por el puerto serie, separado
; en los cdigos ASCII de sus dos nibbles hexadecimales
;***************************************************************
Envbyte:
MOVWF msnib
;pone byte en msnib
MOVWF lsnib
;y una copia en lsnib
SWAPF msnib,1
;intercambia nibbles en msnib
MOVLW 0x0F
;mscara para limpiar el nibble alto
ANDWF msnib,1
;limpia parte alta de msnib
ANDWF lsnib,1
;limpia parte alta de lsnib
MOVF msnib,W
;carga msnib en W
CALL asc
;obtiene cdigo ASCII equivalente
CALL envia
;lo enva por el puerto serie
MOVF lsnib,W
;carga lsnib en W
CALL asc
;obtiene cdigo ASCII equivalente
CALL envia
;lo enva por el puerto serie
RETURN
asc

ADDWF PCL,1
;Calcula el cdigo a retornar
;Saltando W instrucciones adelante
DT "0123456789ABCDEF"

;************************************************************
; Subrutina de pausa de aprox. 30 seg (con Fosc=14.7456 MHZ)
;************************************************************
pausa
MOVLW 0x23
;Carga dato para 30 seg.
MOVWF cont
;inicializa contador con el dato
rep
DECFSZ cont,1
;Decrementa contador y escapa si cero
GOTO rep
;si no es cero, repite
esc
RETURN
;regresa de esta subrutina
;****************************************************************
;Subrutina para inicializar el puerto serie USART como transmisor
;a 9600 Bauds, considerando un cristal de reloj de 14.7456 MHZ
;****************************************************************
initrans:
BCF STATUS,RP1
BSF STATUS,RP0
;banco 1
BCF TXSTA,BRGH
;pone bit BRGH=0 (velocidad baja)
MOVLW 0x17
;valor para 9600 Bauds (Fosc=14.7456 Mhz)
MOVWF SPBRG
;configura 9600 Bauds
BCF TXSTA,SYNC
;limpia bit SYNC (modo asncrono)
BSF TXSTA,TXEN
;pone bit TXEN=1 (habilita transmisin)
BCF STATUS,RP0
BSF RCSTA,SPEN
RETURN

;regresa al banco 0
;pone bit SPEN=1 (habilita puerto serie)

;***************************************************************
;Subrutina para enviar el byte guardado en W por el puerto serie
;***************************************************************
envia
BSF STATUS,RP0
;banco 1
esp
BTFSS TXSTA,TRMT;checa si el buffer de transmisin
GOTO esp
;si est ocupado espera
BCF STATUS,RP0
;regresa al banco 0
MOVWF TXREG
;enva dato guardado en W
RETURN
END

22

Anlisis del cdigo


En primer lugar configuramos el registro ADCON1 y ADCON0.
Registro ADCON1
ADCON1 = 0x8E
ADFM
1
Bit 7

---

---

---

PCFG3
1

PCFG2
1

PCFG1
1

PCFG0
0
Bit 0

ADFM=1, resultado justificado a la derecha


Configura un canal analgico, VREF+=VDD y VREF-=VSS
PCFG3=1
PCFG2=1
PCFG1=1
PCFG0=0
Registro ADCON0
ADCON0 = 0x41
ADCS1
0
Bit 7

ADCS0
1

CHS2
0

CHS1
0

CHS0
0

GO/#DONE
0

---

ADON
1
Bit 0

Selecciona el reloj a una frecuencia Fosc/8 (el TAD depende de la seal de reloj seleccionada
para la conversin A/D, en este caso la Fuente del Reloj A/D es 4 MHz y la Frecuencia mxima
del dispositivo para la frecuencia de Fosc/8 es 5 MHz)
ADCS1=0
ADCS0=1
Selecciona el canal analgico para convertir AN0.
CHS2=0
CHS1=0
CHS0=0
GO/#DONE=0, apaga la conversin
ADON=1, enciende el convertidor
Programa principal. Este programa luego de la configuracin de los registros ADCON0 y ADCON1,
espera 30 seg a que pase el tiempo de adquisicin para iniciar la conversin GO=1. Espera a que
termine la conversin para Carga en W el Byte alto del resultado y lo enva el byte por el puerto serie; lo
mismo para el Byte bajo, luego carga y enva: el cdigo de retorno de lnea <CR> y el cdigo de avance
de lnea <LF>. Repitiendo el ciclo desde el tiempo de adquisicin de 30 seg.
Subrutinas. Son tres: Envbyte, pausa y initrans:
23

Envbyte, subrutina que enva el byte en W por el puerto serie, separado en los cdigos ASCII de sus dos
nibbles hexadecimales.
pausa, subrutina de pausa de aprox. 30 seg (con Fosc=4 MHZ).
initrans, subrutina para inicializar el puerto serie USART como transmisor a 9600 Bauds, considerando
un cristal de reloj de 4 MHZ.
Ejercicio
Realizar el mismo ejercicio anterior, con la condicin que el dato convertido de anlogo a digital, sea
transmitido a la PC solo cuando cambia de valor.

24

Вам также может понравиться