Ir ao conteúdo
  • Cadastre-se

Problemas com entradas...


Ir à solução Resolvido por .if,

Posts recomendados

Fala galera, tudo bom?

Bem, estou tentando fazer um motor de passo girar (em um sentido, por enquanto) somente enquanto um botão é acionado (uma volta por click do botão).

usando o pic 16F628a, e um motor de passo bipolar (compilador: ccs C, simulador: protheus isis);

 

bem, segue o codigo fonte: 

 

#include <16F628a.h>
#fuses INTRC_IO, NOWDT, PUT, BROWNOUT, NOLVP, NOMCLR
#use delay(clock=4000000)
#BYTE TRISA= 1
 
void main(){
   
   int tempo, cont;
   tempo = 100;
   
   while(1){
   cont = input(pin_a0);
   
      if (cont){
         output_low(PIN_B1);
         output_high(PIN_B0);    // alimentação de 2
      
         delay_ms(tempo);
         output_high(PIN_B1);   // alimentação de 2 e 3 ao mesmo tempo (angulo entre 0 e 90)
         output_high(PIN_B0);
         delay_ms(tempo);
      
         output_low(PIN_B0);
         output_high(PIN_B1);    // alimentação de 3
      
         delay_ms(tempo);
         output_low(PIN_B1);     //alimentação de 1 e 3 ao mesmo tempo
         output_high(PIN_B2);    // em outras palavras: meio passo entre 90 e 180
         output_high(PIN_B0);
         output_high(PIN_B1);
         delay_ms(tempo);
      
         output_low(PIN_B1);
         output_high(PIN_B2); 
         output_high(PIN_B0);    // alimentação de 1 (invertendo o sentido de 2);
      
         delay_ms(tempo);
         output_low(PIN_B1);
         output_high(PIN_B2); 
         output_high(PIN_B0);
         output_high(PIN_B1);
         output_high(PIN_B3);
         delay_ms(tempo);
      
         output_low(PIN_B2);
         output_low(PIN_B0);
         output_high(PIN_B1);
         output_high(PIN_B3);
      
         delay_ms(tempo);
         output_high(PIN_B1);
         output_high(PIN_B3);
         output_high(PIN_B0);
      
         delay_ms(tempo);
      
         output_low(PIN_B0);
         output_low(PIN_B1);
         output_low(PIN_B2);
         output_low(PIN_B3);
        
       
      }
       
   }
}
 
O problema é, ao pressionar o bendito botão, o motor começa a girar e não para mais.
Alguma ideia do que fiz errado?
 
Ps: o circuito do protheus está no anexo.

motor de passo.zip

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
  • Solução

perdão por não avaliar seu fonte como você merece.

tipo assim...você vai ter que ver quantos º cada passo. Digamos 3. Uma volta=360º /3 = 120. Faça um loop de 120

 

A essência:

for(;{while(!cont); //espera pressionar o botão (está em pulldown)for (i=0;i<120;i++) da_um_passo(); //dá uma volta}

Seria desejável com sensor de posição

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

perdão por não avaliar seu fonte como você merece.

tipo assim...você vai ter que ver quantos º cada passo. Digamos 3. Uma volta=360º /3 = 120. Faça um loop de 120

 

A essência:

for(;{while(!cont); //espera pressionar o botão (está em pulldown)for (i=0;i<120;i++) da_um_passo(); //dá uma volta}

Seria desejável com sensor de posição

Olá, obrigado pela atenção, e tambem pela ideia do codigo.

Meu erro foi não configurar os pinos como entrada ( as vezes penso em desistir de todo, será porque? Kkk).

Mais ainda assim, obrigado pelo codigo (o qual estou usando para contar as voltas do meu motor) e tambem pela atenção.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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...