Forum: Mikrocontroller und Digitale Elektronik Servoansteuerung mit ATtiny2313


von Florian S. (Gast)


Lesenswert?

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!

von Florian S. (Gast)


Lesenswert?

Achso, wie man oben sieht, wird das alles in C programmiert ;-)

von Rahul D. (rahul)


Lesenswert?

Und wie sieht der Rest des Programms aus?
Poste compilierbaren Code, dann kann man dir auch helfen!

von Florian S. (Gast)


Lesenswert?

Das ist vorerst alles! Ich will nur, dass das Ding überhaupt einmal 
etwas tut.

von Sebastian R. (basti72)


Lesenswert?

Florian S. schrieb:
> Achso, takten tu ich das Ganze mit den internet 8MHz.
>
> Hat jemand eine Idee an was das liegen kann?

Hast du den Takt auch im Projekt/Makefile (F_CPU) angepasst bzw. ist der 
garantiert richtig?

Ich würde zur Sicherheit mal mit einem 1-Sekunden-Delay testen. Also den 
Ausgang messen oder per LED (+Widerstand) anzeigen und dann je eine 
(oder sogar mehrere) Sekunde(n) an/aus.

von Michael (Gast)


Lesenswert?

Florian S. schrieb:
> Das bleibt sich aber komplett egal, was man in die Delays reinschreibt.
> es geht immer nur die eine Position.

Die Pause zwischen den Pulsen (deine 18 ms) ist ziemlich unkritisch. 
Hast du schon mal versucht, statt der Verzögerung von 1500 µs eine von 
180 µs in den Code einzutragen?  ;-)

von Rolf Magnus (Gast)


Lesenswert?

Florian S. schrieb:
> gelesen habe, dass, wenn ich ein ganz simples Software PWM erstelle, das
> Servo immer nur in eine Richtung fährt (das selbe mit Timer).

Dann ist deine Impulsdauer falsch.

> Und das schrägste ist, dass das Servo sich auch bis Linksanschlag dreht,
> sobald man mit dem Pin nur überhaupt etwas tut.

Was ist daran schräg?

> 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.

Ja. Die Preisfrage lautet: Auf was hast du F_CPU eingestellt und mit 
welchem Takt läuft der Prozessor tatsächlich?

> Achso, takten tu ich das Ganze mit den internet 8MHz.

Also hast du die Fuses umgestellt. Bist du sicher, daß das auch geklappt 
hat?

von Florian S. (Gast)


Lesenswert?

> Ja. Die Preisfrage lautet: Auf was hast du F_CPU eingestellt und mit
> welchem Takt läuft der Prozessor tatsächlich?

Fuses sind richtig gesetzt. Mir ist vorhin geschossen, dass F_CPU noch 
vom alten Projekt gesetzt war. Dummer Fehler!
Trotzdem Danke!

von Florian S. (Gast)


Lesenswert?

P.s.: Danke für die vielen Tipps - kann man immer brauchen!

von ... (Gast)


Lesenswert?

Florian S. schrieb:
> Mir ist vorhin geschossen, dass F_CPU noch
> vom alten Projekt gesetzt war. Dummer Fehler!

Das ist keine Schande. Mit Copy&Paste sind schon ganz andere auf den 
Bauch gefallen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.