Galera Boa noite. 

No programa abaixo, o meu relé que está no PORTB0 fica repicando, Já comentei todo programa e ativei só o PORTB e funciona, Porém quando coloco o resto do programa sempre repica. Alguém sabe me dizer como resolver esse problema, sem mecher nos PORTS? 

-> Para completar, estou utilizando na saida do PORTB, um resistor de 4k7 e um BC337 com beta de 40

Video do problema: https://www.youtube.com/watch?v=P0VJPmA0fl8

#FUSES NOMCLR, NOLVP, NOPROTECT, INTRC, NOWDT

void main()
{

if(!input(pin_a7)){                  //se o FIM de curso de abertura não tiver acionado
if(input(pin_a1)){                  //Se eu pressionar o botao abre
output_high(pin_b0);

}
else output_low(pin_b0);
}
else output_low(pin_b0);

if(!input(pin_a6)){                    // Se o Fim de curso de fechamento não tiver acionado
if(input(pin_a0)){                     // Se eu pressionar o botão fecha
output_high(pin_b1);
}
else output_low(pin_b1);
}
else output_low(pin_b1);

}
}

Exibições: 780

Responder esta

Respostas a este tópico

Tenta assim:

#FUSES NOMCLR, NOLVP, NOPROTECT, INTRC, NOWDT

void main()
{

if(!input(pin_a7)){                  //se o FIM de curso de abertura não tiver acionado
if(input(pin_a1)){                  //Se eu pressionar o botao abre
output_high(pin_b0);

delay_ms(100);

}
else output_low(pin_b0);

delay_ms(100);
}
else output_low(pin_b0);

delay_ms(100);

if(!input(pin_a6)){                    // Se o Fim de curso de fechamento não tiver acionado
if(input(pin_a0)){                     // Se eu pressionar o botão fecha
output_high(pin_b1);

delay_ms(100);
}
else output_low(pin_b1);

delay_ms(100);
}
else output_low(pin_b1);

delay_ms(100);

}
}

acredito q os delays nao vao influenciar nisso, gostaria q postasse o circuito q utilizou bem como o codigo completo.. se fosse eu dava uma resumida dessa forma nisso td!

if(!input(pin_a7) && input(pin_a1))  //se o FIM de curso de abertura não tiver acionado e eu pressionar o botao abre

{                  
output_high(pin_b0);

}
else

{

output_low(pin_b0);
}

if(!input(pin_a6) && input(pin_a0))  

{                  
output_high(pin_b1);

}
else

{

output_low(pin_b1);
}

Ja aconteceu comigo e foi porque faltou um resistor de 10k para o terra (pull down) para manter o pino sempre em 0 , sem ele o pino fica meio que estático , e quando recebia o sinal 1 na porta ele fazia a mesma coisa que faz no video que você postou .

Não reparei se sua placa havia mas poste ai o esquema para analizarmos.

Reseolvido!!! 

O programa do Cesar Luis Funcionou. 

IIgner, não era pulldown, pois  coloquei o resistor de 10K. 

Com o programa do César Luis, o relé acionou corretamente. 

Obrigado pela atenção de Todos. 

em relacao ao codigo postado por ti, precisa-se ler duas linhas de condicao para ele executar a funcao, enquanto ele esta entre elas causa essa reacao q teve.. imagino q da maneira q postei ele le as condicoes e executa se ambas estiverem verdadeiras. 

Sim, o código que vc postou funcionou corretamente. 

o estranho era que quando comentava todo o programa e deixava só o PORTB0 funcionava corretamente, porém quando colocava todo o programa, me dava problemas.

Agora está resolvido, obrigado Cesar Luis e obrigado aqueles que me deram atenção.

Abraços. 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço