ich möchte ein Servo mit dem 16Bit Timer per PWM ansteuern. Dazu habe ich folgenden Code geschrieben.
1 | #include <avr/io.h> |
2 | #include <util/delay.h> |
3 | |
4 | #define F_CPU 1000000 // CPU-Frequenz = 1MHz (1 Clockzyklus = 1 / 1MHz = 1us)
|
5 | |
6 | int main(void) |
7 | {
|
8 | DDRD = 0xFF; // PD2 (OC1A) = Ausgang |
9 | |
10 | TCCR1A = (1<<WGM11)|(1<<COM1A1)|(1<<COM1A0); // Set OC1A on compare match |
11 | TCCR1B = (1<<WGM13)|(1<<WGM12)|(1<<CS10); // Fast PWM, Top = OCR1A, Prescaler = 1 |
12 | |
13 | ICR1 = 19999; // compare match auf 19999 setzen |
14 | |
15 | while(1) |
16 | {
|
17 | OCR1A = ICR1 - 800; // Servo nach rechts drehen |
18 | _delay_ms(100); // 100ms warten |
19 | OCR1A = ICR1 - 2200; // Servo nach links drehen |
20 | _delay_ms(100); // 100ms warten |
21 | }
|
22 | }
|
Leider erhalte ich am Ausgang (OC1A) kein PWM Signal. Hat wer eine Idee wo der Fehler liegt? Mein Controller: AT90PWM316