Hola lopb, estuve mirando tu programa y le veo algunas inconsistencias. Sabiendo que el valor que va a devolver read_adc() es de 10 bits, debes configurar a las dos variables que va a leer el ADC como long temp, value;. La instrucción de configuración set_tris() no debe ir dentro del bucle y finalmente en los cálculos para 10 bits los debes hacer basado en 1024 (10 bits) y no en 256 (8bits). Te ordené un poco el código para que lo ensayes y nos cuentes como te va:
#include <16F876A.h>
#device adc=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=20000000)
#use rs232(baud=2400, xmit=PIN_C6, rcv=PIN_C7)
long temp, value;
float tempan1, voltsan0;
void main(void)
{
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_DIV_32);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_tris_b (0x00);
while (TRUE)
{
set_adc_channel (0); //Elige canal a medir RA0
delay_us (20);
value=read_adc(); //Capturamos señal analógica que entra por el canal previamente seleccionado (RA0)
set_adc_channel (1); //Elige canal a medir RA0
delay_us (20);
temp=read_adc(); //Capturamos señal analógica que entra por el canal previamente seleccionado (RA0)
voltsan0 = 5.0 - (value * (5.0 / 1024.0 ));
tempan1 = temp * (5.0 * 100.0 / 1024.0);
printf("Valor volts, temp, hextempout:: %1.2f, %2.2f , %4X\n\r", voltsan0, tempan1, temp);
output_high(PIN_B1); //(34)
delay_ms(500);
output_low(PIN_B1);
delay_ms(500);
}
}
Por curiosidad, para que es la variable tempan1?
Saludos!