Primero, verifiquemos que hayas conectado tu LDR correctamente, debería ser algo como esto ...
ParaleerelvalordePINRA0/AN0,deberealizarunainicializaciónparaasegurarsedequeelpuertoestéconfiguradocorrectamente.La hoja de datos explica cómo funciona todo esto, pero estos valores deberían funcionar:
TRISAbits.TRISA0 = 1; // Set RA0/AN0 to input
ADCON0 = 0b00000000; // Set channel select to AN0
ADCON1 = 0b00001110; // Configure RA0/AN0 as analogue
ADCON2 = 0b10101010; // Right justified result
// TAD 12 and FOSC 32 - may need to adjust this
// depending on your clock frequency (see datasheet)
ADCON0.ADON = 1; // Enable ADC
Ahora que el puerto debe estar configurado, ahora puede leer el valor LDR:
ADCON0bits.GO = 1; // Set the GO bit of the ADCON0 register to start
// the conversion.
while (ADCON0bits.GO); // Wait until the conversion is complete.
Ahora puede leer el resultado del LDR como un valor de 10 bits en ADRESH:ADRESL
. Si solo necesita una resolución de 8 bits, configure ADCON2.ADFM = 0
para la justificación a la izquierda del resultado, entonces solo necesita leer ADRESH
para obtener su resultado.