Anda di halaman 1dari 18

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 son: se tiene que muestrear y cuantificar. El muestreo implica que s e t i e n e que coger una muestra de la seal cada T segundos, 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:

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.

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

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), 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 estamos cometiendo. Potencia: < error2 >= 2/12 Si tenemos una tarjeta de sonido, y trabaja a 16 bits por muestra: Cometer un error de: (1/215)2/12 = 1/(230 * 12) 3. Tcnicas de cuantificacin Como informacin complementaria, decir que existen diferentes tipos de cuantificacin, cada uno de los cuales se amoldara a los datos que se est enviando. 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.
4

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

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

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 lo que el mximo voltaje en VREF- ser de 3V. Siempre se ha de cumplir que . 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.4. 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).
7

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.5. 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 para operacin en modo SLEEP, ya que este modo desconecta la frecuencia del 8

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 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 No implementado: Se lee como 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.

bit 2:

bit 1: bit 0:

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 con la siguiente tabla: 9

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

5.6. Los Registros de Resultados


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 estos registros es de 8 bits, por lo tanto, juntos pueden guardar hasta 16 bits. Sin embargo, como el
10

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
VREF+-VREFVREF+ VREFVoltaje analgico VAIN Impedancia de la fuente de seal externa ZAIN Corriente promedio Estndar consumida por el convertidor Extendido IAD

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

tpico
220A 90A

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

11

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

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
12

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.

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
13

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 0000 000x 0000 0000 0000 0000 xxxx xxxx xxxx xxxx ADOM PCFG1 PCFG0 0000 00-0 --0- 0000 Valor en el resto de Reset 0000 000u 0000 0000 0000 0000 uuuu uuuu uuuu uuuu 0000 00-0 --0- 0000

0Bh,8Bh 10Bh,18Bh 0Ch 0Bh 1E h 9E h 1Fh 9Fh

INTCON PIR1 PIE1 ADDRESH ADDRESL ADCON0 ADCON1

GIE PSPIF1 PSPIE1

PEIE ADIF ADIE

TOIE RCIF RCIE

INTE TXIF TXIE

RBIE SSPIF SSPIE

TOIF CCP1IF CCP1IE

INTF TMR2IF TMR2IE

RBIF TMR1IF TMR1IE

Parte alta de la conversin A/D Parte baja de la conversin A/D ADCS1 ADFM ADCS0 --CHS2 --CHS1 --CHS0 PCFG3 GO/#DO NE PCFG2

85h 05h 89h 09h


(1)

TRISA PORTA TRISE PORTE

----IBF ---

----OBF ---

Registro de direccionamiento de datos de PORTA Latch de datos para escritura del PORTA IBOV --PSPMODE ------Bit de direccionamiento del PORTE RE2 RE1 RE0

--11 1111 --0x 0000 0000 -111 ---- -xxx

--11 1111 --0u 0000 0000 -111 ---- uuuu

(1)

8. Caractersticas del convertidor A/D


Symb. NR EIL EDL EGN -VREF Caractersticas Resolucin Error absoluto Error Direccional Error de ganancia Monotonicidad Voltaje de referencia (VREF+- VREF-) Mnimo -----2.0V Tpica ----Garantizada -Mximo 10-bits < 1 < 1 < 1 -VDD+0.3 Unid. Bit LSb LSb LSb -V Condiciones VREF=VDD = 5.12V Vss VAIN VREF VREF=VDD = 5.12V Vss VAIN VREF VREF=VDD = 5.12V Vss VAIN VREF VREF=VDD = 5.12V Vss VAIN VREF Vss VAIN VREF Absoluta especificacin. Asegura la precisin de 10 bits

VREF+

Voltaje de referencia alto

AVDD-2.5V

AVDD+0.3V

14

VAIN ZAIN

IAD

IREF

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) --

---

VREF + 0.3 VREF + 0.3

V V

220 90

__ __

A A

---

1000 10

A A

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

;************************************************************************ ;* 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. Reloj de 4 MHz. * ;************************************************************************ ;

15

Include "p16f877.inc" cont EQU 0x20 msnib EQU 0x22 lsnib EQU 0x23 org 0x0000 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 ;espera 30 seg a que pase el tiempo de adquisicin ;inicia conversin ;Espera a que termine la conversin #DONE=0 ;Carga en W el Byte alto del resultado ;enva el byte por el puerto serie ;banco 1 ;Carga en W el Byte bajo del resultado ;enva el byte por el puerto serie ;carga cdigo de retorno de lnea <CR> ;lo enva ;carga cdigo de avance de lnea <LF> ;lo enva ;repite

ciclo CALL d30us BSF ADCON0,GO espera BTFSC ADCON0,2 GOTO espera MOVF ADRESH,W CALL Envbyte BSF STATUS,RP0 MOVF ADRESL,W CALL Envbyte MOVLW 0x0D CALL envia MOVLW 0x0A CALL envia GOTO ciclo

;*************************************************************** ; 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 d30us de aprox. 30 seg (con Fosc=4MHZ) ;************************************************************ d30us MOVLW 0x08 ;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 4 MHZ ;**************************************************************** initrans:

16

BCF STATUS,RP1 BSF STATUS,RP0 BSF TXSTA,BRGH MOVLW 0x19 MOVWF SPBRG BCF TXSTA,SYNC BSF TXSTA,TXEN BCF STATUS,RP0 BSF RCSTA,SPEN RETURN

;banco 1 ;pone bit BRGH=1 (velocidad alta) ;valor para 9600 Bauds (Fosc=4 Mhz) ;configura 9600 Bauds ;limpia bit SYNC (modo asncrono) ;pone bit TXEN=1 (habilita transmisin) ;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

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

Selecciona el reloj a una frecuencia Fosc/2 ADCS1=0 ADCS0=0


17

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: 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=14.7456 MHZ). initrans, subrutina para inicializar el puerto serie USART como transmisor a 9600 Bauds, considerando un cristal de reloj de 4 MHZ.

18

Anda mungkin juga menyukai