Vamos a ver si soy capaz de explicarme razonablemente bien sin liarme demasiado ...
La conversión Analógica a Digital que es capaz de hacer un PIC
consiste en convertir un valor de tensión (voltaje) que conectemos a un PIN, habilitado para ello,
en un valor numérico proporcional a dicha tensión que podemos guardar en una variable y ser utilizado por nuestro programa del PIC.
Dicho de otra forma: Si entre un pin del PIC podemos tener una tensión, con respecto a GND, entre 0V y 5V y realizamos una
conversión Analógico-Digital de ese pin con una
precisión de 8 bits entonces el PIC puede "leer" esa tensión en 256 (2^8=256) valores distintos que nos devuelve como resultado de la lectura,
siendo el 0 el correspondiente a los 0V y el 255 el correspondiente a los 5V, y todos los intermedios en "saltos" de 0,019V (5V/256).
Si en lugar de 8 bits estamos utilizando un PIC que tiene una
conversor A/D de 10 bits de precisión entonces ese mismo
rango de 0V a 5V podemos "leerlo" en 1024 (2^10=1024) valores distintos, siendo
el "resultado" 0 el que corresponde a los 0v y el 1023 a los 5V. Cualquier valor intermedio nos devolverá un número equivalente con "saltos" de 0,0049V por valor.
Hemos visto que el mínimo que podemos convertir es
0V o tensión del nivel del
Vss (GND) del PIC y
5V o tensión del nivel de alimentación
(Vcc) del PIC.
Esto es así si no utilizamos los
Voltajes de Referencia, porque si los utilizamos entonces las cosas pueden cambiar a mejor ....
Me explico: Imaginemos un dispositivo analógico que varía su tensión de salida entre
0V y 1V. Si le aplicamos la conversión A/D como antes con
8 bits de precisión entonces los valores que vamos a obtener son entre
0 y 51 (1*256/5V) con lo que
desperdiciamos una parte muy importante del rango posible de conversión, entre
52 y 255 nunca nos va a aparecer como resultado de la misma.
Entonces el truco está en poner a
1V la patilla VRef+ del PIC con lo que la conversión A/D a realizar en lo que haya presente en nuestro pin a leer se va a efectuar en
256 pasos entre GND y VRef+, no entre GND y Vcc como antes, con lo que obtenemos un resultado 5 veces mas preciso:
1V dividido en 256 trocitos con lo que cada número corresponde con 0,0039V.
Y todavía se le puede dar una vuelta de tuerca más a este asunto.
Imaginemos que nuestro dispositivo analógico varía su tensión de salida entre
1V y 2V. Si utilizamos el primer ejemplo que vimos, conversión
A/D entre 0V y 5V con 8 bits de precisión, entonces solo obtendremos números entre
51 y 102, perdiendo todos los valores inferiores y superiores a éstos.
Si utilizamos el ejemplo anterior a éste pero colocando el
VRef+ a 2V entonces tendremos valores entre
128 y 255 pero ninguno inferior a 128 ya que nuestra tensión analógica no baja de 1V ....
Así que la solución está en utilizar otra patilla del PIC para
VRef-, o sea para ponerle la referencia de tensión mínima a partir de la cual vamos a convertir valores, que junto con la
VRef+ tenemos el margen o
rango de tensiones a convertir a gusto del consumidor.
En este segundo ejemplo pondríamos
VRef- a 1V y
VRef+ a 2V con lo que tendríamos una conversión de 8 bits en la que el
0 correspondería a los 1V y el 255 a los 2V ...
Todo esto se puede ver en el siguiente diagrama de bloques del
conversor A/D de los PIC's de la familia 16F87X que pongo mas abajo:
Un buen ejemplo lo tienes en
Temperatura y Luminosidad con un LM35a y una LDR (Conv. AD)Espero haberme explicado bien.