No veo la complejidad amigos.
"Solo es cuestion de ponerse". Vamos que lo primero es entender como funciona un ADC o por lo menos tratar de captar la idea.
Ejemplo el ADC de un PIC16F877 se dice que tiene 2 resoluciones: de 8 bits y de 10bits. ¿Que son estos BITS? Bueno los valores maximos que puede tomar la Lectura del ADC del PIC16F877; en el caso de 8 BITS tomara valores -decimales para que sea mas claro- entre 0 y 254. En el caso de 10Bits tomara valores entre 0 y 1023.
¿Como interpreta cada valor el PIC? Primero hay que saber que el PIC solo leera Voltajes de 0 a 5V como maximo por ser lo que soporta sus pines. Ahora bien suponiendo que el ADC esta configurado para leer estos valores sin voltajes de referencia. El valor decimal 0 correspondera a 0Volts y el Valor decimal 1023 correspondera a 5V. ¿Entonces cual es la resolucion del ADC?. Segun lo anterior 5/1024 aproximadamente 4.8mV osea cada 4.8mV o 5mV subira un valor decimal.
¿Que es un Voltaje de referencia? Los PIC's con ADC cuentan -en su mayoria- con PINES de VREFS -Voltajes de referencia- esto es util cuando queremos que el valor minimo en este caso 0 no sea igual a 0V, por ejemplo conectando VREF- a un voltaje de 2V cuando el Pin que hace la lectura este en 2V, la lectura sera de cero; y lo mismo aplica para VREF+.
¿Y como configuro el ADC de un PIC?Bien cada PIC tiene su registro especifico para configurar el ADC, en este caso estamos hablando del PIC16F877 y su registro es el ADCON1 este registro posee 8 Bits de configuracion. como vemos en la siguiente tabla
(http://img210.imageshack.us/img210/6040/adconor6.jpg)
Como veran el BIT7 es el que nos da la resolcion del ADC si tiene un 1 se "justificara a la derecha" o se define cono 10BIts si es 0 sera de 8 BITS
El BIT6 define el tiempo de conversion, en PBP casi no lo tocamos aun que pueden leer mas y definirlo con ayuda del ADCON0
El BIT4 y BIT5 no se usan por lo cual se leen como 0
Los demas BITS0-3 definen que pines son usados "para que", por ejemplo digital adc o vrefs.
Y aqui esta de acuerdo a los valores de los ultimos 4 bits del registro ADCON1 como se comportaran los pines del ADC
(http://img87.imageshack.us/img87/7743/tablaadc877ch2.jpg)
Asi por ejemplo si quisieramos desactivar todo el ADC y usar los pines como I/O digitales hacemos:
ADCON1=7 lo que corresponde a poner %0111 donde el ultimo bit no importa por la tabla anterior y asi todo el ADC estara desactivado
Otro ejemplo es activar solo el PORTA0 como analogico, sin voltajes de referencia, las demas salidas digitales y con una resolucion de 10 BIts hacemos:
ADCON1=142 o lo que equivale a poner ADCON1=%10001110
Y para poner esto en Practica en el PBP el ejemplo es asi:
Define LCD_DREG PORTD
Define LCD_DBIT 4
Define LCD_RSREG PORTA ' DEFINICION DE LOS REGISTROS DEL LCD
Define LCD_RSBIT 2
Define LCD_EREG PORTA
Define LCD_EBIT 5
Define ADC_CLOCK 3 ' PONIENDO EN 3 EL RELOJ DE LA FUENTE
Define ADC_BITS 10 ' NUMERO DE BITS DEL RESULTADO
Define ADC_SAMPLEUS 15 ' SETEO DEL TIEMPO DE MEDICION
TRISA = 11 ' PUERTO A 3 ENTRADAS Y 3 SALIDAS
TRISB = 127
ADCON1 = 142 ' PUERTO A COMO ADC Y JUSTIFICACION A LA DERECHA
OPTION_REG.7 = 0 ' HABILITAR PULL-UPS
Low PORTA.4 ' APAGO LINEA DEL LCD R/W (W)
Pause 500 ' PAUSA PARA LCD
sensor VAR word ' VARIABLE PARA GUARDAR EL VALOR DE ADC
TERMO VAR PORTA.0
INIT: 'inicio de la rutina principal
ADCIN TERMO, sensor
LCDOUT $FE1, "Lectura de:" 'mostramos mensaje en la primer linea del LCD
LCDOUT $FE,$C0, dec sensor 'nos pasamos a la segunda linea del LCD y mostramos valor decimal
goto INIT
Espero que les sirva todo esto es un resumen de los links que les paso Mario