antigo - copy

Upload: davidfininguitar

Post on 23-Feb-2018

214 views

Category:

Documents


0 download

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);

    }}

    }