Hallo,

ich habe bereits ein Programm geschrieben mit dem ich einen Servo einwandfrei ansteuern kann.
Nun habe ich versucht es so zu verändern das ich 3 Servos gleichzeitig ansteuern kann.
Eigentlich soll das Programm folgendes tun:
1. Signalpin von Servo1 auf High
2. Warten bis dessen Stellzeit rum
3. Signalpin Servo 1 auf Low
4. Signalpin 2 auf High
...
nach dem 3. Servo soll er nochmal so lange warten, das 20ms für Servo1 voll sind. Und dann wieder mit Servo 1 anfangen.
Aber iwie reagieren die Servos garnicht (außer beim einschalten des Stroms).

Entdeckt iwer den Denkfehler in meinem Programm? Und wie gesagt die Zeiten müssten stimmen.

Danke, Knipser.

Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#include <math.h>

#define F_CPU       16000000UL

#define BAUD        9600UL
#define UBRR_BAUD   ((F_CPU/(16UL*BAUD))-1)

#define SERVO_DDR1		DDRA
#define SERVO_PORT1		PORTA
#define SERVO_PORTPIN1	PA0

#define SERVO_DDR2		DDRA
#define SERVO_PORT2		PORTA
#define SERVO_PORTPIN2	PA1

#define SERVO_DDR3		DDRA
#define SERVO_PORT3		PORTA
#define SERVO_PORTPIN3	PA2

#define LED_DDR			DDRD        
#define LED_PORT		PORTD       
#define LED_PORTPIN		PD7         

volatile uint16_t z,q,p;						
volatile uint8_t t;							
volatile uint16_t servo1,servo2,servo3;

TIMER0_interrupt_init(void){
	z = 0;
	TCNT0 = 0;
	OCR0 = 9;
	TCCR0 = 0x0a;
	TIMSK |= (1<<OCIE0);            //Interrupt aller 1/200ms  ->200 je ms
	sei();
	}

ISR(TIMER0_COMP_vect){
	z++;

	}


int main(void)
{
    // USART initialisieren
    uart_init();
	
	TIMER0_interrupt_init();
	
	t = 1;
		
	servo1 = 255;
	servo2 = 255;
	servo3 = 355;
	
	LED_DDR |= (1<<LED_PORTPIN);
	
	LED_PORT &= ~(1<<LED_PORTPIN);
	
	SERVO_DDR1 |= (1<<SERVO_PORTPIN1);
	SERVO_DDR2 |= (1<<SERVO_PORTPIN2);
	SERVO_DDR3 |= (1<<SERVO_PORTPIN3);
	
	SERVO_PORT1 |= (1<<SERVO_PORTPIN1);

    sei();

    while (1){		
		if (t==1 && z==servo1){
			t=2;
			z=0;
			SERVO_PORT1 &= ~(1<<SERVO_PORTPIN1);
			SERVO_PORT2 |= (1<<SERVO_PORTPIN2);
			LED_PORT |=(1<<LED_PORTPIN);			
			}
		if (t==2 && z==servo2){
			t=3;
			z=0;
			SERVO_PORT2 &= ~(1<<SERVO_PORTPIN2);
			SERVO_PORT3 |= (1<<SERVO_PORTPIN3);
			}
		if (t==3 && z==servo3){
			t=4;
			z=0;
			SERVO_PORT3 &= ~(1<<SERVO_PORTPIN3);
			q = (4000-servo2-servo3);
			}
		if (t==4 && z==q){
			z = 0;
			t = 1;
			SERVO_PORT1 |= (1<<SERVO_PORTPIN1);			
			}
		if (z==4000){
			z = 0;
			t = 1;
			SERVO_PORT1 |= (1<<SERVO_PORTPIN1);
			}
		return 0;
	}
}