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
Code:
/*	
	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.c
Code:
/*
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;
}
und motor.h
Code:
/*
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);
Vielen Dank
Gruß Stefan