En la Figura 7.3 se ofrece un esquema del conexionado del conversor A/D con las patitas que soportan los canales de entrada y las de la tensión de referencia.
El bit de más peso (ADFM) del registro ADCON1 selecciona el formato del resultado de la con- versión. Si vale 1, el resultado está justificado en el registro ADRESH, que tiene sus 6 bits de más peso a 0; mientras que si vale 0 la justificación se realiza sobre el registro ADRESL, que tiene sus 6 bits de menos peso a 0. Esto significa que los 16 bits que forman la concatenación de ADRESH:ADRESL unas veces tiene a 0 los 6 bits de más peso y otras los 6 bits de menos peso (ali- neación del resultado a la derecha o a la izquierda).
VSS
CONVERTIDOR A/D
RA0/AN0 RA1/AN1 RA2/AN2/VREF- RA3/AN3/V +REF
RA5/AN4
V -REF
RE1/AN6 RE2/AN7 CHS2-0
PCFG3-0 4 PCFG3-0
4
VDD
RE1/AN5
V +REF
Figura 7.3. Estructura del conexionado del conversor A/D.
En la Figura 7.4 se muestran las dos formas posibles del alineamiento del resultado sobre la pa- reja de registros ADRESH:ADRESL.
Los restantes cuatro bits (PCFG3-0) de ADCON1 se usan para configurar las patitas de los ca- nales de entrada al conversor como analógicas o como E/S digitales, de acuerdo con la tabla de la Figura 7.5.
Figura 7.4. Alineamiento del resultado digital de 10 bits de la conversión a la izquierda y a la derecha.
Figura 7.5. Tabla que determina las patitas del PIC que actúan como entradas analógicas o como E/S digitales, según el valor de los 4 bits de ADCON1<PCFG3-0>.
PCFG3-0 AN7/ AN6/ AN5/ AN4/ AN3/ AN2/ AN1/ AN0/
VREF+ VREF– CANAL/
RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0 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 VDD 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 continuación, se indican los pasos que hay que efectuar para realizar una conversión A/D:
Si se elige como reloj para la conversión al oscilador RC interno del conversor A/D, éste puede seguir funcionando cuando se introduce el microcontrolador al modo de Reposo o SLEEP. En los restantes modos, se aborta la conversión y se desactiva el conversor A/D. En la Figura 7.6 se ofre- ce el organigrama sobre la operatividad del conversor A/D.
Se propone un programa general para el manejo del conversor A/D. En él se carga con 0 al re- gistro ADCON1, con lo que todas las patitas correspondientes a los canales de entrada del C A/D se configuran como entradas analógicas (PCFG3-0 = 0000) y se toma como VREF+= VDDy como VREF-= VSS. Al ser el bit de más peso ADFM = 0, el resultado depositado en ADRESH:ADRESL queda justificado a la izquierda (los 6 bits de menos peso de ADRESL son 0). Se permite la inte- rrupción del C A/D (bsf PIE1, ADIE). Como reloj para la conversión se elige al oscilador interno RC como consecuencia de cargar a ADCON0 con el valor 11000001 y se elige como canal de en- trada a la patita RA0/AN0.
1.o Configurar el módulo C A/D
• Configurar las patitas que actuarán como entradas analógicas, las que trabajan como E/S di- gitales y las usadas para la tensión de referencia (ADCON1).
• Seleccionar el reloj de la conversión (ADCON0).
• Seleccionar el canal de entrada A/D (ADCON0).
• Activar el módulo A/D (ADCON0).
2.o Activar, si se desea, la interrupción escribiendo sobre PIE1 y PIR1
• Borrar el seủalizador ADIF.
• Poner a 1 el bit ADIE.
• Poner a 1 los bits habilitadores GIE y PEIE.
3.o Tiempo de espera para que transcurra el tiempo de adquisición 4.o Inicio de la conversión
• Poner a 1 el bit GO/DONE# (ADCON0).
5.o Tiempo de espera para completar la conversión A/D que puede detectarse:
a) Por la exploración del bit GO/DONE#, que al completarse la conversión pasa a valer 0.
b) Esperando a que se produzca la interrupción si se ha programado, al finalizar la conver- sión.
c) Aunque no se permita interrupciún, el seủalizador ADIF se pondrỏ a 1 al finalizar la conver- sión.
6.o Leer el resultado en los 10 bits válidos de ADRESH:L y borrar el flag ADIF
7.o Para una nueva conversión regresar al paso 1.oo al 2.oEl tiempo de conversión por bit está defi- nido por TAD. Se exige esperar un mínimo de 2•TADpara reiniciar una nueva conversión.
bsf STATUS,RP0 ; Selección del Banco 1
bcf STATUS,RP1
clrf ADCON1 ; Patitas de entrada analógicas
bsf PIE1,ADIE ; Permite la interrupción del C A/D
bcf STATUS,RP0 ; Banco 0
movlw 11000001 ; Oscilador RC interno, Canal 0,
movwf ADCON0 ; Activación del conversor
bcf PIR1,ADIF ; Borra el seủalizador A/D
bsf INTCON,PEIE ; Permiso de interrupciones a los
; periféricos
bsf INTCON,GIE ; Permiso global de interrupciones
; Tiempo de espera suficiente para la toma de muestra en el Canal 0
bsf ADCON0,GO ; Inicio de la conversión
; Al terminar la conversión ADIF = 1 y el bit GO/DONE# = 0
¿DESPERTAR DEL REPOSO?
NO
SÍ CONFIGURACIÓN
CONVERSOR A/D
¿ADON = 0?
¿DISPOSITIVO EN REPOSO?
¿GO = 0?
ADQUISICIÓN CANAL SELECCIONADO
¿RELOJ A/D = RC? INICIO A/D RETARDO 1 CICLO
INSTRUCCIÓN
¿INSTRUCCIÓN SLEEP?
QUEDA EN SLEEP HASTA POWER-DOWN
DEL A/D FIN CONVERSIÓN
GO = 0 ADIF = 1
ESPERA 2 T.AD
ESPERA 2 T.AD
FIN CONVERSIÓN GO = 0 ADIF = 1
ESPERA 2 T.AD
FIN CONVERSIÓN GO = 0 ADIF = 1 NO
NO
NO
NO
NO SÍ SÍ
SÍ SÍ
Figura 7.6. Organigrama de la operación del conversor A/D.