Klappt leider nicht, es scheint als würde TCCR2 nicht auf Null gesetzt werden. Oder der Timer gleich wieder gestartet.
Mein Code sieht komplett im Moment so aus:
Code:#include <avr/io.h> // I/O Port definitions #include <avr/interrupt.h> // Interrupt macros #define F_CPU 16000000 #define timer 236 volatile int ms = 0; void pwm_init(void) { TIMSK |= (1<<TICIE1); //Timer 1 (Port 0/1) TCCR1A = (1<<COM1A1)| (1<<COM1B1); //Clear OC on Comp Match when up-count, set downcount TCCR1B = (1<<WGM13) | (1<<CS11) ; //PWM Phase abd Freq Correct. Prescaler 8 ICR1 = 20000; //Periodendauer Servo 20ms OCR1A = 1000; //Servosignal (Port 0) OCR1B = 1000; //Servosignal (PORT 1) //Timer 2 (Port 2) TCCR2 = (1<<WGM20)| (1<<COM21) /*| (1<<CS21)*/ | (1<<CS22); OCR2 = 150; }; ISR(TIMER2_OVF_vect) { TCCR2 = 0x00; }; ISR(TIMER1_CAPT_vect) { TCCR2 = (1<<WGM20) | (1<<COM21) | (1<<CS22); }; /*void timer_init(void) { TCCR0 |= (1<<CS01); TCNT0 = timer; TIMSK |= (1<<TOIE0); TIFR |= (1<<TOV0); }; ISR(TIMER0_OVF_vect) { TCNT0 = timer; ms++; if (ms >= 1000) { OCR1A++; ms = 0; } if (OCR1A >= 2000) OCR1A = 1000; };*/ int main(void) { //Initialisierungen sei(); //Globale Interupts zulassen pwm_init(); //PWM initialisieren /*timer_init(); //Timer initialisieren*/ DDRB |= (1<<PORTB1) | (1<<PORTB2) | (1<<PORTB3); //B... AUSGANG PORTB &= ~((1<<PORTB1) | (1<<PORTB2) | (1<<PORTB3)); //B.. Low while(1) { } }






Zitieren

Lesezeichen