Ir ao conteúdo
  • Cadastre-se

PIC Alternar saida entre nivel "0" e nível "1" com o mesmo botão


Posts recomendados

Ola, estou iniciando em programação de microcontroladores e preciso montar um código em que os pinos de entrada do PIC são setados por chaves micro N/A, (na simulação com o SimulIDE eu uso um botão) mas estou tendo dificuldade porque no funcionamento da máquina (o pic comanda o acionamento da solenóide de um pistão) esse pistão tem que descer quando a chave "A" fecha e manda nível 1 na saída, em seguida outra chave desliga a mesma saída e o pistão sobe,e é aí a minha dificuldade, quando sobe ele fecha novamente a chave "A" só agora não deve dar nível 1 e sim 0 porque o pistão não deve descer agora, só no próximo siclo, ou seja teria que ser assim: Fecha portA0 > saída portB0= high // fecha portA1> saída portB0= low // fecha portA0 > saída portB0= low, está clara a explicação? Espero que sim, não estou conseguindo montar o código para alternar o nível nessa saída B0 com a mesma chave. Uso o PIC 16f818, simulação no SimulIde, compilador CCS C compiler e Mplab ide v. 8.30 

Segue o meu código:

 

#include<16f818.h>
#fuses INTRC, NOWDT, NOLVP
#use delay (clock=4000000)


void main(){

     while(true){
   
     
       if (!input(pin_a0)){
          output_high (pin_b0);     
  }
       if (!input(pin_a1)){
          output_low (pin_b0);
  }  
       if (!input(pin_a2)){
         output_high (pin_b0);
  }      
       if (!input(pin_a3)){
         output_low (pin_b0);  
           delay_ms(4000);
         output_high (pin_b1);
 }
       if(!input(pin_a4)){
         output_low (pin_b1);
}
     }
}
       

 

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

Em 23/09/2024 às 09:01, Paulo Agostinho disse:

outra chave desliga a mesma saída e o pistão sobe,

se outra chave desliga , então como o pistão sobe ?,    imagino que ao desligar essa chave ele também liga outra chave invertendo a corrente e assim o pistão sobe e quando chega em cima o certo seria ligar novamente para continuar o movimento . 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@devair1010

Em 23/09/2024 às 09:01, Paulo Agostinho disse:

Ola, estou iniciando em programação de microcontroladores e preciso montar um código em que os pinos de entrada do PIC são setados por chaves micro N/A, (na simulação com o SimulIDE eu uso um botão) mas estou tendo dificuldade porque no funcionamento da máquina (o pic comanda o acionamento da solenóide de um pistão) esse pistão tem que descer quando a chave "A" fecha e manda nível 1 na saída, em seguida outra chave desliga a mesma saída e o pistão sobe,e é aí a minha dificuldade, quando sobe ele fecha novamente a chave "A" só agora não deve dar nível 1 e sim 0 porque o pistão não deve descer agora, só no próximo siclo, ou seja teria que ser assim: Fecha portA0 > saída portB0= high // fecha portA1> saída portB0= low // fecha portA0 > saída portB0= low, está clara a explicação? Espero que sim, não estou conseguindo montar o código para alternar o nível nessa saída B0 com a mesma chave. Uso o PIC 16f818, simulação no SimulIde, compilador CCS C compiler e Mplab ide v. 8.30

Segue o meu código:

 

#include<16f818.h>
#fuses INTRC, NOWDT, NOLVP
#use delay (clock=4000000)


void main(){

     while(true){
   
     
       if (!input(pin_a0)){
          output_high (pin_b0);     
  }
       if (!input(pin_a1)){
          output_low (pin_b0);
  }  
       if (!input(pin_a2)){
         output_high (pin_b0);
  }      
       if (!input(pin_a3)){
         output_low (pin_b0);  
           delay_ms(4000);
         output_high (pin_b1);
 }
       if(!input(pin_a4)){
         output_low (pin_b1);
}
     }
}
       

 

Ola, não chefe, é sistema pneumático, as saídas do pic acionam a solenóide da válvula que controla a ação do pistão, solenóide ligada>ar em um sentido>pistão desce/ desligada>ar no sentido oposto>pistão sobe, é assim que funciona,

eu busquei suporte com o pessoal do curso que eu fiz de linguagem c, e me responderam muito vagamente sobre a criação de uma FLAG, ou seja, uma variável de início "0", porém segundo eles teria que fazer um if pra testar a flag em 0 junto com o acionamento da chave, mas esse código é impossível, ou você faz um if da variável ou do acionamento da chave, ou estou errado?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Paulo Agostinho   imagino que com a "flag" funcione , então no "IF" faça a comparação com pin_A0 e com a flag , e se os dois forem zero o pistão desce e quando chegar em baixo e desligar essa chave então atribua outro valor , que pode ser "1" , na flag assim quando o pistão chegar em cima e fizer a comparação, o pin_A0 estará com valor zero mas a flag não e assim o pistão não desce , e sendo que apara descer a flag precisa voltar ao valor zero no final do outro ciclo .

void main()
{
    int flag = 0;
    while(true)
    {
        if (!input(pin_a0) && flag == 0)
        {
            output_high (pin_b0);     
            flag = 1;
        }
        if (!input(pin_a1))
        {
            output_low (pin_b0);
            flag = 1;
        }  
    }
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Está muito confusa a sua explicação. Primeiro nos fale dos recursos disponíveis. Depois nos fale da automação pretendida. O código fica por último, não dá para falar dele sem conhecer a situação antes.

Pelo que entendi temos um pistão pneumático e uma válvula com 1 solenóide, isto é, ligada injeta pressão para expansão do pistão e desligada injeta pressão para recolhimento do pistão. É isso?

Também falaste de uma chave no mecanismo. Por acaso se refere a um fim de curso? Ele está localizado na retração ou na expansão do cilindro?

No seu ciclo, o que deseja? que o cilindro expanda e na sequência retraia sozinho e fique no aguardo de uma nova ordem? Se for isso, tem um fim de curso sinalizando que a expansão foi conseguida ou vai dar um prazo (tempo) para o cilindro expandir e na sequência ordenar a retração?

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Também não entendi direito (se é que entendo alguma coisa). Melhor falar com desenhos ou fotos e etc. Também é bom saber o que este treco faz por completo - se não for segredo de estado.

Bem... ativando meu modo minimalista e focando apenas no título do tópico que entendi um pouco + (ou -)

//RB0=entrada,RB1=saída.. óbvio d+ 
if (!RB0) 
	{
	RB1^=1; //alterna
	deyayms(10); //debouncing - mas solte o botão rápido
	while(!RB0); //solte o botão pra valer - opcional
	} 

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!