#include #include #include #include /* LED PB1 Servor PB4 OCR1C = TOP → Periode definieren (z. B. 20 ms für Servo) OCR1B → Pulsbreite → Servo-PWM | Ereignis | OC1B | | ------------- | ----- | | TCNT1 = 0 | HIGH | | TCNT1 = OCR1B | LOW | | TCNT1 = OCR1C | Reset | */ #define SERVO_PIN PB4 // OC1B #define LED PB1 // Interne LED // -------- Funktionsprototyp -------- bool sending = false; volatile int zaehler = 0; void Servo_Init(){ DDRB |= (1 << SERVO_PIN); // PB4 als Ausgang // ---- Timer1 Reset ---- //Kapitel 12.3.2 Seite 90 GTCCR |= (1 << PWM1B); //13.3.2 S.101 GTCCR |= (1 << COM1B1); TCCR1 |= (1 << CTC1); //Soll ein Compare Match auslösen TCNT1 = 0; // Zähler für Timer1 // ---- Prescaler TCCR1 ---- TCCR1 |= (1 << CS13) | (0 << CS12) | (1 << CS11) | (1 << CS10); // Prescaler 1024 // ---- 20 ms Periode (50 Hz) ---- OCR1C = 255; // prescaler 1024 Maximalwert für 8-Bit → ca. 16,32 ms OCR1B = 33; } void setup() { DDRB |= (1 << LED); // PB1 als Ausgang Servo_Init(); } void loop() { OCR1B=18; //0.959ms _delay_ms(1000); OCR1B=25; //1.472 ms _delay_ms(1000); OCR1B=33; //1.98 ms _delay_ms(1000); }