[AYUDA] PIC16F870 no conmuta entre puertos ADC

#1
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.
 
#2
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);

}
}
 
Arriba