Ich denke schon das ich es richtig übernommen habe.
Die einzigen änderungen sind ja:die CPU definition hab ich drin und natürlich den rest an 16Mhz angepasst.Code:ISR(TIMER2_COMP_vect) und in der ISR TIMER1_CAPT_vect TCNT2 = 0;
Aber da scheint echt was nicht zu passen.
So siehts jetzt aus:
Code:#include <avr/io.h> //I/O Port definitions #include <avr/interrupt.h> //Interrupt macros #include <util/twi.h> //TWI STATUS #define F_CPU 16000000UL //CPU Tackt /*----------------------------------------------------------------------------------------*/ //PWM /*----------------------------------------------------------------------------------------*/ //750 = 1.5ms volatile int schulter= 1500; volatile int huefte = 1500; volatile int knie = 1500; void pwm_init(int schulter, int huefte, int knie); //PWM_init Funktion void pwm_chance(int schulter, int huefte, int knie);//Anpassen der PWM grössen /*----------------------------------------------------------------------------------------*/ //MAIN AUFRUF /*----------------------------------------------------------------------------------------*/ int main(void) { DDRB = 0xFF; //B... AUSGANG PORTB &= ~((1<<PORTB1) | (1<<PORTB2) | (1<<PORTB3)); //B.. Low sei(); //Globale Interupts zulassen pwm_init(schulter, huefte, knie); //PWM initialisieren while(1) { } } ISR(TIMER2_COMP_vect) //Überlaufinterupt Timer2 { TCCR2 = 0x00; //Löschen von Timer2 } ISR(TIMER1_CAPT_vect) //Captureinterupt Timer1 { TCNT2 = 0; TCCR2 = (1<<WGM20) | (1<<WGM21) |(1<<COM21) | (1<<CS22) | (1<<CS20); //Setzten von Timer2 } void pwm_init(int schulter, int huefte, int knie) //PWM initialisieren { TIMSK |= (1<<TICIE1) | (1<<TOIE2); //Interupt initialisieren, freischalten //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 = schulter; //Servosignal (Port 0, Schulter) OCR1B = huefte; //Servosignal (PORT 1, Hüfte) //Timer 2 (Port 2) TCCR2 = (1<<WGM20)| (1<<WGM21) | (1<<COM21) | (1<<CS22) | (1<<CS20); //Fast PWM OCR2 = (knie/8); //Servosignal (Port2, Knie) }







Zitieren

Lesezeichen