Sólo he mirado el código por encima...
No veo que guardes los datos leídos por el AD en data[indice].
Revisa la configuración del AD. Por encima, si vas a usar Vref en Ra3 no es como pones. Sería por ejm setup_adc_ports(RA0_RA1_ANALOG_RA3_REF);. Mira de todos modos en el .c del micro, en las definiciones de éste, que ahí viene. Yo lo he cortado de un programa para 18f452 que tengo, y quizás cambie, pero creo que no. Yo lo tengo configurado, como ejemplo:
Codigo:
setup_adc_ports(RA0_RA1_ANALOG_RA3_REF);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(1);
luego simplemente para adquirir:
lectura=read_adc();
De todos modos es sólo como ejemplo, no digo que sea así como debe ser. Simplemente te digo que revises esa parte.
Empieza por ahí...
Interesante proyecto, sí...
Saludos!