Lame
29.06.2005, 14:05
Hallo habe ein Roboter mit dem ATmega8535 gebaut und möchte nun DC Motoren anteuern. Habe schon ein fertiges Programm mit den dazu gehörigen Unterprogrammen. Eins davon ist dies
/*
Titel: Schrittmotor-Routinen für AATiS-Roboter
Autor: Gunther May, DL3ABQ
Datum: 7/2002
Prozessor: AT90S8535/ATMega8535
Lizenz: GNU Public License (gpl.txt)
*/
#include <io.h>
#include "stepper.h"
/*
** Schrittmuster in Abhängigkeit vom Motortyp festlegen
*/
#ifdef BIPOLAR
#define STEPPARTS 4
const
unsigned char step_pat[4][STEPPARTS] = {{255-(5+5*16), 255-(9+6*16), 255-(10+10*16), 255-(6+9*16)},
{255-(6+9*16), 255-(10+10*16), 255-(9+6*16), 255-(5+5*16)},
{255-(5+5*16), 255-(6+6*16), 255-(10+10*16), 255-(9+9*16)},
{255-(5+5*16), 255-(9+9*16), 255-(10+10*16), 255-(6+6*16)}};
#endif
#ifdef UNIPOLAR
#define STEPPARTS 8
const
unsigned char step_pat[4][STEPPARTS] = {{255-(1+(1+8)*16), 255-(1+2+8*16), 255-(2+(4+8)*16), 255-(2+4+4*16),
255-(4+(2+4)*16), 255-(4+8+2*16), 255-(8+(1+2)*16), 255-(8+1+1*16)},
{255-(1+8+1*16), 255-(8+(1+2)*16), 255-(4+8+2*16), 255-(4+(2+4)*16),
255-(2+4+4*16), 255-(2+(4+8)*16), 255-(1+2+8*16), 255-(1+(8+1)*16)},
{255-(1+8+(1+8)*16), 255-(8+8*16), 255-(4+8+(4+8)*16), 255-(4+4*16),
255-(2+4+(2+4)*16), 255-(2+2*16), 255-(1+2+(1+2)*16), 255-(1+1*16)},
{255-(1+1*16), 255-(1+2+(1+2)*16), 255-(2+2*16), 255-(2+4+(2+4)*16),
255-(4+4*16), 255-(4+8+(4+8)*16), 255-(8+8*16), 255-(8+1+(8+1)*16)}};
#endif
/*
** Funktions-Deklarationen
*/
volatile unsigned char dummy; //für Delay-Funktion
void stepdelay(unsigned char del)
{
unsigned char i,k,l;
dummy=17;
for(i=0; i<del; i++) {
for(k=0; k<2; k++) {
for(l=0; l<255; l++) {
dummy++;
}
}
}
}
void stepper_on()
{
outp(0xFF, STEPPER_DDR); /* all port bits as output */
outp(0x11, STEPPER_PORT);
}/*stepper_on*/
void stepper_off()
{
outp(0xFF, STEPPER_DDR); /* all port bits as output */
outp(0xFF, STEPPER_PORT);
}/*stepper_off*/
void stepper_go(unsigned char dir, unsigned short steps, unsigned char del)
{
unsigned short i;
unsigned char k;
outp(0xFF, STEPPER_DDR); /* all port bits as output */
for(i=0; i<steps; i++) {
for(k=0; k<STEPPARTS; k++) {
outp(step_pat[dir][k], STEPPER_PORT);
stepdelay(del);
}
}
}/*stepper_go*/
Wenn ich hier in der 5 letzten Zeile das [k] durch ein [i] ersetze dann läuft der Roboter schon mal gerade aus und springt nicht von einer Drehung zur anderen. So nun muss er sich nur noch drehen können.
Habe mal den Link wo alle Programme zusammen sind. Das Programm das ich benötige wäre Demo2.
Hier der Link http://dl3abq.jufu.org/dl.html
kann sich das bitte jamand mal anschauen. Muss das unbedingt hin bekommen.
Lame
/*
Titel: Schrittmotor-Routinen für AATiS-Roboter
Autor: Gunther May, DL3ABQ
Datum: 7/2002
Prozessor: AT90S8535/ATMega8535
Lizenz: GNU Public License (gpl.txt)
*/
#include <io.h>
#include "stepper.h"
/*
** Schrittmuster in Abhängigkeit vom Motortyp festlegen
*/
#ifdef BIPOLAR
#define STEPPARTS 4
const
unsigned char step_pat[4][STEPPARTS] = {{255-(5+5*16), 255-(9+6*16), 255-(10+10*16), 255-(6+9*16)},
{255-(6+9*16), 255-(10+10*16), 255-(9+6*16), 255-(5+5*16)},
{255-(5+5*16), 255-(6+6*16), 255-(10+10*16), 255-(9+9*16)},
{255-(5+5*16), 255-(9+9*16), 255-(10+10*16), 255-(6+6*16)}};
#endif
#ifdef UNIPOLAR
#define STEPPARTS 8
const
unsigned char step_pat[4][STEPPARTS] = {{255-(1+(1+8)*16), 255-(1+2+8*16), 255-(2+(4+8)*16), 255-(2+4+4*16),
255-(4+(2+4)*16), 255-(4+8+2*16), 255-(8+(1+2)*16), 255-(8+1+1*16)},
{255-(1+8+1*16), 255-(8+(1+2)*16), 255-(4+8+2*16), 255-(4+(2+4)*16),
255-(2+4+4*16), 255-(2+(4+8)*16), 255-(1+2+8*16), 255-(1+(8+1)*16)},
{255-(1+8+(1+8)*16), 255-(8+8*16), 255-(4+8+(4+8)*16), 255-(4+4*16),
255-(2+4+(2+4)*16), 255-(2+2*16), 255-(1+2+(1+2)*16), 255-(1+1*16)},
{255-(1+1*16), 255-(1+2+(1+2)*16), 255-(2+2*16), 255-(2+4+(2+4)*16),
255-(4+4*16), 255-(4+8+(4+8)*16), 255-(8+8*16), 255-(8+1+(8+1)*16)}};
#endif
/*
** Funktions-Deklarationen
*/
volatile unsigned char dummy; //für Delay-Funktion
void stepdelay(unsigned char del)
{
unsigned char i,k,l;
dummy=17;
for(i=0; i<del; i++) {
for(k=0; k<2; k++) {
for(l=0; l<255; l++) {
dummy++;
}
}
}
}
void stepper_on()
{
outp(0xFF, STEPPER_DDR); /* all port bits as output */
outp(0x11, STEPPER_PORT);
}/*stepper_on*/
void stepper_off()
{
outp(0xFF, STEPPER_DDR); /* all port bits as output */
outp(0xFF, STEPPER_PORT);
}/*stepper_off*/
void stepper_go(unsigned char dir, unsigned short steps, unsigned char del)
{
unsigned short i;
unsigned char k;
outp(0xFF, STEPPER_DDR); /* all port bits as output */
for(i=0; i<steps; i++) {
for(k=0; k<STEPPARTS; k++) {
outp(step_pat[dir][k], STEPPER_PORT);
stepdelay(del);
}
}
}/*stepper_go*/
Wenn ich hier in der 5 letzten Zeile das [k] durch ein [i] ersetze dann läuft der Roboter schon mal gerade aus und springt nicht von einer Drehung zur anderen. So nun muss er sich nur noch drehen können.
Habe mal den Link wo alle Programme zusammen sind. Das Programm das ich benötige wäre Demo2.
Hier der Link http://dl3abq.jufu.org/dl.html
kann sich das bitte jamand mal anschauen. Muss das unbedingt hin bekommen.
Lame