Forum: Gesperrte Threads einfache Servoansteuerung


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

: Verschoben durch User
von Anja (Gast)


Lesenswert?

Tilman Stremlau schrieb:
> Wo liegt das Problem?

1,0 ms ist normalerweise schon einer der beiden Anschläge.
Mittelstellung ist 1,5 ms. 2,0 ms der andere Anschlag.

Gruß Anja

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Wo liegt das Problem?
Hauptsächlich da:
> bei F_CPU habe ich 16, 8, 4, 1 *ausprobiert*
Warum mußt du da irgendwas ausprobieren?

Wenn du nachsiehst, welche Taktfrequenz du verwendest und ob deine 
Fusebits passend dazu programmiert sind (die kann man nämlich nicht im 
C-Programm einstellen), dann sollte das kein Ausprobieren mehr sein, 
sondern Wissen.

Und dann kannst du mit einer Mikrosekundenverzögerung _delay_us() die 
Pulsdauer mal (wie schon angesprochen) zwischen den beiden Endanschlägen 
1000us und 2000us verändern.

von hier und da (Gast)


Lesenswert?

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

Wenn du Intern 1 MHz hast (gehe ich von aus) und im Code alles andere 
als 1 MHz einstellst, werden deine _delays verfälscht und dann sieht die 
PWM anders aus. Servo bewegt sich zwischen 1-2ms.

Gruß

von Tilman S. (killerfaultier)


Lesenswert?

Laut Fuse-Bits müsste es externer Quarz sein, d.h. 16MHz
Den MC habe ich aus einer anderen Schaltung entnommen und dort hatte er 
keinen externen Quarz, daher habe ich dann doch mal 1MHz probiert.
Um ganz sicher zu gehen, dass es nicht am Quarz liegt, habe ich eben die 
anderen möglichen Frequenzen auch ausprobiert.

Auch habe ich beim ersten Delay schon mehrere Werte probiert z.B. 1; 2; 
1,4; 1,5

Der Fehler muss irgendwo anders liegen...

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Wichtige Regeln - erst lesen, dann posten!
•Aussagekräftigen Betreff wählen
•Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)

Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.