Hallo!
Ich versuche gerade einen ganz normalen Modellbau-Servo mit meinem
atMega32 anzusteuern. Soweit ich weiß braucht der dafür ein PWM Signal
mit 20ms Periodendauer und einem Duty-Cycle zwischen 1 und 2 ms (1,5 = 0
Position).
Bis jetzt schon ein Fehler? ^^
Ok ich hab also meinen 16 Bit Timer1 in den FastPWM Mode eingerichtet,
einen 3,2768MHz Quarz als Taktgeber angeschlossen um ein schönes 50Hz
Signal zu generieren.
Als Vergleichswert hab ich ihm den berechneten Zählerwert für 1,5ms
gegeben, allerdings fährt der Servor irgendwelche beliebigen Positionen
an und surrt entwas ungewöhnlich^^
Hier ist mein Code:
PWM_NULL hab ich in meiner header-Datei mit 4915 definiert!
1 | #include <avr/io.h>
|
2 | #include "defaults.h"
|
3 |
|
4 | void init_Timer()
|
5 | {
|
6 | DDRD|= (1<<PD5);
|
7 | TCCR1A |= (1<<COM1A1) | (1<<COM1B1) | (1<<WGM11);
|
8 | TCCR1B |= (1<<WGM13) | (1<<WGM12) | (1<<CS10);
|
9 | ICR1 = 0xFFFF;
|
10 | OCR1A = PWM_NULL;
|
11 | }
|
12 |
|
13 | int main(void)
|
14 | {
|
15 | init_Timer();
|
16 | while(1)
|
17 | {
|
18 |
|
19 | }
|
20 | }
|
Wäre toll wenn mir jemand helfen kann! :)
Mfg
Berni