[AYUDA] PIC16F870 no conmuta entre puertos ADC

Bueno se que soy nuevo y generalemente suelo resolver mis problemas por mi mismo, pero esta vez necesito alguien me de una ayuda.

Si alguien es tan amable, intentaré ser breve.

Estoy usando PICS 16F870 y PIC C Compiler.

El programa es bastante basico, necesito leer la entrada AN0 (un valor analogico) y mientras se de una condicion (mayor o menor que) leer el AN1 y luego de otra condicion activar una salida.

A groso modo:

While (AN0 < X1 ){

If (AN0 < X2){
Activar salida
}​


El problema es que al hacer el cambio de lectura de puerto en proteus anda bien, pero en plaqueta no, solo me lee el puerto AN0

setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_DIV_32); //Configuracion de los ADC

While (TRUE){
set_adc_channel(0); // Configuro puerto 0
delay_ms(1);
// Espero para el cambio​
PA1=read_adc();
//Leo valor​
dato1=PA1 / 50;
//Lo modifico​
delay_ms(200);
//Espero 200 ms​
set_adc_channel(1);
//Configuro canal 1 (AN1)​
delay_ms(1);
//Espero 1ms para el cambio​
PA2=read_adc();
//Leo valor​
dato2= PA2 *2 ;
//Lo modifico​

//LINEA 1
lcd_gotoxy(1,1); //(x,y)
printf(LCD_PUTC,"Nivel= %fV",dato1);
//LINEA 2
lcd_gotoxy(1,2); //(x,y)
printf(LCD_PUTC,"Temper= %2.1fC",dato2);

}

Cualquier ayuda será bienvenida.

Muchas gracias.
 
Bueno, ahora parece medir en ambos canlales.
Pero no entiendo porque conectandole la salida del LM35 (lo ponga en el canal que lo ponga) siempre tiene 210mV y otro aparato que entrega una tension mide perfecto.

La verdad me desconcierta...

Dejo el codigo por si alguno le sirve o ve algo:


#include <16f870.h> //libreria del pic.
#fuses XT //tipo de cristal externo
#fuses NOWDT //Sin Watch Dog Timer
#fuses NOPROTECT //Codigo DesProtegido
#fuses NOLVP //Sin programacion de bajo voltaje.
#use delay (clock=4MHZ) //Cristal 4MHZ
#include <flex_lcd_orig.c>

//#define PORTA 0X05 //Defino los puertos
//#define PORTB 0X06 //Defino los puertos
//#define PORTC 0X07 //Defino los puertos

void main()
{

float PA1; //Variables declaradas
float PA2;

output_A(0x0);
output_B(0x0);
output_C(0x0);

delay_ms(10);

output_high(PIN_B7);

lcd_init(); //inicializacion del LCD
setup_adc_ports(AN0_AN1_AN3); //AN0 AN1 y AN3 analogicas
setup_adc(ADC_CLOCK_DIV_32); //Configuracion de los ADC
delay_ms(1);

set_tris_a(1);
set_tris_b(0);
set_tris_c(0);

while (TRUE)
{
set_adc_channel(0); //SELECCIONO CANAL 0
delay_ms(1); //espero cambio
PA1=read_adc() * 2; //leo y grabo en PA1 y ajusto la escala
delay_ms(1);

set_adc_channel(1); //SELECCIONO CANAL 1
delay_ms(1); //espero cambio
PA2=read_adc() / 50; //leo y grabo en variable PA2 y ajusto la escala
delay_ms(1); //delay por si acaso


//LINEA 1
lcd_gotoxy(1,1); //(x,y)
printf(LCD_PUTC,"Nivel= %fV",PA1);
//LINEA 2
lcd_gotoxy(1,2);
printf(LCD_PUTC,"Temper= %fC",PA2);

}
}
 
Atrás
Arriba