Hallo zusammen,
ich bin gerade dabei, einen Servo anzusteuern.
Dank der Seite "Modellbauservo Ansteuerung" funktioniert das fast
perfekt.
Mein Code sieht so aus:
1 | #define F_CPU 1000000UL
|
2 |
|
3 |
|
4 | #include <avr/io.h>
|
5 | #include <avr/interrupt.h>
|
6 | #include <util/delay.h>
|
7 |
|
8 |
|
9 | ISR(TIMER1_COMPA_vect)
|
10 | {
|
11 | OCR1A = 2500-OCR1A;
|
12 | }
|
13 |
|
14 | int main (void)
|
15 | {
|
16 | DDRB = 0b00000011;
|
17 | PORTB = (1<<PB1);
|
18 |
|
19 | TCCR1A |= (1<<COM1A0);
|
20 | TCCR1B |= (1<<WGM12) | (1<<CS11);
|
21 | TIMSK1 |= (1<<OCIE1A);
|
22 |
|
23 | OCR1A = 2190;
|
24 |
|
25 | sei();
|
26 |
|
27 | while (1)
|
28 | {
|
29 | cli();
|
30 | OCR1A = OCR1A + 5;
|
31 | sei();
|
32 | _delay_ms(100);
|
33 |
|
34 | if ( OCR1A == 2420)
|
35 | {
|
36 | cli();
|
37 | OCR1A = 2190;
|
38 | sei();
|
39 | _delay_ms(1000);
|
40 | _delay_ms(1000);
|
41 | }
|
42 |
|
43 | }
|
44 |
|
45 | return 0;
|
46 |
|
47 | }
|
Der Servo startet an einer Endposition und läuft zur anderen
Endposition, dort wartet er 2 Sekunden.
Allerdings habe ich nun das Problem, dass er zwischendurch ab und zu
auch ein paar Schritte wieder Rückwärts macht. Leider kann ich mir das
nicht erklären.
Kann es sein, dass der Controller durch die delays irgendwie
durcheinander kommt?
Wie gesagt, er fährt die Strecke ab, nur zwischendurch kommt ein kleiner
Hüpfer rückwärts. Dies ist auch auf dem Oszi zu sehen, dass sich
kurzzeitig die PWM wieder ändert.
Hat jemand von euch eine Idee, was hier falsch läuft.
Danke
Peter