N'abend zusammen,

im Moment baue ich einen Quadrocopter.

Auf der Hauptplatine befindet sich ein ATMega8 ein SPI 433Mhz Funkmodul und ein 3-Kanal G-Sensor.
Alles bis auf die Ansteuerung der 4 Motoren funktioniert.

Der bisher geschriebene Code sieht so aus:

Taktfrequenz: 16Mhz
Code:
#define running  1
//Motoren
#define VORNE  1<<PD5
#define LINKS  1<<PB0
#define RECHTS 1<<PC5
#define	HINTEN 1<<PC0

#define VORNE_EIN  PORTD|=VORNE;
#define VORNE_AUS  PORTD&=~VORNE;
#define LINKS_EIN  PORTB|=LINKS;
#define LINKS_AUS  PORTB&=~LINKS;
#define RECHTS_EIN PORTC|=RECHTS;
#define RECHTS_AUS PORTC&=~RECHTS;
#define HINTEN_EIN PORTC|=HINTEN;
#define HINTEN_AUS PORTC&=~HINTEN;

//PWM TIMER
volatile int iValVorne 	= 0;
volatile int iValLinks 	= 0;
volatile int iValRechts	= 0;
volatile int iValHinten	= 0;
int pwmCount = 0;
int pwmStep = 0;

#define TIMERVALUE_0 235			//235 mit Vorteiler 8 (20 Steps = 10us)
#define VORTEILER_0 0b00000010		//Vorteiler: 8

int main( void )
{
//Timer initialisierung
 // Timer 0 konfigurieren
 TCCR0 = VORTEILER_0; 			// Prescaler 8
 // Overflow Interrupt erlauben
 TIMSK |= (1<<TOIE0);
 TCNT0 = TIMERVALUE_0;

//Ports definieren
DDRB |= 0b11000011;
DDRC  = 0b11100011;                  // Port C als Eingang
DDRD  = 0b11111111;

//PWM-Werte einstellen
iValVorne,iValLinks,iValRechts,iValHinten = 0;

VORNE_AUS LINKS_AUS RECHTS_AUS HINTEN_AUS

sei();		//Interrupts starten

//Startsequenz der Motoren
	_delay_ms(1000);

	iValRechts = 100;
	iValLinks = 100;
	iValVorne = 100;
	iValHinten = 100;
	_delay_ms(200);

	iValRechts = 0;
	iValLinks  = 0;
	iValVorne  = 0;
	iValHinten = 0;
	_delay_ms(1000);
//Startsequenz ENDE

// Hauptschleife des Programms
    while ( running )
    {
     
     }
}

/* ################################################################################ */
/* #############################   Timer   ######################################## */
/* ################################################################################ */
ISR(TIMER0_OVF_vect)
{	TCNT0 = TIMERVALUE_0;
	// 20us
	if(pwmStep == 0) {    //1. ms
		HINTEN_EIN
		VORNE_EIN
		LINKS_EIN
		RECHTS_EIN
	}
	if(pwmStep == 1){    //2. ms

		if(pwmCount==iValVorne)		VORNE_AUS 	//else 	VORNE_EIN
		if(pwmCount==iValLinks)		LINKS_AUS 	//else 	LINKS_EIN
		if(pwmCount==iValRechts)	RECHTS_AUS	//else 	RECHTS_EIN
		if(pwmCount==iValHinten)	HINTEN_AUS	//else 	HINTEN_EIN
	}
	if(pwmStep > 1){     //3. bis 20. ms
		HINTEN_AUS
		VORNE_AUS
		LINKS_AUS
		RECHTS_AUS
	}
	if(pwmCount++ == 99){
		if(pwmStep++==19){
			pwmStep = 0;
		}
		pwmCount = 0;
	}
}
Die Startsequenz funktioniert.
Wenn ich einen Wert in iValHinten stecke, fängt der Brushlessregler an zu Piepsen (Break->Fehlerhaftes Signal)
Bei allen anderen Ansteuerungen funktioniert.
Wenn ich alle anderen Motoren rausnehme und nur den hinteren Motor ansteuere, dann funktioniert das ganze.
Ich würde sagen, dass es dadurch nicht an der Hardware liegt (Kalte Lötstellen etc.)

Sieht vllt. einer von euch einen Fehler in der Ansteuerung???

Über Hilfe würde ich mich sehr freuen
Danke und Gruß,
Zitrone