Fleischer
09.04.2006, 19:02
Hallo,
ich bin relativ neu in der AVR C Gemeinde und wollte nun ausprobieren, wie man die Schrittmotorsteuerung des RNBRFA 1.22 Boards zum Laufen bringt.
Dazu habe ich mich direkt an das BASCOM Beispielprogramm 5 gehalten und diesen Code quasi nur nach C konvertiert.
Dazu ein Auszug der wichtigen Stellen in meinem Code:
void init(void)
{
i2c_init();
i2c_start(PCF3_WRITE_ADR);
i2c_write(0x02); //Peripherie an = (00000010)
i2c_stop();
i2c_init();
i2c_start(PCF2_WRITE_ADR);
i2c_write(0x00); //alle 4LEDs aus = (00000000)
i2c_stop();
//Schrittmotoren einrichten
DDRD |= (1 << 6); //PortD.6 Pin als Ausgang setzen
DDRC = 0x3C; //PortC.(2-5) Pin als Ausgang setzen
PORTD |= (0 << 6); //Schrittmotoren Aus
PORTC |= (0 << 4); //Schrittmotor Rechts Richtung
PORTC |= (0 << 5); //Schrittmotor Links Richtung
init_timer0(); //Timer starten
}
int main (void)
{
init(); // Hardware einstellen gehen
uint16_t zeit = 500; //ms
//Schrittmotoren einschalten
PORTD |= (1 << 6);
while(1)
{
PORTC |= (1 << 2); //PING Motor2
PORTC |= (1 << 3); //PING Motor1
waitms(zeit);
PORTC |= (0 << 2); //PONG Motor2
PORTC |= (0 << 3); //PONG Motor1
waitms(zeit);
}
}
Dummerweise dreht sich keiner der beiden Motoren. Beide Motoren stehen unter Strom, lassen sich also von Hand nicht mehr drehen, was für mich bedeutet, dass die Treiber angeschalten sind.
Ich finde leider keinen Hinweis, warum sie sich nicht drehen.
Der vollständigen Quelltext inkl. Makefile ist im Anhang...
Für Hilfe wäre ich sehr dankbar...
ich bin relativ neu in der AVR C Gemeinde und wollte nun ausprobieren, wie man die Schrittmotorsteuerung des RNBRFA 1.22 Boards zum Laufen bringt.
Dazu habe ich mich direkt an das BASCOM Beispielprogramm 5 gehalten und diesen Code quasi nur nach C konvertiert.
Dazu ein Auszug der wichtigen Stellen in meinem Code:
void init(void)
{
i2c_init();
i2c_start(PCF3_WRITE_ADR);
i2c_write(0x02); //Peripherie an = (00000010)
i2c_stop();
i2c_init();
i2c_start(PCF2_WRITE_ADR);
i2c_write(0x00); //alle 4LEDs aus = (00000000)
i2c_stop();
//Schrittmotoren einrichten
DDRD |= (1 << 6); //PortD.6 Pin als Ausgang setzen
DDRC = 0x3C; //PortC.(2-5) Pin als Ausgang setzen
PORTD |= (0 << 6); //Schrittmotoren Aus
PORTC |= (0 << 4); //Schrittmotor Rechts Richtung
PORTC |= (0 << 5); //Schrittmotor Links Richtung
init_timer0(); //Timer starten
}
int main (void)
{
init(); // Hardware einstellen gehen
uint16_t zeit = 500; //ms
//Schrittmotoren einschalten
PORTD |= (1 << 6);
while(1)
{
PORTC |= (1 << 2); //PING Motor2
PORTC |= (1 << 3); //PING Motor1
waitms(zeit);
PORTC |= (0 << 2); //PONG Motor2
PORTC |= (0 << 3); //PONG Motor1
waitms(zeit);
}
}
Dummerweise dreht sich keiner der beiden Motoren. Beide Motoren stehen unter Strom, lassen sich also von Hand nicht mehr drehen, was für mich bedeutet, dass die Treiber angeschalten sind.
Ich finde leider keinen Hinweis, warum sie sich nicht drehen.
Der vollständigen Quelltext inkl. Makefile ist im Anhang...
Für Hilfe wäre ich sehr dankbar...