En el PIN_A0 (AN0) tenemos conectado un potenciómetro, de manera que el PIC18F2550 leerá valores analógicos entre 0 y 5V. El programa enciende un LED cuando sobrepasa los 2.5V y lo apaga cuando está por debajo.
Código fuente: entrada_analogica.c
Configurar un puerto como analógico:
TRIS…: Configura el PIN de salida.
ADCON1bits.VCFG: Configura tensiones de referencia. Pueden usarse los 0 y 5V de alimentación, como valores mínimo y máximo, o tensiones Vref- y Vref+, conectadas a PIN_A2 y PIN_A3, respectivamente.
ADCON1bits.PCFG: Configura los puertos que queremos que sean analógicos, y los que serán digitales.
ADCON2bits.ADCS: Configura el tiempo de conversión analógico-digital, según frecuencia de trabajo.
ADCON2bits.ACQT: Configura tiempo de adquisición, para el que hay que tener en cuenta el de conversión.
ADCON2bits.ADFM: El resultado se puede almacenar en 8 bits (resolución 256, dato justificado a la izquierda) o en 10 bits (resolución 1024, dato justificado a la derecha).
Conversión analógico-digital:
ADCON0bits.ADON: Habilita el módulo convertidor analógico-digital.
ADCON0bits.CHS: El PIC18F2550 sólo tiene un módulo convertidor, que es compartido por todos los puertos analógicos. Por lo que antes de lanzar la conversión, hay que decir de qué puerto se va a leer el valor analógico.
ADCON0bits.GO_DONE: Lanza la conversión analógico-digital del puerto seleccionado anteriormente. Hasta que no se pone a CERO, no se ha finalizado la conversión, y no se debe leer el dato.
ADRESH y ADRESL: Registros donde se carga el resultado. Para justificación a la izquierda (resolución 256), sólo se leería ADRESH.
Apuntes detallados con las tablas de valores para cada uno de los registros, según datasheet: