Gast
#3387570
Liebe Genies, ich versuch schon den ganzen tag simpelst eine LED über interrupts blinken zu lassen. Ich habe gefühlt 100 beiträge gelesen, finde dennoch meinen Fehler nicht. der Atmega 328 lauft auf einer platine auf 20MHz. Vielleicht findet ja einer von euch meine(n) Fehler? tausend Dank im Vorraus Markus #include <avr/io.h> #include <asf.h> #include <math.h> #include <stdlib.h> #ifndef F_CPU #define F_CPU 20000000UL #endif #include <util/delay.h> #include <avr/interrupt.h> void servo_init(void); #define SERVOPIN 1 #define SERVOPORT PORTD #define DDRSERVO DDRD int t=0; ISR(TIMER0_COMPA_vect) //interrupt { t++; } void servo_init(void) { TIMSK0|=(1<<OCIE0A); //interrupts TCCR0B |= (1<<CS00); //Prescale=1, TCCR0A |= (1<<WGM01); // CTC mode OCR0A = 199; //alle 10µs ein IRQ 0,00001s DDRSERVO|=(1<<SERVOPIN); //LED Pin als ausgang } int main (void) { servo_init(); sei (); //iknterrups an while(1) { if (t<20000)SERVOPORT|=(1<<SERVOPIN); //bis zum 20000. durchlaufen des Interrupts LED AN (200ms) else SERVOPORT |=~(0<<SERVOPIN); //ab dann LED AUS if(t>40000) t=0; // bei 40000. interruptdurchlauf t zurücksetzen (insg. 400ms) } }