EDIT - Esqueci de falar, que a programação na verdade, são só os eixos X e Y. Agora estamos usando dois PICS, um para controlar cada eixo.
Olá, sou novo no fórum, e ele me foi recomendado pelo meu professor. Estou postando aqui para pedir ajuda, pois estamos com problemas na programação do nosso projeto de feira: um Plotter (Você envia as coordenadas de um desenho para o computador, e através de uma porta paralela que se comunica com a placa, ele faz o desenho para você). Estamos usando o driver L298 e dois PIC16F877A com motores unipolares. O programa é o seguinte:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include <16F877A.h>
#fuses nowdt,hs,put,noprotect,nodebug,brownout,nolvp,nocpd,nowrt,reserved
#use delay(clock=20000000)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)
#byte porta=0x05
#byte portb=0x06
#byte portc=0x07
#byte portd=0x08
#byte porte=0x09
void main()
{
set_tris_a(0b11111111);
set_tris_b(0b00000000);
set_tris_c(0b00000000);
set_tris_d(0b00000000);
set_tris_e(0b00000000);
char values[] = {58,40,57,17,53,36,54,18};
int passo1 = 0, passo2 = 0, passo3 = 0;
unsigned char xold=0, yold=0, zold=0;
while(true){
if(input(PIN_A0))xold=0;
if(input(PIN_A2))yold=0;
if(input(PIN_A4))zold=0;
//****************** EIXO X ****************************************************
if((!input(PIN_A0))&&(xold==0))
{
if(input(PIN_A1))
{
(passo1<8 )?(passo1++):(passo1=0);
output_b(values[passo1]);
}
else{
(passo1>0)?(passo1--):(passo1=7);
output_b(values[passo1]);
}
if(!input(PIN_A0))xold=1;
}
//***************** EIXO Y *****************************************************
if((!input(PIN_A2))&&(xold==0))
{
if(input(PIN_A3))
{
(passo2<8 )?(passo2++):(passo2=0);
output_c(values[passo2]);
}
else{
(passo2>0)?(passo2--):(passo2=7);
output_c(values[passo2]);
}
if(!input(PIN_A2))xold=1;
}
//***************** EIXO Z *****************************************************
if((!input(PIN_A4))&&(zold==0))
{
if(input(PIN_A5))
{
(passo3<8 ) ?(passo3++):(passo3=0);
output_d(values[passo3]);
}
else{
(passo3>0)?(passo3--):(passo3=7);
output_d(values[passo3]);
}
if(!input(PIN_A4))zold=1;
}
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Consultando o Datasheet, verificamos que os valores para Meio-Passo são os citados no início (58, 36, etc...), mas não estamos conseguindo fazer funcionar corretamente.
Também estamos em dúvida com qual programa usar para controlar os motores (TurboCNC ou Mach3), e também precisamos de um programa que funcione para transformar arquivos dwf em G-Code.
Qualquer ajuda será extremamente bem-vinda.
Obrigado desde já