Forum: Mikrocontroller und Digitale Elektronik [AVR Mega 8] Servo bewegt sich nur in eine Richtung


von Tilman S. (killerfaultier)


Lesenswert?

Hallo,

ich habe heute mal versucht, einen Servo anzusteuern. Dazu wollte ich
ganz einfach anfangen:
1
#include <avr/io.h>
2
#define F_CPU 8000000UL
3
#include <util/delay.h>
4
5
int main() {
6
 // Alle Pins des Ports B als Ausgang definieren:
7
  DDRD = 0xff; 
8
9
  while(1) {
10
  // 5 auf high
11
  PORTD=(1<<PD5);
12
  _delay_ms(1);
13
  // 5 auf low
14
  PORTD &= ~(1<<PD5);
15
  _delay_ms(9);
16
  _delay_ms(10);
17
 }
18
}

Ich benutze das Pollin Board, bei F_CPU habe ich 16, 8, 4, 1
ausprobiert. Der Takt müsste auf intern gestellt sein.

Doch leider bewegt sich der Servo nur in eine Richtung bis zum Anschlag.

Wo liegt das Problem?

Grüße

[Eine kleine Diskussion gibt es dazu unter 
Beitrag "Re: einfache Servoansteuerung" dieser Thread wurde 
aber leider gesperrt]

von Karl H. (kbuchegg)


Lesenswert?

Tilman Stremlau schrieb:

> Doch leider bewegt sich der Servo nur in eine Richtung bis zum Anschlag.
> Wo liegt das Problem?

Da gibt es IMHO kein Problem.
Genau das hast du ja programmiert!

> Der Takt müsste auf intern gestellt sein
Du hast aus dem alten Thread nichts gelernt. Mit 'müsste' kommt man 
nicht weiter. Wie ist denn nun die Einstellung deines internen Taktes?

Im zweifelsfall probierst du es aus:
Häng anstelle deines Servos eine LED an den Ausgang und lass dieses 
Programm laufen:
1
#include <avr/io.h>
2
#define F_CPU 8000000UL
3
#include <util/delay.h>
4
5
int main() {
6
 // Alle Pins des Ports B als Ausgang definieren:
7
  DDRD = 0xff; 
8
9
  while(1) {
10
    PORTD=(1<<PD5);
11
    _delay_ms(1000);
12
    PORTD &= ~(1<<PD5);
13
    _delay_ms(1000);
14
  }
15
}
Wenn dein interner Takt tatsächlich auf 8Mhz steht, dann ist deine LED 1 
Sekunde hell und 1 Sekunde dunkel. Ist die LED 8 Sekunden an und 8 
Sekunden aus, dann steht der interne Takt auf 1Mhz und nicht auf 8.

Damit kommst du erst mal von 'müsste' weg, hin zu: Ich weiß das der 
interne Takt auf so_und_soviel Mhz steht! Etwas zu wissen ist dann schon 
etwas ganz anderes als etwas zu vermuten. Damit kann man dann auch 
arbeiten.

von Tilman S. (killerfaultier)


Lesenswert?

Sorry :D

Ich habe den Fehler gefunden *schäm*:

Meine TV-Fernbedienung hat wohl nur 3V anstatt den angenommenen 6V... 
jetzt funktioniert alles wunderbar :D

Ich bedanke mich für alle, die hier geantwortet haben!

Grüße

von Sprachen (Gast)


Lesenswert?

Ganz klar, der Zusammenhang!

Gast

von Tilman S. (killerfaultier)


Lesenswert?

Oh, ja das klingt wohl etwas komisch^^

Erklärung:
Ich wollte mir die 6V für den Servo von meiner Fernbedienung (die hier 
rumlag) abgezapfen (mein Netzteil wurde schon für das Pollin Board 
verbaut), aber da waren nur 3V drauf (was man unter der Abdeckung nicht 
sah).

Grüße

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.