Servoansteuerung mit ATtiny2313

Gast #2565275
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!
#2565369
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.
Gast #2565389
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?  ;-)
Gast #2565436
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?
Gast #2565499
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!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren