Ir ao conteúdo

Programa motor passo PIC16f877a Linguagem C MikroC


sergioantonio

Posts recomendados

Postado

Fiz um programa motor de passo usando ULN2803 que ao acionar o botão 1 ele

rotociona para direita e botão 2 para esquerda,esta funcionando normal,porém

gostaria de interagir com um potenciometro que esta ligado ao pino 2 RA0/ANO do PIC ou com o LCD 2x16 ligado nos pinos do PortD e RE0,RE1 e RE2,ou até

mesmo com os 4 displays de 7segmentos ligados nos pinos RB4 a RB7,sou iniciante estou aprendendo por conta (consultas,livros e internet),pensei em tentar controlar a velocodade com o potenciometro,o LCD escrever o botão pressionado e a direção, enfim qualquer interação.ficaria muito grato a quem

poder me ajudar,se possivel enviar exemplos para meu e-mail: [email protected]. Muito obrigado,espero que possam me ajudar .Aguardo

ansiosamente.GRATO.

Postado

Você pode utilizar interrupção por timer para controlar o motor de passo. Ai basta mudar a frequência de interrupção após fazer um simples tratamento matemático no valor lido pelo conversor AD. Poste o código que você já fez, assim fica mais fácil de fazer um exemplo.

Postado
Você pode utilizar interrupção por timer para controlar o motor de passo. Ai basta mudar a frequência de interrupção após fazer um simples tratamento matemático no valor lido pelo conversor AD. Poste o código que você já fez, assim fica mais fácil de fazer um exemplo.

Motordepasso.c

Descrição: Ao pressionar SW1eSW3 o motor gira no sentido horário. Ao pressionar SW2e SW4, o motor gira no sentido anti-horario.

Data: 09/06/2012

Autor: Sergio A Silva

PIC16F877A

Compilador MikroC for Pic 8.2.0.0

*/
//ENTRADAS
#define SW1 portb.f0
#define SW2 portb.f1
#define SW3 portb.f2
#define SW4 portb.f3
//SAIDAS
unsigned short shifter;
//Subrotinas (Funções)
void Config () // Configuração dos ports em uso e inicialização de variáveis.
{
TRISB = 0b00001111; // Bits 7...4 como saida e Bits 3...0 como entradas (PORTB)
TRISD = 0; // Todos os pinos configurados como saída do PORTD
PORTD = 0b00000011; // inicialização do PORTD
PORTB = 0B00010000; // inicialização do PORTB
Shifter = 0b00000011; // inicialização da variável shifter
}
void main()
{
config (); //Chama e executa a função "config"
while(1) // Loop infinito
{
//PORTB.RB0 = 1;
while(!SW1) //Shift à esquerda
{
shifter <<= 1;
if(shifter==0b00011000)
{
shifter=0b00001001;
}
if(shifter==0b00010010)
{
shifter=0b00000011;
}
portd=shifter;
delay_ms(5);
}
while(!SW2) //Shift à direita
{
shifter >>= 1;
if(shifter==0b00000001)
{
shifter=0b00001001;
}
if(shifter==0b00000100)
{
shifter=0b00001100;
}
portd=shifter;
delay_ms(5);
}
while(!SW3) //Shift à esquerda
{
shifter <<= 1;
if(shifter==0b00011000)
{
shifter=0b00001001;
}
if(shifter==0b00010010)
{
shifter=0b00000011;
}
portd=shifter;
delay_ms(5);
}
while(!SW4) //Shift à direita
{
shifter >>= 1;
if(shifter==0b00000001)
{
shifter=0b00001001;
}
if(shifter==0b00000100)
{
shifter=0b00001100;
}
portd=shifter;
delay_ms(5);
}
} //fim do loop infinito
}// fim do main

Motordepasso.c

Descrição: Ao pressionar SW1eSW3 o motor gira no sentido horário. Ao pressionar SW2e SW4, o motor gira no sentido anti-horario.

Data: 09/06/2012

Autor: Sergio A Silva

PIC16F877A

Compilador MikroC for Pic 8.2.0.0

*/
//ENTRADAS
#define SW1 portb.f0
#define SW2 portb.f1
#define SW3 portb.f2
#define SW4 portb.f3
//SAIDAS
unsigned short shifter;
//Subrotinas (Funções)
void Config () // Configuração dos ports em uso e inicialização de variáveis.
{
TRISB = 0b00001111; // Bits 7...4 como saida e Bits 3...0 como entradas (PORTB)
TRISD = 0; // Todos os pinos configurados como saída do PORTD
PORTD = 0b00000011; // inicialização do PORTD
PORTB = 0B00010000; // inicialização do PORTB
Shifter = 0b00000011; // inicialização da variável shifter
}
void main()
{
config (); //Chama e executa a função "config"
while(1) // Loop infinito
{
//PORTB.RB0 = 1;
while(!SW1) //Shift à esquerda
{
shifter <<= 1;
if(shifter==0b00011000)
{
shifter=0b00001001;
}
if(shifter==0b00010010)
{
shifter=0b00000011;
}
portd=shifter;
delay_ms(5);
}
while(!SW2) //Shift à direita
{
shifter >>= 1;
if(shifter==0b00000001)
{
shifter=0b00001001;
}
if(shifter==0b00000100)
{
shifter=0b00001100;
}
portd=shifter;
delay_ms(5);
}
while(!SW3) //Shift à esquerda
{
shifter <<= 1;
if(shifter==0b00011000)
{
shifter=0b00001001;
}
if(shifter==0b00010010)
{
shifter=0b00000011;
}
portd=shifter;
delay_ms(5);
}
while(!SW4) //Shift à direita
{
shifter >>= 1;
if(shifter==0b00000001)
{
shifter=0b00001001;
}
if(shifter==0b00000100)
{
shifter=0b00001100;
}
portd=shifter;
delay_ms(5);
}
} //fim do loop infinito
}// fim do main

Arquivado

Este tópico foi arquivado e está fechado para 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!