Liebe Forumsgemeinde!
Ich bin gerade dabei, ein Servo (XT-S Standard Servo) mit o.g.
Controller anzusteuern.
ich hab zwar mit Timer und allem möglichen schon das PWM generiert,
allerdings ist mir aufgefallen, als ich
http://www.mikrocontroller.net/articles/Modellbauservo_Ansteuerung
gelesen habe, dass, wenn ich ein ganz simples Software PWM erstelle, das
Servo immer nur in eine Richtung fährt (das selbe mit Timer).
Und das schrägste ist, dass das Servo sich auch bis Linksanschlag dreht,
sobald man mit dem Pin nur überhaupt etwas tut.
Es fährt also auch auf Linksanschlag mit folgendem Code:
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | int main (void)
|
5 | {
|
6 | DDRB = (1<<PB4);
|
7 |
|
8 | while( 1 ) {
|
9 | PORTB |= (1<<PB4);
|
10 | PORTB &= ~(1<<PB4);
|
11 | }
|
12 | }
|
Man sollte aber mit der "Totzeit" zwischen den 1-2ms Impulsen ca. 20ms
warten und mit 1, 1.5 und 2ms die Stellung des Servos einstellen können.
Das wäre Softwaremäßig dann:
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 |
|
4 | int main (void)
|
5 | {
|
6 | DDRB = (1<<PB4);
|
7 |
|
8 | while( 1 ) {
|
9 |
|
10 | PORTB |= (1<<PB4);
|
11 | _delay_us( 1500 ); // in den 1500 steckt die Lageinformation
|
12 | PORTB &= ~(1<<PB4);
|
13 | _delay_ms( 18 ); // ist nicht kritisch
|
14 | }
|
15 | }
|
Das bleibt sich aber komplett egal, was man in die Delays reinschreibt.
es geht immer nur die eine Position. Und zwar unabhängig davon, was man
macht.
Achso, takten tu ich das Ganze mit den internet 8MHz.
Hat jemand eine Idee an was das liegen kann?
Vielen Dank für die Hilfe!