CBOX-Shout
Procurar
Quem está conectado?
Há 11 usuários online :: 0 registrados, 0 invisíveis e 11 visitantes Nenhum
O recorde de usuários online foi de 34 em Dom Ago 13, 2023 1:30 pm
Estatísticas
Temos 318 usuários registradosO último membro registrado é Buggsoulmitor
Os nossos membros postaram um total de 1475 mensagens em 209 assuntos
programação pic - motor de passo (desespero !)
Página 1 de 1
programação pic - motor de passo (desespero !)
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...naum 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 ,,, ja ajuda muito respondendo qualquer coisa !!
https://2img.net/r/ihimg/a/img673/1618/9lYvDb.png
include
_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
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...naum 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 ,,, ja ajuda muito respondendo qualquer coisa !!
https://2img.net/r/ihimg/a/img673/1618/9lYvDb.png
include
_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
ericmc- Nível 1
- Mensagens : 1
Data de inscrição : 03/12/2014
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos