8/14/2019 Curso PIC16F87X 8
1/8
MODULO CONVERTIDORANALGICO/DIGITAL (A/D)
La familia de microcontroladores
PIC16F87X, disponen de un mdu-lo de conversin Analgico/Digitalque tiene de cinco entradas para losdispositivos de 28 pines y ocho paralos otros dispositivos de la familia.
A travs de la entrada analgicase aplica la seal analgica a un con-densador de captura y retencin
(sample and hold) que despus seintroduce en el convertidor. El con-vertidor A/D que es de aproximacio-nes sucesiva da como resultado unapalabra de 10 bits.
El mdulo del convertidor A/Dpuede seleccionar como tensin dereferencia la interna, es decir entre
VDD y masa o bien una externa quese introduzca entre RA3/AN3/VREF+ y RA2/AN2/VREF-. Cuan-do se selecciona la tensin de refe-rencia externa, hay que tener en
CURSO DE
MICROCONTROLADORESPIC16F87X (...y VIII)
CURSO DE
MICROCONTROLADORESPIC16F87X (...y VIII)Fernando Remiro DomnguezProfesor de Sistemas Electrnicos
IES. Juan de la Ciervawww.terra.es/personal/fremiro
MICROCON
TROLADORES
56RESISTOR bit 7-6: ADCS1:ADCS0: bit de seleccin de reloj para el Convertidor A/D
00 Fosc/201 Fosc /8
10 Fosc/3211 FRC (Procede del
oscilador RC interno)
bit 5-3: CH2:CH0: bit deseleccin del canalanalgico
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 canal110 = Canal 6, (RA6/AN6); los PIC16F87X de 28 pines no tienen este canal111 = 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/DSi ADON=1
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 ADRESH: ADRESL
bit 1: No implementado: Se lee como "0"
bit 0: ADON: bit de puesta en marcha1 = El convertidor A/D est operativo0 = El convertidor A/D est apagado y no consume corriente.
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
Registro ADCON0 (direccin 1Fh)
56-63 MICROCONTROLADORES 28/10/04 14:20 Pgina 56
8/14/2019 Curso PIC16F87X 8
2/8
cuenta que existen algunas limitacio-nes; la mxima tensin aplicada a lapatilla VREF+ (RA3/AN3) podr serde VDD+0,3V y la mnima de VDD-2,5V. En cuanto a la tensin VREF-(RA2/AN2) la mnima tensin serVSS-0,3V y la mxima VREF+ - 2V,as por ejemplo, si la tensin de ali-mentacin es de 5V, la tensin en
RA3/AN3 no podr exceder de 5V.Por lo que la mxima tensin en laVREF- ser de 3V. Siempre se ha decumplir que VREF+ - VREF - 2V.
El convertidor A/D tiene comocaracterstica especial el ser capaz deseguir trabajando mientras el dispo-sitivo est en el modo SEEP. Paraello el oscilador interno RC debeconectarse al conversor A/D.
El mdulo conversor A/D tieneasociados cuatro registros:
qADRESH : Parte alta del resultadode la conversin
qADRESL : Parte baja del resultadode la conversin
qADCON0: Registro de Control 0qADCON1, Registro de Control 1
En esta pgina se muestra elregistro ADCON0 de configuracindel funcionamiento del convertidor
y en la pgina anterior el ADCON1que es el registro de configuracinde los pines del puerto. Los pines delPORTA pueden configurarse comoentradas analgicas (RA, tambinpuede ser entrada de tensin de refe-rencia) o como E/S digital.
Los registros ADRESH: ADRESLcontienen los 10 bits resultado dela conversin A/D. Cuando secompleta la conversin A/D, el resul-tado se guarda en los registros
ADRESH:ADRESL y se pone a ceroel bit GO/DONE y el flag de fin deconversin ADIF (PIR1) se pone a1. El diagrama de bloques del mduloconversar A/D es el de la Figura 1.
Despus de que el conversor A/Dse ha configurado como se desea uti-lizar, la seleccin del canal debe rea-lizarse antes de hacer la adquisicin.
Los canales de entrada analgicadeben tener los correspondientes bitsdel registro TRIS seleccionadoscomo entradas.
Para realizar una conversin A/Ddeben seguirse los siguientes pasos:1. Configurar el mdulo conversor A/Dq Configurar los pines que actan
como entradas analgicas, lasseales que harn de tensin dereferencia la que trabajarn comoE/S digitales (ADDCON1).
Tabla1
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
Registro ADCON1 (direccin 9Fh)
MIC
ROCON
TROLAD
ORES
57RESISTOR
PCFG3: AN7(1) AN6(1) AN5(1) AN4 AN3 AN2 AN1 AN0 VREF+ VREF- CHAN/
PCFG0 RA5 RA3 RA2 RA1 RA0V REFS
RE2 RE1 RE0
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/21110 D D D D D D D A VDD VSS 1/0
1111 D D D D VREF+ VREF- D A RA3 RA2 _
A= Entrada Analgica; D = E/S Digital; (1) Estos canales no estn disponibles para los dispositivos de
bit 7: ADFM: Selecciona el formato del resultado de la conversin A/D (ver figura 5)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 mayorpeso 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 paraconfigurar las patillas como E/S digital o como entrada analgica de acuerdo con la siguiente tabla:
56-63 MICROCONTROLADORES 28/10/04 14:20 Pgina 57
8/14/2019 Curso PIC16F87X 8
3/8
q Seleccionar el canal de entrada.A/D (ADCON0).
q Seleccionar la fuente de la seal dereloj para la conversin A/D(ADCON0).
qActivar el mdulo de conversinA/D (ADCON0)
2. Activar si, se desea, la interrup-cin. del mdulo conversor A/D
q Poner a cero el bit ADIFq Poner a uno el bit ADIEq Poner a uno los bits habilitadores
GIE y PEIE3. Esperar el tiempo requerido para
la adquisicin4. Inicio de la conversinq Poner a 1 el bit GO/#DONE
(ADCON0)5. Tiempo de espera para terminar la con-
versin A/D que puede detectarse por:q Exploracin de bit GO/#DONE ,
que al finalizar la conversin tomael valor "0"
q Esperar que se produzca una inte-rrupcin si se ha programado alfinalizar la conversin.
Figura 2.- Diagrama de flujos que deber seguir el programa para realizar una conversin A/D
Figura 1.- Diagrama de bloques del convertidor A/D
RE2/AN7(*)
PCFG3:PCFG0
PCFG3:PCFG0
CHS2:CHS0
RE1/AN6(*)RE0/AN4(*)
RA5/AN4RA3/AN3/REFRA2/AN2/REF-
RA1/AN1
RA0/AN0
VAIN
Tensin de entrada
VREF+
VDD
VSS
CONVERTIDORA/D
111
110
101
100
011
010
001
000
(*) No exisnten en los dispositivos de 28 pines
MICROCON
TROLADORES
58RESISTOR
56-63 MICROCONTROLADORES 28/10/04 14:20 Pgina 58
8/14/2019 Curso PIC16F87X 8
4/8
qAunque no se autorice la interrup-cin el flag. ADIF se pone a " 1 "al finalizar la interrupcin.
6. Leer el par de registrosADRESH:ADRESL donde seencuentran los 10 bits que resultan
de la conversin y poner a cero elflag ADIF.
7. Para una nueva conversin volvera los pasos 1 y 2 , El tiempo deconversin por bit est definidopor TAD, se exige un mnimo de2*TAD para realizar una nuevaconversin.El diagrama de flujos que deber
seguir el programa para realizar unaconversin A/D puede ser la que semuestra en la Figura 2
Requisitos para laAdquisicin A/D
Para que el convertidor A/D pue-da tener la exactitud especificada,debe permitirse la carga del conden-sador (CHOLD) que mantiene la
entrada a un nivel de tensin. Elmodelo de una entrada analgica semuestra en la figura 3.
De la impedancia de la fuente(RS) se toma una muestra a travsdel interruptor (RSS) la impedanciaafecta directamente al tiempo de car-ga del condensador CHOLD. Laimpedancia recomendada para lasfuentes analgicas es de 10 k.Cuando la impedancia disminuyetambin disminuye el tiempo de
adquisicin. Antes de realizar, laconversin debe seleccionarse elcanal de la entrada analgica.
Para calcular el tiempo mnimode adquisicin se puede utilizar lasiguiente ecuacin, que asume un
error de _ LSB para 1024 pasos delconvertidor A/D. TACQ=AmplisierSettling Timer + Holting CapacitorChargine Time + Temperature Coef-ficient = TAMP + TC + TCOFF 19.72 S
Seleccin del relojdel convertidor A/D
Se define por TAD al tiempo deconversin por bit. El convertidorA/D requiere un mnimo de 12 TAD
MICROCON
TROLADORES
59RESISTOR
Figura 3.- Estructura de un pin de un canal Analgico
VA
VDD
Rs
Cpin5pF
VT=0.6V
VT=0.6V
SS
RssRIC
8/14/2019 Curso PIC16F87X 8
5/8
para la conversin de los 10 bits. Laseal de reloj para la conversin A/Dse selecciona por software mediantelos bits ADCS1:ADCS0q 2 TOSCq 8 TOSCq 32 TOSCq Oscilador interno RC
(2-6 s)
Para realizar conversionescorrectas el reloj del convertidorA/D debe seleccionarse paraasegurar un tiempo mnimo de TADde 1,6 mS.
La tabla 2 muestra los tiempos deTAD dependiendo de la seal dereloj seleccionada para la conversinA/D
Configuracin de los Pinesdel Puerto Analgico
Los registros ADCON1 y TRI-SA controlan la configuracin de lospines del puerto del convertidor A/D.Cuando se desea configurar unaentrada como analgica, debe confi-gurarse como entrada los bits corres-pondientes del registro TRISA. Si
MICROCON
TROLADORES
60RESISTOR
Figura 4.- Ciclos TAD del convertidor A/D
Figura 5.- Justificacin de los resultados de la conversin A/D
56-63 MICROCONTROLADORES 28/10/04 14:20 Pgina 60
8/14/2019 Curso PIC16F87X 8
6/8
los bits del TRISA correspondientesse ponen a cero (salida), el valor digi-tal de la salida (VOH o VOL) se conver-tir.
El funcionamiento del convertidorA/D es independiente de los bitsCHS2:CHS0 y del valor delTRISA:
Notas:1. Al leer el registro del puerto, cual-
quier pin configurado como uncanal analgico se lee como uncero (nivel bajo). Los pines confi-gurados como entradas digitalesconvertirn la entrada analgica.Los niveles analgicos de unaentrada digital no afectarn laexactitud de la conversin.
2. Los niveles analgicos en cual-quier pin de entrada digital(AN7:AN0 ) pueden causar que elbuffer de entrada consuma unacorriente superior a la de las espe-cificaciones del dispositivo.
Conversiones A/DSi se pone a cero el bit
GO/#DONE durante la conversin,se aborta la conversin actual.
El par de registros no se modifi-carn parcialmente con los bit que sehayan completado hasta elmomento. Es decir, los registrosADRESH: ADRESL seguirn con-teniendo el valor de la ltimaconversin completa (o el ltimovalor que se haya escrito en
ADRESH:ADRESL) despus deabortar la conversin A/D, esrequerido el TAD de espera pararealizar la prxima adquisicincomience. Despus de 2 TAD deespera, la adquisicin en cauce secomienza automticamente.
En la figura 4 se aprecia comodespus de poner el bit GO a uno, laprimera vez el segmento tiene un TCYmnimo y un TAD mximo.
Nota:El bit GO/#DONE no debe
ponerse a uno en la mismainstruccin que se pone en ON elconvertidor A/D.
Registro de resultados de laconversin A/D
En el par de registrosADRESH:ADRESL se carga con elresultado de 10 bits de la conversinA/D. Este par de registros se extien-den hasta 16 bits. El mdulo A/D tie-ne la posibilidad de justificar el resul-
tado de 10 bits de la conversin, den-tro de los 16 bits de la pareja deregistros. La seleccin del formatode justificacin a la izquierda o dere-cha se realiza con el bit ADFM(ADCON1 ) . Los bits restantes (a los 10 de la conversin) se llenancon ceros. Estos dos registros cuandoel convertidor A/D est en OFF y nose utiliza, pueden utilizarse como dosregistros de 8 bits de propsitogeneral.
Funcionamiento delConvertidor A/D en el modoSleep
El mdulo del convertidor A/Dpuede trabajar durante el modo Sleep.Para ello se debe poner como fuentede reloj el modo RC(ADCS1:ADCS0 = 11). Cuando lafuente de reloj es el oscilador RCinterno, el mdulo A/D espera unciclo de mquina antes de empezar la
conversin. Esto permite eliminar elruido de la conversin digital, cuandola conversin finaliza el bitGO/#DONE se pone a cero y elresultado se carga en, la pareja deregistros ADRESH:ADRESL. Si lainterrupcin por final de conversinA/D est habilitada, el dispositivo sedespierta. Si la interrupcin no esthabilitada, el mdulo A/D se apagaraunque el bit ADON (ADCON0) permanezca a uno. Cuando elreloj del convertidor A/D es otrafuente distinta del oscilador RC inter-no, la instruccin sleep aborta la con-
versin actual y el mdulo A/D seapaga, aunque el bit ADON perma-nezca a uno. Desconectando el mdu-lo del convertidor A/D el consumo esms bajo.
Efectos del ResetCuando se fuerza un Reset se
reestablecen todos los registros, estoobliga a apagar el convertidor A/D yse aborta cualquier conversinen curso. El valor de los
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 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
8Ch 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/#DONE ADON 0000 00-0 0000 00-0
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
89h (1) TRISE IBF OBF IBOV PSPMODE --- Bit de direccionamiento 0000 -111 0000 -111
del PORTE
09h (1) PORTE --- --- --- --- --- RE2 RE1 RE0 ---- -xxx ---- uuuu
MICROCON
TROLADORES
61RESISTOR
56-63 MICROCONTROLADORES 28/10/04 14:20 Pgina 61
8/14/2019 Curso PIC16F87X 8
7/8
Figura 6.- Circuito para comprobar el funcionamiento del programa AD1_LEDS.asm
Symb. Caractersticas Mnimo Tpica Mximo Unid. Condiciones
NR Resolucin -- -- 10-bits Bit VREF=VDD = 5.12V
VssVAIN VREFEIL Error absoluto -- --
8/14/2019 Curso PIC16F87X 8
8/8
;***********************************************************************************; Programa AD1_LEDS.asm Fecha : 6- Octubre-2003;Este programa realiza la conversin de la tensin presente en el canal RA3/AN3. Esta;se puede variar con el potencimetro conecatodo a AN3 . Lo 8 bits menos significativos;de la conversin se visualiza sobre los 8 LEDS conectados al PORTB; Revisin 0.0 Programa para PIC16F87X; Velocidad del Reloj: 4 MHz Reloj Instruccin: 1 MHz = 1 uS; Perro Guardin :habilitado Tipo de Reloj : XT; Proteccin del cdigo : OFF;***********************************************************************************
List p=16F876 ;Tipo de procesadorinclude "P16F876.INC" ;Definiciones de registros internos
; org 0x00 ;Vector de Reset; goto Inicio
org 0x05 ;Salva el vector de interrupcin
;Visualiza: Esta rutina coge los 8 bits menos significativos resultantes de la conversin;y los visualiza sobre el los LEDS conectados al PORTB
Visualiza: bsf STATUS,RP0 ;Selecciona pgina 1movf ADRESL,wbcf STATUS,RP0 ;Selecciona pgina 0movwf PORTBreturn
;***********************************************************************************; Programa principal;***********************************************************************************INICIO clrf PORTB
bsf STATUS,RP0 ;Selecciona banco 1clrf TRISB ;Puerta B se configura como salidamovlw b'00001000' ;Configura RA3 com entradamovwf TRISAbcf STATUS,RP0 ;Selecciona banco 0
;Se activa el ADC y se selecciona el canal RA3/AN3. Frecuencia de trabajo Fosc/32movlw b'10011001'movwf ADCON0 ;ADC en On, seleciona canal AN3
BUCLE bsf STATUS,RP0 ;Selecciona pgina 1movlw b'10000000'movwf ADCON1 ;PORTA entradas analgicas y justificacin a la izquierdabcf STATUS,RP0 ;Selecciona pgina 0bcf PIR1,ADIF ;Restaura el flag del conversor AD
nopbsf ADCON0,GO ;Inicia la conversin
ADC_Wait btfss PIR1,ADIF ;Fin de conversin ??goto ADC_Wait ;Todava nocall Visualiza ;Visualiza el resultado de la conversingoto BUCLE
;***********************************************************************************ORG 0x1F00bcf PCLATH,4bcf PCLATH,3 ;Selecciona la pgina 0goto INICIO
;***********************************************************************************end ;Fin del programa fuente
MIC
ROCON
TROLADORES
63RESISTOR
registros ADRESH:ADRESL no esmodificado por un Power-on Reset.
EJEMPLO DE MANEJO DELCONVERTIDOR A/D
El programa AD1_LEDS.asm,presenta en el PORTB lo 8 bitsmenos significativos del resultado dela conversin A/D de la entrada AN3
que en el esquema del circuito deaplicacin que hemos utilizado y quese muestra en la figura 6, est conec-tada a una resistencia variable queacta como divisor de tensin. Comoviene siendo habitual en el programase ha marcado en color azul las lneasde cdigo que hemos eliminado parautilizar el programa bootloader para
poder realizar la carga del mismo yen color verde, las lneas que hemosaadido, de tal manera que eliminadolas lneas de color verde y habilitandolas que estn en azul el programapueda grabarse directamente en unPIC16F876 utilizando un programa-dor universal, un T-20 o cualquierotro.
56-63 MICROCONTROLADORES 28/10/04 14:20 Pgina 63
Top Related