antigo - copy
TRANSCRIPT
-
7/24/2019 Antigo - Copy
1/8
//******************************************************************// ELEVADOR PARA 4 ANDARES// CRIADO POR: DAVID PEREIRA DA SILVA JUNIOR// JANEIRO/2016//******************************************************************//Definies de programa//// - Todos os defines so em letras maisculas// - Todas as variveis globais so com primeira letra maiscula// - Todas variveis locais so minusculas//******************************************************************#include #use delay (clock=4000000)#fuses INTRC_IO,NOWDT,NOBROWNOUT,NOPROTECT,NOMCLR//******************************************************************//Entradas//#define FIM_CURSO_0 pin_e2 //Sensores fim de curso//#define FIM_CURSO_1 pin_a2//#define FIM_CURSO_2 pin_e1//#define FIM_CURSO_FREIO pin_a1 //Sensor fim de curso usado parainiciar a frenagem durante a descida, para elevador hidraulico//#define BOTAO_0 pin_a4 //Botes//#define BOTAO_1 pin_a7
//#define BOTAO_2 pin_a3//#define SEGURANCA_EMERGENCIA pin_a5 //Sensores de segurana ouemergencia cabine//#define SERIE pin_a0 //Resultado sriede emergencia cabine, sensores de segurana, cortina de luz e portas//#define PULSO_PRESSAO pin_b5 //Entrada que determina se o funcionamento ser por pulso ou presso contnua. 1 = pulso//#define OPERACAO_NORMAL pin_c6 //Entrada que determina se o funcionamento manual ou normal. 1 = modo normal//#define ENERGIA pin_e0 //Entrada que determina se existe tensao de alimentacao (220V); entrada so eh relevante
//para elevador hidraulico, com bateria e carregador.
//#define B4 pin_b4 //Entrada que determina o tempo para descida automatica do elevador hidraulico//#define B3 pin_b3 //Entrada que determina o tempo para descida automatica do elevador hidraulico//-----------------------------------------------------------------//Sadas#define SAIDA_TRAVA_0 pin_a6 //Sada para as travas#define SAIDA_TRAVA_1 pin_c0#define SAIDA_TRAVA_2 pin_c1#define SAIDA_ELEVADOR_SOBE pin_c4 //Sada que comanda subir o elevador#define SAIDA_ELEVADOR_DESCE pin_d3 //Saida que comanda descer o elevador
#define SAIDA_ELEVADOR_DESCE1 pin_d2 //Saida que comanda a segunda valvula de descida, para o elevador hidraulico#define SAIDA_SIRENE pin_d1 //Sada para a sirene#define SAIDA_LED_B0 pin_d0 //Sadas para leds dos botoes#define SAIDA_LED_B1 pin_c3#define SAIDA_LED_B2 pin_c2#define SAIDA_HABILITA pin_c5
//Entradas: A7, , A5, A4, A3, A2, A1, A0
-
7/24/2019 Antigo - Copy
2/8
//Saidas: A6,
//Entradas: B5, B4, B3,
//Entradas: C6,//Saidas: , C5, C4, C3, C2, C1, C0
//Saidas: D3, D2, D1, D0
//Entradas: E2, E1, E0//******************************************************************#define SEM_DESCIDA_AUTOMATICA 0#define TEMPO_15_MINUTOS 900 // --> 90.000 contagens em uma base de~10ms: ~15 minutos#define TEMPO_2_HORAS 7200 // --> 720.000 contagens em uma base de~10ms: ~2 horas
//******************************************************************
short Elevador_desce = 0, Elevador_sobe = 0;//0 --> Bobina desenergizada = NA aberto e NF fechado
short Elevador_desce_1 = 0, Elevador_desce_2 = 0 , Elevador_sobe_1 = 0;//1 --> Bonina energizada = NA fechado e NF abertoshort Elevador_valvula2desce = 0, Elevador_valvula2desce1 = 0;
long Contador_tempo_partida = 0; // 16 bits
short Fim_curso_0;short Fim_curso_1;short Fim_curso_2;short Fim_curso_freio;short Botao_0;short Botao_1;short Botao_2;
short Seguranca_emergencia;short Habilita;short Botao_pulso;short Operacao_normal;short Energia;short B4;short B3;
char Debounce_port_A = 0, Debounce_port_B = 0, Debounce_port_C = 0, Debounce_port_D = 0, Debounce_port_E = 0;
short Estado_anterior_elevador_sobe = 0;short Estado_anterior_elevador_desce = 0;
char Estado_anterior_fim_curso_1 = 0;
short Borda_fim_curso_1 = 0;short Borda_elevador_desce = 0;short Borda_elevador_sobe = 0;
short Lugar_0 = 0, Lugar_1 = 0; //quandonenhum sensor est acionado, diz se o elevador est p cioma ou p baixo do fim_curso
_1.//******************************************************************
-
7/24/2019 Antigo - Copy
3/8
// SUBROTINASvoid inicializacao (void);void debounce (void);//Funo para fazer o Debounce dos botoesvoid borda (void);//***********************Debounce do fim de curso 0*********************void inicializacao (void)//Inicializao dos pinos{
#use fast_io(A)#use fast_io(B)#use fast_io(C)#use fast_io(D)#use fast_io(E)SET_TRIS_A(0b10111111);
//1 - entrada, 0 - sadaSET_TRIS_B(0b11111111);SET_TRIS_C(0b11000000);SET_TRIS_D(0b11110000);SET_TRIS_E(0b11111111);
PORT_B_PULLUPS(0b00011000); //habilita pull-ups nos binos B4 e B3 (pinos para selecao de elevador eletrico x elev hidraulico com descidaautomatica)
OUTPUT_A(INPUT_A() & 0b10111111); //Coloca0 nas sadas
OUTPUT_B(INPUT_B() & 0b11111111);OUTPUT_C(INPUT_C() & 0b11000000);OUTPUT_D(INPUT_D() & 0b11110000);OUTPUT_E(INPUT_E() & 0b11111111);
}//***********************Debounce dos botes****************************void debounce(void) // faz Debouncedos 10 pinos de entrada{
Debounce_port_A = INPUT_A();
Debounce_port_B = INPUT_B();Debounce_port_C = INPUT_C();Debounce_port_D = INPUT_D();Debounce_port_E = INPUT_E();delay_ms(2);Debounce_port_A = Debounce_port_A & INPUT_A();Debounce_port_B = Debounce_port_B & INPUT_B();Debounce_port_C = Debounce_port_C & INPUT_C();Debounce_port_D = Debounce_port_D & INPUT_D();Debounce_port_E = Debounce_port_E & INPUT_E();
Fim_curso_0 = Debounce_port_E >> 2;Fim_curso_1 = Debounce_port_A >> 2;
Fim_curso_2 = Debounce_port_E >> 1; Fim_curso_freio = Debounce_port_A >> 1;
Botao_0 = Debounce_port_A >> 4;Botao_1 = Debounce_port_A >> 7;Botao_2 = Debounce_port_A >> 3;Seguranca_emergencia = Debounce_port_A >> 5;Habilita = Debounce_port_A;Botao_pulso = Debounce_port_B >> 5;Operacao_normal = Debounce_port_C >> 6;
Energia = Debounce_port_E;
-
7/24/2019 Antigo - Copy
4/8
B4 = Debounce_port_B >> 4; B3 = Debounce_port_B >> 3;}//*********************************************************void borda (void) //verifica se ouve borda em S1,ou nas sadas elevador_sobe, elevador_sobe_1, elevador_desce e elevador_desce_1{
short estado_atual_elevador_desce;short estado_atual_elevador_sobe;
debounce();
if ((!Fim_curso_1) && (Estado_anterior_fim_curso_1))Borda_fim_curso_1 = 1;
elseBorda_fim_curso_1 = 0;
Estado_anterior_fim_curso_1 = Fim_curso_1;
estado_atual_elevador_desce = Elevador_desce || Elevador_desce_1;if ((!estado_atual_elevador_desce) && (Estado_anterior_elevador_desce))
Borda_elevador_desce = 1;else
Borda_elevador_desce = 0;Estado_anterior_elevador_desce = estado_atual_elevador_desce;
estado_atual_elevador_sobe = Elevador_sobe || Elevador_sobe_1;if ((!estado_atual_elevador_sobe) && (Estado_anterior_elevador_sobe))
Borda_elevador_sobe = 1;else
Borda_elevador_sobe = 0;Estado_anterior_elevador_sobe = estado_atual_elevador_sobe;
}//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&// MAIN//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&void main(void){
short auxiliar, auxiliarValv2;short elevador_parado; //Indica se o elevador est parado(1) ou nao(0)
unsigned long contador_sirene = 0;unsigned long contador_timeout_descAutom = TEMPO_15_MINUTOS, contador_au
xiliar_descAutom=0, tempo_timeout_descAutom=0; // variaveis para controlar a descida automatica no elevador hidraulico
//unsigned long contador_delay_parada=0;unsigned long contador_delay_freio=31;short habilita_contagem_delay_freio=0;
inicializacao(); //Inicia os pinos
for(;;){
delay_ms(8); //Para forneceruma base de tempo de aprox. 10ms
borda(); //Atualiza as informaes de debounce e borda
if (Fim_curso_0) { Lugar_0 = 1;
-
7/24/2019 Antigo - Copy
5/8
Lugar_1 = 0;contador_auxiliar_descAutom = 0;
contador_timeout_descAutom = tempo_timeout_descAutom; // reinicializa contagem para descida automatica } if (Fim_curso_2) { Lugar_0 = 0; Lugar_1 = 1; } if (Borda_fim_curso_1 & (Elevador_sobe || Elevador_sobe_1)) { Lugar_0 = 0; Lugar_1 = 1; } if (Borda_fim_curso_1 & (Elevador_desce | Elevador_desce_1)) { Lugar_0 = 1; Lugar_1 = 0; }
if ((Lugar_0 == Lugar_1)){
Lugar_0 = 0;Lugar_1 = 0;
}//////////////Seta valor do timeout para descida automatica do elevador (se elevador hidraulico); decrementa o contador
if (B4 & B3) // Elevador eltricotempo_timeout_descAutom = SEM_DESCIDA_AUTOMATICA;
else if (B4 & !B3) // Elevador hidraulico com descida automatica de 15 min
tempo_timeout_descAutom = TEMPO_15_MINUTOS;else if (!B4 & B3) // Elevador hidraulico com d
escida automatica de 2 horastempo_timeout_descAutom = TEMPO_2_HORAS;
else// Elevador hidraulico sem descida automatica
tempo_timeout_descAutom = SEM_DESCIDA_AUTOMATICA;if (!Fim_curso_0 & Seguranca_emergencia & Habilita & Operacao_normal & !Elevador_sobe & !Elevador_sobe_1 & !Elevador_desce & !Elevador_desce_1 &!Elevador_desce_2)
{contador_auxiliar_descAutom ++;if (contador_auxiliar_descAutom == 100){
contador_auxiliar_descAutom = 0;if (contador_timeout_descAutom > 1)
contador_timeout_descAutom --; //decrementa a cada ~1 segundo, se > 1;
}
}//////////////Parte responsvel por subir
auxiliar = !Fim_curso_2 & Seguranca_emergencia & Habilita & !(!Energia & !(B4 & B3)) & Operacao_normal & !Elevador_desce & !Elevador_desce_1; //nao sobe se no tiver energia e hidraulico
Elevador_sobe = auxiliar & (Botao_2 || (Botao_pulso & Elevador_sobe));
Elevador_sobe_1 = auxiliar & (Botao_1 || (Botao_pulso & Elevador_sobe_1)) & !Fim_curso_1 & Lugar_0;
if(Elevador_sobe || Elevador_sobe_1)
-
7/24/2019 Antigo - Copy
6/8
{output_high(SAIDA_ELEVADOR_SOBE);
contador_auxiliar_descAutom = 0; contador_timeout_descAutom = tempo_timeout_descAutom; // reinicializa contagem para descida automatica
}else{
output_low(SAIDA_ELEVADOR_SOBE);}
//////////////Parte responsvel por descerauxiliar = !Fim_curso_0 & Seguranca_emergencia & Habilita & Oper
acao_normal & !Elevador_sobe & !Elevador_sobe_1;Elevador_desce = auxiliar & (Botao_0 || (Botao_pulso & El
evador_desce)); //--- descer para andar 0Elevador_desce_1 = auxiliar & (Botao_1 || (Botao_pulso & El
evador_desce_1)) & !Fim_curso_1 & Lugar_1; //--- descer para andar 1Elevador_desce_2 = auxiliar & (contador_timeout_descAutom == 1);
//--- descida automatica para andar0if(Elevador_desce || Elevador_desce_1){
output_high(SAIDA_ELEVADOR_DESCE);contador_auxiliar_descAutom = 0;
contador_timeout_descAutom = tempo_timeout_descAutom; // reinicializ
a contagem para descida automatica}else if (Elevador_desce_2){
output_high(SAIDA_ELEVADOR_DESCE);}else{
output_low(SAIDA_ELEVADOR_DESCE);
if (habilita_contagem_delay_freio==1) //inicio bloco delay freio
{
contador_delay_freio++;}
if (contador_delay_freio>5) //o nmero o ajuste de tempo,mexer se necessrio
{output_low(SAIDA_ELEVADOR_DESCE1);habilita_contagem_delay_freio=0;
}//fim bloco delay freio
Contador_tempo_partida = 0;}
// ---- parte responsavel pelo acionamento da saida DESCE1, parasegunda valvula de descida no elevador hidraulico if (Contador_tempo_partida < 30) //se nao passou 0.3 segundos desde aabertura da valvula 1 //*** Ajustar tempo se necessario
{ auxiliarValv2 = 0;
Contador_tempo_partida ++;}else{
-
7/24/2019 Antigo - Copy
7/8
auxiliarValv2 = 1;}
Elevador_valvula2desce = !(B4 & B3) & auxiliarValv2 & Elevador_desce & !(Fim_curso_freio & lugar_0);
Elevador_valvula2desce1 = !(B4 & B3) & auxiliarValv2 & Elevador_desce_1 & !(Fim_curso_freio & lugar_1);
if(Elevador_valvula2desce || Elevador_valvula2desce1)output_low(SAIDA_ELEVADOR_DESCE1);
else{
if(Elevador_desce || Elevador_desce_1 || Elevador_desce_2)
{ output_high(SAIDA_ELEVADOR_DESCE1);
habilita_contagem_delay_freio=1;//para dar um delay quando parar, para desligar a vlvula freio (Desce1) um pouco depois da desce
contador_delay_freio=0;//zerar a contagem do delay do freio
}}
//////////////Parte responsvel pela saida habilita
if(Habilita) output_high(SAIDA_HABILITA);else
output_low(SAIDA_HABILITA);//////////////Parte responsvel pela sirene
auxiliar = Operacao_normal & (!Seguranca_emergencia || (!Fim_curso_0 & !Fim_curso_1 & !Fim_curso_2 & !Elevador_desce & !Elevador_desce_1 & !Elevador_desce_2 & !Elevador_sobe & !Elevador_sobe_1));
if (auxiliar)contador_sirene++;
elsecontador_sirene = 0;
if(contador_sirene > 180)
{ contador_sirene = 181;output_high(SAIDA_SIRENE);
}else
output_low(SAIDA_SIRENE);//////////////Parte responsvel pelos leds dos botoes
if (Botao_0||Elevador_desce)output_high(SAIDA_LED_B0);
elseoutput_low(SAIDA_LED_B0);
if (Botao_1||Elevador_desce_1||Elevador_sobe_1)output_high(SAIDA_LED_B1);
elseoutput_low(SAIDA_LED_B1);
if (Botao_2||Elevador_sobe)output_high(SAIDA_LED_B2);
elseoutput_low(SAIDA_LED_B2);
//////////////Parte responsvel pelas portaselevador_parado = !Elevador_sobe & !Elevador_sobe_1 & !Elevador_
desce & !Elevador_desce_1;
-
7/24/2019 Antigo - Copy
8/8
//////////////Parte responsvel pela porta 0auxiliar = (Fim_curso_0 & (Borda_elevador_desce || (Botao_0 & el
evador_parado))) || (!Operacao_normal & Botao_0);if (auxiliar){
Estado_anterior_elevador_desce = 0;output_high(SAIDA_TRAVA_0);delay_ms(5000);output_low(SAIDA_TRAVA_0);
}
//////////////Parte responsvel pela porta 2auxiliar = (Fim_curso_2 & (Borda_elevador_sobe || (Botao_2 & ele
vador_parado))) || (!Operacao_normal & Botao_2);if (auxiliar){
Estado_anterior_elevador_sobe = 0;output_high(SAIDA_TRAVA_2);delay_ms(5000);output_low(SAIDA_TRAVA_2);
}
//////////////Parte responsvel pela porta 1auxiliar = (Fim_curso_1 & (Borda_elevador_sobe || Borda_elevador
_desce || (Botao_1 & elevador_parado))) || (!Operacao_normal & Botao_1);if (auxiliar){
Estado_anterior_elevador_desce = 0;Estado_anterior_elevador_sobe = 0;output_high(SAIDA_TRAVA_1);delay_ms(5000);output_low(SAIDA_TRAVA_1);
}}
}