Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Joao Gabriel

RESOLVIDO Problemas com entradas...

Recommended Posts

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

Compartilhar este post


Link para o post
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

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×