ADC en Pic 16F877A - Ayuda

Hola, estoy tratando de realizar un paqueño multimetro que me mida tension y corriente, tambien le metido un sensor lm35 al pic, por ponerle cosillas, pero aparte de que no logro afinar valores, si paso de la entrada del ADC 4, usa la lectura de otra entrada y no entiendo porque.

Conecto directamente a las entradas ADC 1,2 y 3 las señales que quiero visualizar por una LCD. Les muestro el codigo a ver que les parece.

Código:
  #include <16f877a.h>
#device adc=10
#use delay(clock=4000000)
#include <lcd3.c>
#byte port_a=5
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)

float tension;
float tension_re;
float corriente_re;
float lm_re;
float corriente2;
float lm;

void multimetro()

   setup_adc_ports(all_analog);//Definimos las entradas analógicas.
   delay_us (20);
   setup_adc (ADC_CLOCK_INTERNAL);//Configuramos el modo del convertidor.
   delay_us (20);
   set_adc_channel(3); //Selección del canal analógico.
   delay_us (20);
   corriente2=read_adc();
   delay_us (20);
   set_adc_channel(2);
   delay_us (20);
   tension=read_adc();
   delay_us (20);
   set_adc_channel(1);
   delay_us (20);
   lm=read_adc();
   delay_us (20);
   setup_adc(adc_off);

   SETUP_ADC_PORTS(no_ANALOGs);
   // CALCULO DE LOS VALORES A MOESTRAR POR EL LCD.
   // VALOR TENSION.
   tension_re=((tension*1.961/40)-((corriente2*1.961/40)/200));
   delay_us (30);
   // VALOR CORRIENTE.
   corriente_re=(((corriente2*1.961/400)/10)/0.185);
   delay_us (30);
   // VALOR SENSOR TEMPERATURA.
   lm_re=((lm*1.96)/4);
   delay_us (30);
   
   // MUESTRA DE LOS DATOS POR LA LCD.
   lcd_gotoxy(1,1);
   printf(lcd_putc,"%2.2fV",tension_re);   //PONEMOS EN LCD CON 3 CIFRAS Y DOS DECIMALES
   lcd_gotoxy(1,2);  
   printf(lcd_putc,"%2.2fA",corriente_re);
   lcd_gotoxy(7,2);
   printf(lcd_putc,"%3.2fG",lm_re);
   delay_ms(800);
Las cuentas son un poco chapuceras, pero iba ajustando poco a poco con el proteus. Sugerencias, insultos, y demas criticas seran bien recibidas.

Gracias
 
Atrás
Arriba