que tal amigos del foro, pido su ayuda para poder arreglar mi programa que realice en C para un control de temperatura, en proteus al hacer la simulacion jala muy bien pero ya armandolo en proto empieza a funcionar mal, espero me puedan ayudar. el control en si tiene dos entradas analogicas una proveniente de un lm35 sensor de temperatura y otra de un potenciometro que va a hacer la temperatura deseada, el problema que al probarlo fisicamente las salidas empiezan a intercambiars eunas con otras , es decir si le pusiera leds , estos empezarian a prender unos y otros sin control, uso el pic16f876a y aqui mi programa:
#include <16f876a.h>
#device ADC=10
#fuses HS,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use standard_io(b)
#define FOCO PIN_B2
#define CALENTARCEL PIN_B1
#define ENFRIARCEL PIN_B0
#define COMPRESOR PIN_B3
float pot,sensor,t1,t2;
void main(void) {
//set_tris_b(0x00);
setup_adc(ADC_CLOCK_INTERNAL); //configura el converso
setup_adc_ports(ALL_ANALOG);//entrada 0 y 1 como analogicas
delay_ms(1);
disable_interrupts(GLOBAL);
while(1){
// Lectura del canal 0 por AN0
set_adc_channel(0);
delay_ms(10);
pot=read_adc();
delay_ms(10); //para que se estabilice
pot=pot*5*10/255;
t1=pot-(pot*20/100);
delay_ms(10);
//lectura del canal 1 por AN1
set_adc_channel(1);
delay_ms(10);
sensor=read_adc();
delay_ms(10);
sensor=sensor*5*10/255;
t2=pot+(pot*20/100);
delay_ms(10);
if(sensor<t1)//prende foco
{
output_high(foco);//se prende foco
output_low(compresor);//esta en apagado compresor
output_low(enfriarcel);//apagada la parte que enfria de la celda
output_low(calentarcel);//apagada la parte que calienta de la celda
}
if (sensor>=t1 & sensor<=t2)
{
output_low(compresor);
output_low(foco);
if(pot>sensor)//calentar
{
output_low(enfriarcel);
output_high(calentarcel);
output_low(foco);
output_low(compresor);
}
if(pot<sensor)//enfriar
{
output_high(enfriarcel);
output_low(calentarcel);
output_low(foco);
output_low(compresor);
}
if(pot==sensor)//no hagas nada
{
output_low(enfriarcel);
output_low(calentarcel);
output_low(foco);
output_low(compresor);
}
}
if(sensor>t2)
{
output_low(foco);
output_high(compresor);
output_low(enfriarcel);
output_low(calentarcel);
}
}
}
espero me puedan ayudar, saludos.....