Está en la página 1de 24

El Convertidor Analgico Digital

(A/D)

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

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

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

7
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 se debern seguir los


siguientes pasos:

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 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0


ADCS1 ADCS0 CHS2 CHS1 CHS0 G0/#DONE --- ADON
Bit 7 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 U-0 R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0


ADFM --- --- --- PCFG3 PCFG2 PCFG1 PCFG0
Bit 7 Bit 0
bit 7: 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+ VREF-
PCFG0 /RE2 /RE1 /RE0 /RA5 /RA3 /RA2 /RA1 /RA0V REFS
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+ VREF- A 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+ VREF- A A RA3 RA2 4/2
1100 D D D A VREF+ VREF- A A RA3 RA2 3/2
1101 D D D D VREF+ VREF- A A RA3 RA2 2/2
1110 D D D D D D D A VDD VSS 1/0
1111 D D D D VREF+ VREF- D 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 el
nmero de canales analgicos usados como entradas de voltaje de referencia.

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+-VREF- 2v - VDD+0.3v
VREF+ VDD-2.5v - VDD+0.3v
VREF- VSS-0.3v - VREF+-2v
Voltaje analgico VAIN VSS-0.3v - VREF++0.3v
Impedancia de la fuente de seal externa ZAIN - - -10 K

Corriente promedio Estndar - 220A -
consumida por el convertidor Extendido - 90A -
IAD

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 Frecuencia mxima del dispositivo


Operacin ADCS1:ADCS0 Mx
FOSC/2 00 1.25 MHz
FOSC/8 01 5 MHz
FOSC/32 10 20 MHz
RC (1,2,3) 11 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 Valor en el
POR,BOR resto de
Reset
0Bh,8Bh INTCON GIE PEIE TOIE INTE RBIE TOIF INTF RBIF 0000 000x 0000 000u
10Bh,18Bh
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 Parte alta de la conversin A/D xxxx xxxx uuuu uuuu
9E h ADDRESL Parte baja de la conversin A/D xxxx xxxx uuuu uuuu
1Fh ADCON0 ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/#DO ADOM 0000 00-0 0000 00-0
NE
9Fh ADCON1 ADFM --- --- --- PCFG3 PCFG2 PCFG1 PCFG0 --0- 0000 --0- 0000
85h TRISA --- --- Registro de direccionamiento de datos de PORTA --11 1111 --11 1111
05h PORTA --- --- Latch de datos para escritura del PORTA --0x 0000 --0u 0000
(1)
89h TRISE IBF OBF IBOV PSPMODE --- Bit de direccionamiento del 0000 -111 0000 -111
PORTE
(1)
09h PORTE --- --- --- --- --- RE2 RE1 RE0 ---- -xxx ---- uuuu

8. Caractersticas del convertidor A/D

Symb. Caractersticas Mnimo Tpica Mximo Unid. Condiciones


NR Resolucin -- -- 10-bits Bit 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
-- Monotonicidad -- Garantizada -- -- Vss VAIN VREF
VREF Voltaje de referencia 2.0V -- VDD+0.3 V Absoluta
(VREF+- VREF-) especificacin.
Asegura la precisin
de 10 bits
VREF+ Voltaje de referencia AVDD-2.5V AVDD+0.3V V
alto
Voltaje de referencia AVSS 0.3 -- VREF + 0.3 V
bajo
VAIN Voltaje analgico de VSS-0.3 -- VREF + 0.3 V
entrada
ZAIN Impedancia
recomendada para la
fuente de voltaje
analgico
IAD Corriente de -- 220 __ A Promedio de
conversin -- 90 __ A consumo de corriente
Estndar cuando el A/D est
Extendida activado (Nota1)
IREF Corriente de entrada VREF 10 -- 1000 A Durante la
(Nota 2) -- -- 10 A 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

NO
#DONE=0

SI

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 ;inicializa el puerto serie para transmisin


BSF STATUS,RP0 ;Banco 1
MOVLW 0x8E ;Configura 1 canal analgico, VREF+=VDD y VREF-=VSS
MOVWF ADCON1 ;y el resultado ajustado a la derecha.
BSF TRISA,0 ;configura como entrada el canal digital RA0
BCF STATUS,RP0 ;Banco 0
MOVLW 0x01 ;Selecciona el canal AN0, reloj de conversin Fosc/2
MOVWF ADCON0 ;y enciende el convertidor

ciclo CALL pausa ;espera 30 seg a que pase el tiempo de adquisicin


BSF ADCON0,GO ;inicia conversin
espera BTFSC ADCON0,2 ;Espera a que termine la conversin #DONE=0
GOTO espera
MOVF ADRESH,W ;Carga en W el Byte alto del resultado
CALL Envbyte ;enva el byte por el puerto serie
BSF STATUS,RP0 ;banco 1

21
MOVF ADRESL,W ;Carga en W el Byte bajo del resultado
CALL Envbyte ;enva el byte por el puerto serie
MOVLW 0x0D ;carga cdigo de retorno de lnea <CR>
CALL envia ;lo enva
MOVLW 0x0A ;carga cdigo de avance de lnea <LF>
CALL envia ;lo enva
GOTO ciclo ;repite

;***************************************************************
; 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 ;regresa al banco 0


BSF RCSTA,SPEN ;pone bit SPEN=1 (habilita puerto serie)
RETURN

;***************************************************************
;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 --- --- --- PCFG3 PCFG2 PCFG1 PCFG0


1 1 1 1 0
Bit 7 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 ADCS0 CHS2 CHS1 CHS0 GO/#DONE --- ADON


0 1 0 0 0 0 1
Bit 7 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

También podría gustarte