Ir para conteúdo
Fórum Script Brasil
  • 0

programação pic - motor de passo (desespero ! )


Eric Cerqueira

Pergunta

olá,,, preciso fazer uma antena girar usando um motor de passo e que os dados analogicos de tensao gerados pela antena sejam armazenados num buffer do dspic e enviados posteriormente via porta serial para o computador para ser analisado no matlab.
os botoes 1 e 2 servem apenas para ajeitar a posiçao inicial... quando apertar o botao 3 a cada passo do motor o valor analogico de tensao que vem da antena deve ser convertido para digital pelo conversor analogico - digital do dspic e armazenado no buffer.
quando o botao 4 for apertado os dados que estavam no buffer do dspic devem ser enviados para o computador via porta serial..
minha duvida esta justamente nesse envio de dados para a memoria e aquisição desses dados posteriormnete...não sei nem por onde começar =/ ... comecei a programar a pouco tempo... segue uma imagem do pic no ISIS e o codigo ate onde fiz ,,, já ajuda muito respondendo qualquer coisa !!
include <P33FJ12GP202.h>
_FBS(BSS_NO_FLASH)
_FOSCSEL (FNOSC_PRI & IOL1WAY_OFF)
_FOSC (POSCMD_XT)
_FWDT (FWDTEN_OFF)
//_FICD(JTAGEN_OFF & BKBUG_OFF)
define BT1 PORTAbits.RA4 //PORTx lê dados do port
define BT2 PORTBbits.RB9
define BT3 PORTBbits.RB8
define BT4 PORTBbits.RB7
define OUT1 LATBbits.LATB10 //LATx escreve dados no port
define OUT2 LATBbits.LATB11
define OUT3 LATBbits.LATB12
define OUT4 LATBbits.LATB13
void inicializa(void);
void delay_ms(unsigned int tempo);
void delay_us(unsigned int tempo);
void rota (int step);
void main(void)
{
int step=0;
int aux;
inicializa();
OUT1=0;
OUT2=0;
OUT3=0;
OUT4=0;
while(1)
{
if (BT1==0)//dá um passo no sentido horario
{
step++;
if (step>3) step =0;
rota (step);
}
if (BT2==0)//dá um passo no sentido anti-horario
{
step--;
if (step<0) step =3;
rota (step);
}
/*aux depende do angulo de giro do motor, q no caso é 5.625, logo 1 volta completa necessita 64 passos */
if (BT3==0)//dá uma volta no sentido horario
{
for(aux = 0 ;aux <64 ; aux++ )
{
step++;
if(step>3) step=0;
rota(step);
minha duvida começa aki !!! . como enviar os dados da antena ate a memoria do pic??para qual porta devo enviar o sinal analógico ??como fazer a conversao analog - dgital ??como armazenar os dados na memoria ??
}
}
if botao 4 -- como pegar os dados da memoria e enviar ao pc via serial ??
}//while
}//main
void inicializa(void)
{
ADPCFG=0x00FF;
TRISB=0b0000001110000000;
TRISA=0b0000000000010000;
}
void delay_ms(unsigned int tempo)
{
unsigned int tempo1;
if (!tempo) return;
for (tempo1=1;tempo1<=tempo;tempo1++) delay_us(500);
}
void delay_us(unsigned int tempo)
{
if (!tempo) return;
do
{
tempo--;
}while(tempo);
}
void rota (int step) // rotina para o motor
{
switch (step)
{
case 0:
OUT1=0;
OUT2=0;
OUT3=0;
OUT4=1;
break;
case 1:
OUT1=0;
OUT2=0;
OUT3=1;
OUT4=0;
break;
case 2:
OUT1=0;
OUT2=1;
OUT3=0;
OUT4=0;
break;
case 3:
OUT1=1;
OUT2=0;
OUT3=0;
OUT4=0;
break;
}//switch
delay_ms(100);
}//rota
void delay_us(unsigned int tempo)
{
if (!tempo) return;
do
{
tempo--;
}while(tempo);
}
void rota (int step) // rotina para o motor
{
switch (step)
{
case 0:
OUT1=0;
OUT2=0;
OUT3=0;
OUT4=1;
break;
case 1:
OUT1=0;
OUT2=0;
OUT3=1;
OUT4=0;
break;
case 2:
OUT1=0;
OUT2=1;
OUT3=0;
OUT4=0;
break;
case 3:
OUT1=1;
OUT2=0;
OUT3=0;
OUT4=0;
break;
}//switch
delay_ms(100);
}//rota
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...