Hola a todos de nuevo:
He realizado un control de temperatura, a mi manera con 4 sensores y de momento asta que lo monte simulado en proteus va bien.
Lo que pasa es que puedo regular la temperatura mínima y máxima de un sensor a mi antojo pero la de los otros 3 no por falta de terminales en el micro, que en este caso es un pic 16f877A, y lo que me gustaría poder hacer, pero no me aclaro como, es que con los pulsadores que tengo para mínimo y máximo poder regularlas todas, es decir que si en un pin diese una pulsación se interpretase que es para regular la temperatura de T1, con 2 pulsaciones seguidas que es para regular de T2 y asi asta 4, y hay es donde estoy encallado.
De paso me gustaría que pegaseis, los que entendéis mas de esto si el código que hecho es correcto o se puede mejorar.
gracias de antemano.
He realizado un control de temperatura, a mi manera con 4 sensores y de momento asta que lo monte simulado en proteus va bien.
Lo que pasa es que puedo regular la temperatura mínima y máxima de un sensor a mi antojo pero la de los otros 3 no por falta de terminales en el micro, que en este caso es un pic 16f877A, y lo que me gustaría poder hacer, pero no me aclaro como, es que con los pulsadores que tengo para mínimo y máximo poder regularlas todas, es decir que si en un pin diese una pulsación se interpretase que es para regular la temperatura de T1, con 2 pulsaciones seguidas que es para regular de T2 y asi asta 4, y hay es donde estoy encallado.
De paso me gustaría que pegaseis, los que entendéis mas de esto si el código que hecho es correcto o se puede mejorar.
gracias de antemano.
Código:
#include <16f877A.h>
#device adc=10 //Usa resolución de 10 bits.
#include <math.h>
#use delay(clock=4MHz) //Cristal a usar de 4 Megahercios
#fuses xt,nowdt,noput,nobrownout,nolvp,noprotect
#include <lcd20X4.c> //libreria que maneja la lcd 4x20
#use fast_io(B)
int8 temp1,temp2,temp3,temp4;
float A,B,C,D,a1=21,a2=28,b1=21,b2=28,c1=21,c2=28,d1=21,d2=28;
void main()
{
lcd_init();
lcd_gotoxy(3,1); //Inicia LCD
lcd_putc("CONTORL DIGITAL");
delay_ms(300);
lcd_gotoxy(3,2);
lcd_putc("DE TEMPERATURA");
delay_ms(300);
lcd_gotoxy(7,3);
lcd_putc("CON 4");
delay_ms(300);
lcd_gotoxy(3,4); //Saca texto
lcd_putc("SENSORES LM-35"); //Saca texto
delay_ms(3000);
lcd_putc("\f"); //Limpia pantalla
while (TRUE){
setup_adc (adc_clock_div_32);
setup_adc_ports(AN0_AN1_AN2_AN4_VSS_VREF); //RA0,RA1,RA2 y RA4 miden, RA3 es Vref (5V)
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0); //Elige canal a medir RA0
delay_us(20);
temp1=read_adc(); //Hace conversión AD
A=(temp1*0.00488758553*100);
set_adc_channel(1); //Elige canal a medir RA1
delay_us(20);
temp2=read_adc(); //Hace la conversion AD
B=(temp2*0.00488758553*100);
set_adc_channel(2); //Elige canal a medir RA2
delay_us(20);
temp3=read_adc(); //Hace la conversion AD
C=(temp3*0.00488758553*100);
set_adc_channel(4); //Elige canal a medir RA4
delay_us(20);
temp4=read_adc(); //Hace la conversion AD
D=(temp4*0.00488758553*100);
setup_adc(adc_off); //Apaga ADC
lcd_gotoxy(1,1);
printf(lcd_putc,"T1:%2.0f,Min:%2.0f,Max:%2.0f",A,a1,a2); //xxx.x °C
delay_ms (10);
lcd_gotoxy(1,2);
printf(lcd_putc,"T2:%2.0f,Min:%2.0f,Max:%2.0f",B,b1,b2); //xxx.x °C
delay_ms (10);
lcd_gotoxy(1,3);
printf(lcd_putc,"T3:%2.0f,Min:%2.0f,Max:%2.0f",C,c1,c2); //xxx.x °C
delay_ms (10);
lcd_gotoxy(1,4);
printf(lcd_putc,"T4:%2.0f,Min:%2.0f,Max:%2.0f",D,d1,d2); //xxx.x °C
delay_ms (10);
if(A<a1){output_high(pin_D3);} //Si es menor a 21ºC manda un 1 al pin D3
if(A>=a2){output_low(pin_D3);} //Si es mayor o igual a 28 manda un 0 a D3
if(B<b1){output_high(pin_C2);} //Si es menor a 21ºC manda un 1 al pin C0
if(B>=b2){output_low(pin_C2);} //Si es mayor o igual a 28 manda un 0 a C0
if(C<c1){output_high(pin_C1);} //Si es menor a 21ºC manda un 1 al pin C1
if(C>=c2){output_low(pin_C1);} //Si es mayor o igual a 28 manda un 0 a C1
if(D<d1){output_high(pin_C0);} //Si es menor a 21ºC manda un 1 al pin C2
if(D>=d2){output_low(pin_C0);} //Si es mayor o igual a 28 manda un 0 a C2
if(input(pin_B0)==0){a1=a1-1,A;} //Disminuimos el valor minimo
if(input(pin_B1)==0){a1=a1+1,A;} //Aumentamos el valor minimo
if(input(pin_B4)==0){a2=a2-1,A;} //Disminuimos el valor maximo
if(input(pin_B5)==0){a2=a2+1,A;} //Aumentamos el valor maximo
}
}
Última edición por un moderador: