Buenas,
les cuento que estoy implementando 3 entradas analógicas en un pic 16f877a, las cuales convierten la información a digital en 8 bits.
El código me funciona bien al simularlo en proteus 7.5. El problema es que al implementarlo en la protoboard solo funciona la conversión del primer canal (RA0) y el resto es una salida (!!!) de 0 digital (0,1 volt aprox).
Le he dado mil vueltas y no entiendo qué puede ser. ¿alguna idea?
Este es el código (omití las partes que funcionan bien, son solo "if" y "else").
He probado las declaraciones RA0_RA1_RA3_ANALOG, ALL_ANALOG (aunque no me sirve, pero para ver si cambiaba algo). También probé distintos delays, usualmente 10 o 20us y distintos clocks para el ADC, como ADC_CLOCK_DIV_8.
En todos los casos, el pic hace el mismo error.

Cualquier ayuda es bienvenida. Saludos.
les cuento que estoy implementando 3 entradas analógicas en un pic 16f877a, las cuales convierten la información a digital en 8 bits.
El código me funciona bien al simularlo en proteus 7.5. El problema es que al implementarlo en la protoboard solo funciona la conversión del primer canal (RA0) y el resto es una salida (!!!) de 0 digital (0,1 volt aprox).
Le he dado mil vueltas y no entiendo qué puede ser. ¿alguna idea?
Este es el código (omití las partes que funcionan bien, son solo "if" y "else").
#include<16f877a.h>
#device ADC=8
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=4000000)
int sensord;
int sensort;
int giroiz;
void main(void){
set_tris_a(0x11011111); //puerto a es la entrada (excepto salida en pin A5)
set_tris_b(0x11000000); //puerto b es la salida (excepto entrada en pin B7 y B6)
SETUP_ADC_PORTS(AN0_AN1_AN3); //a0 a1 a3 entradas analogas
setup_adc(ADC_CLOCK_INTERNAL); //clock adc
// cristal para el pic. nunca está en modo sleep
do{
set_adc_channel(0);
delay_ms(20);
sensord = read_adc();
set_adc_channel(1);
delay_ms(20);
sensort = read_adc();
set_adc_channel(3);
delay_ms(20);
giroiz = read_adc();
}//do
while(true);
} //void
He probado las declaraciones RA0_RA1_RA3_ANALOG, ALL_ANALOG (aunque no me sirve, pero para ver si cambiaba algo). También probé distintos delays, usualmente 10 o 20us y distintos clocks para el ADC, como ADC_CLOCK_DIV_8.
En todos los casos, el pic hace el mismo error.
Cualquier ayuda es bienvenida. Saludos.