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 hier ist jetzt meine neuer Code.
OK ich mus die Interrupts in dem Interrupt deaktivieren ?
Lesezeichen