Hallo,
ich habe versucht vom ASURO die Motorsteuerung auf das RN-Control zu übertragen. Leider funktioniert das Programm nicht.
Kann mir jemand helfen?
Hier das hauptprogramm
und Motor.cCode:/* Hier werden die Grundlegenden Motorbefehle ausprobiert Sie sind vom ASURO übernommen und an das RN-Control angepasst worden */ #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #include "motor.h" // einbinden der Motortreiber #define FALSE 0 #define TRUE 1 #define OFF 0 #define ON 1 #define GREEN 1 #define RED 2 #define YELLOW 3 int main(void) { unsigned int x, y; MotorInit(); MotorDir(FWD,FWD); MotorStop(); MotorSpeed(500,500); for(;;) { MotorDir(FWD,FWD); MotorSpeed(500,500); // Beide Motoren gleiche Richtung vorwärts for(x=0;x<=40000;x++) asm volatile ("nop"); // Pause MotorStop(); MotorDir(FWD,BWD); MotorSpeed(500,500); // Motoren verschiedene Richtungen und Geschwindigkeiten for(x=0;x<=40000;x++) asm volatile ("nop"); // Pause MotorStop(); MotorDir(BWD,FWD); MotorSpeed(500,500); // Motoren verschiedene Richtungen und Geschwindigkeiten for(x=0;x<=40000;x++) asm volatile ("nop"); // Pause MotorStop(); for(x=0;x<=60000;x++) // Längere Pause { for(y=0;y<=60000;y++) asm volatile ("nop"); } } return 0; }
und motor.hCode:/* Motortreiber für das RN-Control Board mit 2 Getriebemotoren Der Treiber ist an den Treibern für den ASURO angelehnt by Stefan 18.09.2005 */ #include <avr/io.h> #include "motor.h" void MotorInit(void) // Initialisierung der Motoren { DDRD= (1<<PD4) | (1<<PD5); // PWM Pins als Ausgang festlegen (links/rechts) // Motor Ports für die Richtung festlegen (als Ausgänge) DDRC= (1<<PC6) | (1<<PC7); // 6=Motor 1 Kanal 1 7= Motor 1 Kanal 2 DDRB= (1<<PB0) | (1<<PB1); // 0=Motor 2 Kanal 1 1= Motor 2 Kanal 2 // PWM einstellen TCCR1A = (1<<COM1A1) | (1<<COM1B1) | (1<<COM1A0) | (1<<COM1B0) | (1<<WGM11)|(1<<WGM10); // 10 Bit Pwm, invertierend TCCR1B = (1<<CS11); // Prescaler 8 // Ausgänge für PWM OCR1A=1; // Mindestzeit für PWM1 OCR1B=1; // Mindestzeit für PWM2 // und in Ausgangswerte setzen } /* Motor Geschwindigkeit verändern */ void MotorSpeed(unsigned int left_speed, unsigned int right_speed) { OCR1A = left_speed; OCR1B = right_speed; } /* Motor Richtung festlegen (FWD; BWD) */ void MotorDir(unsigned char left_dir, unsigned char right_dir) { PORTB = (PORTB &~ ((1 << PB0) | (1 << PB1))) | right_dir; if (left_dir == FWD) left_dir = (1 << PC6); else left_dir = (1 << PC7); PORTD = (PORTD &~ ((1 << PC6) | (1 << PC7))) | left_dir; } /* Motoren Stoppen */ void MotorStop (void) { OCR1A = 0; OCR1B = 0; }
Vielen DankCode:/* Motortreiber für das RN-Control Board mit 2 Getriebemotoren Der Treiber ist an den Treibern für den ASURO angelehnt by Stefan 18.09.2005 */ #define FWD (1 << PB1) /* (1 << PC7) */ #define BWD (1 << PB0) /* (1 << PC6) */ void MotorInit(void); // Initialisierung der Motoren /* Motor Geschwindigkeit verändern von 0 bis 1024 */ void MotorSpeed(unsigned int left_speed, unsigned int right_speed); /* Motor Richtung festlegen (FWD; BWD) */ void MotorDir(unsigned char left_dir, unsigned char right_dir); /* Motoren Stoppen */ void MotorStop (void);
Gruß Stefan







Zitieren

Lesezeichen