Algunos PICs de la familia 16F y todos los de las familias 18F tienen incorporado el módulo de conversión analógica/digital de 10 bits (Exceptuado algunos de la familia 18F que son módulos de 12 bits).
Este modulo comprende de varias entradas analógicas multiplexadas (El número depende del PIC), un capacitor de muestro y retención, y un convertidor analógico/digital de aproximaciones sucesivas.
Todo convertidor ADC requiere voltajes de referencia que determinan el valor de mínima escala (Vref-) y el de plena escala (Vref+), de manera que la conversión de un valor de voltaje analógico Vin en el rango de Vref- a Vref+ producirá un valor equivalente binario en el rango de 0 a 2
n, donde n es la resolución del convertidor (n = 10).Estas tensiones de referencias pueden seleccionarse por software, entre Vdd y Vcc o entradas positivas colocadas en los pines RA2/Vref- y RA3/VRef+ en donde se deben cumplir ciertos requisitos contemplados en las características eléctricas del convertidor ADC del PIC utilizado, por ejemplo para un 16F877A:
El modulo ADC esta controlado por medio de los registros ADCONx en donde se puede seleccionar que pines serán usados como entradas analógicas, determinar el reloj para la conversión, seleccionar canal de conversión, poner en funcionamiento la conversión, etc. Luego tenemos 2 registros más ADRESH y ADRESL en donde se guarda el resultado de la conversión.
El convertidor A/D tiene la característica de poder funcionar mientras que el dispositivo está en modo sleep. Al funcionar en sleep, el reloj de conversión A/D debe derivar del oscilador interno RC A/D.
Registros ADCONx:16F87XA:ADCON0:Bit 7-6
ADCS1:ADCS0: Bits de selección de reloj para la conversión A/D.
Bit 5-3
CHS2:CHS0: Bits de selección de canal analógico.
000: Canal 0 (AN0)
001: Canal 1 (AN1)
010: Canal 2 (AN2)
011: Canal 3 (AN3)
100: Canal 4 (AN4)
101: Canal 5 (AN5)
110: Canal 6 (AN6)
111: Canal 7 (AN7)
Bit 2
GO/DONE: Bit de estado de la conversión A/D.
Cuando ADON=1:
1 = conversión A/D en marcha (Cuando la conversión termina se borra automáticamente)
0 = A/D en reposo
Bit 1 Unimplemented: Es leído como ‘0’
Bit 0 ADON: Bit de habilitación de A/D
1 = El modulo de conversión A/D es alimentado
0 = El modulo de conversión A/D no esta en operación. (No consume corriente)
ADCON1:Bit 7
ADFM: Bit de selección de formato de la conversión A/D.
1 = Justificación derecha. Los 6 bits más significativos de ADRESH se leen como 0.
0 = Justificación izquierda. Los 6 bits menos significativos de ADRESL se leen como 0.
Bit 6
ADCS2: Bit adicional para la selección del reloj para la conversión A/D.
Bit 5-4 Unimplemented: Es leído como ‘0’
Bit 3-0
PCFG3:PCFG0: Bits de control de configuración del puerto A/D.
PIC18F2455/2550/4455/4550:ADCON0:Bit 7-6 Unimplemented: Es leído como ‘0’
Bit 5-2
CHS3:CHS0: Bits de selección de canal analógico.
0000: Canal 0 (AN0)
0001: Canal 1 (AN1)
0010: Canal 2 (AN2)
0011: Canal 3 (AN3)
0100: Canal 4 (AN4)
0101: Canal 5 (AN5)*
0110: Canal 6 (AN6)*
0111: Canal 7 (AN7)*
1000: Canal 8 (AN8)
1001: Canal 9 (AN9)
1010: Canal 10 (AN10)
1011: Canal 11 (AN11)
1100: Canal 12 (AN12)
1101: Unimplemented
1110: Unimplemented
1111: Unimplemented
Bit 1
GO/DONE: Bit de estado de la conversión A/D.
Cuando ADON=1:
1 = conversión A/D en marcha (Cuando la conversión termina se borra automáticamente)
0 = A/D en reposo
Bit 0
ADON: Bit de habilitación de A/D
1 = El modulo de conversión A/D es habilitado.
0 = El modulo de conversión A/D no esta habilitado.
ADCON1:Bit 7-6 Unimplemented: Es leído como ‘0’
Bit 5
VCFG0: Bit de configuración de referencia (VREF- source)
1 = VREF- (AN2)
0 = VSS
Bit 4
VCFG0: Bit de configuración de referencia (VREF+ source)
1 = VREF+ (AN3)
0 = VDD
Bit 3-0 PCFG3:PCFG0: Bits de control de configuración del puerto A/D.
ADCON2:Bit 7
ADFM: Bits de selección de formato de la conversión A/D
1 = Justificación derecha. Los 6 bits más significativos de ADRESH se leen como 0.
0 = Justificación izquierda. Los 6 bits menos significativos de ADRESL se leen como 0.
Bit 6 Unimplemented: Leído como ‘0’
Bit 5-3
ACQT2:ACQT0: Bits de selección del tiempo de adquisición A/D
111 = 20 TAD
110 = 16 TAD
101 = 12 TAD
100 = 8 TAD
011 = 6 TAD
010 = 4 TAD
001 = 2 TAD
000 = 0 TAD*
Bit 2-0
ADCS2:ADCS0: Bits de selección de reloj para conversión A/D .
111 = FRC (reloj A/D derivado del oscilador RC)
110 = FOSC/64
101 = FOSC/16
100 = FOSC/4
011 = FRC (reloj A/D derivado del oscilador RC)
010 = FOSC/32
001 = FOSC/8
000 = FOSC/2
Observando los registros se ve una diferencia importante, en la familia 18F el tiempo de adquisición se puede realizar por hardware configurándolo automáticamente.
Tiempos de adquisición A/D:Para que el convertidor posea la exactitud especificada, se debe contemplar la carga del condensador CHOLD de manera que entre el nivel de tensión del canal. La impedancia de la fuente (RS) y la impedancia del cambio del muestreo interno (RSS) afectan directamente al tiempo requerido para cargar el condensador CHOLD. La impedancia recomendada máxima para las fuentes analógicas es de 2,5kΩ. Cuando la impedancia decrece, el tiempo de adquisición también decrece. Después de que el canal analógico haya sido seleccionado este tiempo de adquisición debe tenerse en cuenta antes de arrancar la conversión.
El calculo detallado puede observarse en el datasheet del PICs utilizado, a modo de ejemplo vemos que en un 16F87XA el mínimo tiempo de adquisición es de 19.72us el cual debe ser generado por software cada vez que se seleccione un canal (Cambiando)
En cambio para los PIC18F2455/2550/4455/4550 el tiempo mínimo de adquisición se reduce a 2.45us, los cuales podemos configurarlo por hardware dependiendo del reloj de conversión seleccionado. Cuando se selecciona ACQT2:ACQT0: 00 la demora se debe generar por software.-
Selección del reloj de conversión A/D:El tiempo por bit de la conversión A/D se define como TAD. La conversión A/D necesita un mínimo de 12TAD para la serie 16F o 11TAD para la serie 18F por 10 bits de conversión.
La fuente de reloj A/D de la conversión es seleccionable por software. Hay siete opciones posibles para el TAD:
• 2 TOSC
• 4 TOSC
• 8 TOSC
• 16 TOSC
• 32 TOSC
• 64 TOSC
• Oscilador interno RC
Para las conversiones A/D correctas, el reloj de conversión A/D (TAD) debe ser tan corto como sea posible pero mayor que un mínimo TAD (para más información véase datasheet del PIC utilizado) dado por ejemplo para la serie 16F en 1.6us y para la serie 18F en 0.7us.-
Proceso de conversión analógico/digital.Pasos a seguir:
1. Configurar el módulo A/D
a. Configurar los pines analógicos y las tensiones de referencia.
b. Seleccionar el reloj de conversión.
c. Serie 18F: Seleccionar el tiempo de adquisición.
d. Habilitar módulo de conversión A/D.
2. Configurar interrupción para el convertidor A/D si se desea.
3. Seleccionar canal a convertir.
4. Serie 16F o si en serie 18F ACQT2, ACQT0=00: Esperar por lo menos el mínimo de tiempo de adquisición.
5. Iniciar conversión seteando el bit GO/DONE.
6. Esperar a que termine la conversión:
a. Por polling, testeando el bit GO/DONE.
b. Por interrupción.
7. Leer el valor convertido en ADRESH-ADRESL.
8. Para la siguiente conversión esperar mínimo 2TDA
Los registros de resultado:El par de registros ADRESH:ADRESL son cargados con el dato resultante de una conversión analógico / digital. Cada uno de estos registros es de 8 bits, por lo tanto, juntos pueden guardar hasta 16 bits. Sin embargo, como el resultado es de 10 bits, el módulo de conversión A/D permite justificarlo en la parte izquierda o derecha de los 16 bits disponibles. Esto nos da la posibilidad de elegir la resolución del conversor entre 10 bits (Justificado a la derecha) u 8 bits (Justificado a la izquierda) trabajando solamente con el registro ADRESH.-