Mein originalercode 16Mhz:
Ich muss den Code noch auf 8mhz anpassen. Ich versuche noch heute dazu zu kommen.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 /*----------------------------------------------------------------------------------------*/ //1000 = 1ms(links), 1500 = 1,5ms(mitte), 2000 = 2ms(rechts) volatile int schulter= 0; volatile int huefte = 0; volatile int knie = 0; 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_OVF_vect) //Überlaufinterupt Timer2 { TCCR2 = 0x00; //Löschen von Timer2 } ISR(TIMER1_CAPT_vect) //Captureinterupt Timer1 { 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