Ok hier ist jetzt meine neuer Code.Code:#define F_CPU 4000000UL #include <avr/interrupt.h> #include <avr/io.h> #include <util/delay.h> #define SERVOPIN 7 #define SERVOPORT PORTD #define DDRSERVO DDRD volatile unsigned char servopos = 150; void servo_init() { TIMSK|=(1<<OCIE2); TCCR2 |= (1<<WGM21) | (1<<CS20); //Prescale=1, CTC mode OCR2 = F_CPU/100000; //alle 10µS ein IRQ DDRSERVO|=(1<<SERVOPIN); }; int main (void) { DDRD = 0xff; sei(); servo_init(); while(1) { } return 0; } ISR(TIMER2_COMP_vect) { static int count; if(count>servopos)SERVOPORT&=~(1<<SERVOPIN); else SERVOPORT|=(1<<SERVOPIN); if(count<2000)count++; // Die Impulse sollten alle 20ms gesendet werden! 6.2.11 mic else count=0; };
OK ich mus die Interrupts in dem Interrupt deaktivieren ?
Lesezeichen