#include <18f4455.h>
#device adc=10
#fuses HS,NOWDT,NOPUT,NOPROTECT,NOLVP,NOMCLR
#use delay(clock=20M)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
#use fast_io(E)
#include <lcd.c>
#include <math.h>
#include <ds1307.c>
#include <Variables.c>
#include <PrototiposFunciones.c>
#include <SleepTime.c>
#include <DisplayTime.c>
#include <LecturaSondas.c>
#include <ModoFrio.c>
#include <ModoVent.c>
#include <Marcha.c>
#int_timer1
Void GetTime()
{
int t0=0;
t0++;
if (t0>=10 && LeeCLOCK==1) //LEECLOCK es la bandera
{
ds1307_get_time(hr,min,sec);
ds1307_get_date(day,mth,year);
t0=0;
LeeCLOCK=0;
set_timer1(250);
clear_interrupt(INT_TIMER1);
}
}
#int_timer2
Void louver()
{
//POSICIONAMIENTO DE PARADA DEL DIFUSOR
if (ON==0)
{
if (NPasos > 0)
{
output_d(Secuencia[Paso]);
Paso-=1;
NPasos-=1;
if (Paso == -1) Paso = 3;
if (NPasos==0) OkStop=1;
}
}
if (MovPap==1){ //AQUI LA BANDERA ES MOVPAP
//MODO AUTOMÁTICO
if (swing==1)
{
//HACIA ATRAS
if (Rw == 0){
output_d(Secuencia[Paso]);
Paso+=1;
NPasos+=1;
if (Paso==4) Paso=0;
if (Npasos==Posicion[3]) {Paso=3; rw=1;}
}
//HACIA ADELANTE
else if (Rw == 1){
output_d(Secuencia[Paso]);
Paso-=1;
NPasos-=1;
if (Paso == -1) Paso = 3;
if (NPasos==Posicion[0]) {Paso=0; rw=0;}
}
}
//MODO MANUAL
//POSICION 1
if (swing==2)
{
if (Npasos != Posicion[1])
{
if (Npasos < Posicion[1])
{
output_d(Secuencia[Paso]);
Paso+=1;
NPasos+=1;
if (Paso==4) Paso=0;
}
if (Npasos > Posicion[1])
{
output_d(Secuencia[Paso]);
Paso-=1;
NPasos-=1;
if (Paso == -1) Paso=3;
}
}
if (Npasos == Posicion[1]) output_d(0x00);
}
//POSICION 2
if (swing==3)
{
if (Npasos != Posicion[2])
{
if (Npasos < Posicion[2])
{
output_d(Secuencia[Paso]);
Paso+=1;
NPasos+=1;
if (Paso==4) Paso=0;
}
if (Npasos > Posicion[2])
{
output_d(Secuencia[Paso]);
Paso-=1;
NPasos-=1;
if (Paso == -1) Paso=3;
}
}
if (Npasos == Posicion[2]) output_d(0x00);
}
//POSICION 3
if (swing==4)
{
if (Npasos < Posicion[3])
{
output_d(Secuencia[Paso]);
Paso+=1;
NPasos+=1;
if (Paso==4) Paso=0;
}
if (Npasos == Posicion[3]) output_d(0x00);
}
//VUELVE AL MODO AUTO
if (swing==6) {Rw=1; Swing=1;}
set_timer2(250);
clear_interrupt(INT_TIMER2);
MovPaP=0;
} }
#int_timer3
Void GetSondas()
{
if (LeeSOND==1)
{
set_adc_channel(0);
delay_us(6);
ReadNtc1 = Read_ADC();
set_adc_channel(1);
delay_us(6);
ReadNtc2 = Read_ADC();
set_adc_channel(2);
delay_us(6);
ReadNtc3 = Read_ADC();
Leesond=0;
set_timer3(250);
clear_interrupt(INT_TIMER3);
}
}
Void main()
{
SET_TRIS_a(0B00000111);
SET_TRIS_B(0B11100001);
SET_TRIS_C(0X00);
SET_TRIS_E(0X00);
SET_TRIS_D(0X00);
output_d(0x00);
output_c(0x00);
output_b(0x00);
output_a(0x00);
SETUP_TIMER_0(RTCC_INTERNAL|RTCC_DIV_128);
SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_8);
SETUP_TIMER_3(T3_INTERNAL|T1_DIV_BY_1);
SETUP_TIMER_2(T2_DIV_BY_16,250,16);
SETUP_ADC(ADC_CLOCK_DIV_64);
SETUP_ADC_PORTS(AN0_TO_AN2);
EXT_INT_EDGE(L_TO_H);
ENABLE_INTERRUPTS(INT_TIMER0);
ENABLE_INTERRUPTS(INT_TIMER1);
ENABLE_INTERRUPTS(INT_TIMER2);
ENABLE_INTERRUPTS(INT_TIMER3);
ENABLE_INTERRUPTS(INT_EXT);
lcd_init();
ds1307_init(DS1307_ALL_DISABLED);
COMPRESOR = 0;
VENTEXT = 0;
VintOFF
V4 = 0;
OKStop = 0;
MarchaMenu();
}
Void MarchaMenu()
{
while (ON==1)
{
switch (ModeSet)
{
// case 0: Swing=1; Autom(); Break;
case 1: Swing=1; Frio(); Break;
case 2: Swing=5; Calor(); Break;
case 3: Swing=2; Dry(); Break;
case 4: Swing=1; Vent(); Break;
case 5: TimeAdjust(); Break;
default: Break;
}
}
}
Void Frio()
{
short FrostProtect=0;
lcd_gotoxy(1,1); lcd_putc("COOL");
CompMinTimeOFF = MinCont;
//EN CASO DE CAMBIO DE MODO
if (FlagCambio==1)
{
COMPRESOR=0;
VENTEXT=0;
RetardoV4
V4=0;
RetardoOnCompresor;
FlagCambio=0;
}
//FUNCIONAMIENTO NORMAL
V4=0;
VintON=1;
//SI LA TEMPERATURA DE LA HABITACION ES >=
//QUE LA TEMPERATURA PREFIJADA + 1 GRADO ...
//Y SE CUMPLEN LOS 3 MIN DE SEGURIDAD DE PARO DEL COMPRESOR...
if (TempLimit >= (TempSet+Diferencial) && (MinCont >= (3 + CompMinTimeOFF)) )
{
COMPRESOR = 1;
VENTEXT = 1;
if (FlagTimeCompOFF == 1)
{
MinCont=0;
CompMinTimeON = MinCont;
FlagTimeCompOFF = 0;
FlagTimeCompON = 1;
}
}
//SI LA TEMPERATURA DE LA HABITACION ES <=
//QUE LA TEMPERATURA PREFIJADA - 1 GRADO
//Y SE CUMPLEN LOS 5 MIN DE SEGURIDAD DE MARCHA DEL COMPRESOR...
else if ((TempLimit <= (TempSet - Diferencial)) && (MinCont >= (5 + CompMinTimeON)))
{
COMPRESOR = 0;
delay_ms(15000);
VENTEXT = 0;
FlagTimeCompOFF=1;
if (FlagTimeCompON == 1)
{
MinCont=0;
CompMinTimeOFF = MinCont;
FlagTimeCompON=0;
}
}
//PROTECCIÓN DE CONGELACIÓN DEL EVAPORADOR
if (TempHeatExchanger < 0)
{
delay_ms(180000);
FrostProtect = 1;
COMPRESOR = 0;
delay_ms(15000);
VENTEXT = 0;
VintMid
while (FrostProtect == 1)
{
if (TempHeatExchanger > 10)
FrostProtect=0;
}
}
//CONTROL DE LA VENTILACION
Vent();
SleepTime();
LeeCLOCK=1; //AQUI LEVANTO LAS BANDERAS Y ENTRO
DisplayTime(); //EN LAS FUNCIONES DE LECTURA, DISPLAY DE HORA
LeeSOND=1;
LecturaSondas();
MovPaP=1;
}