Also der Servo wird zuerst gehakt, dabei werd der "Stopper" entfernt. Das Poti wird ebenfalls entfernt, an seine Stelle treten 2 Widerstände, 2x halber Poti-Wert. Dadurch denkt der Servo quasi er wäre stendig in Mittelstellung. Wenn man ihm jetzt ein Signal gibt, das "rechts" von der Mittelstellung ist, wird er nach rechts drehen, er wird diesen Punkt natürlich nie erreichen deshalb dreht er immer weiter durch. Desto weiter das Angegebene Signal von der Mittelstellung weg liegt, desto schneller dreht er dort hin, so kann man die Geschwindigkeit regeln. Die Signale erhählt der Servo über die Steuerleitung + und - kommen ganz normal an die Spannungsversogung. Der Steuereingang kann direkt an den AVR gehängt werden (Der große Vorteil!).
Das ganze mit den Impulsen steht aber auch auf der seite von JanB.
Bascom hat für den AVR schon vorgefertigte Servo Befehle, die nur noch aus:
Config
Servos = 1 , Servo1 = Portb.0 , Reload = 10
und
Servo(1) = I
bestehen. Dabei könten rein theoretisch soviel Servos wie freie I/Os angeschlossen werden, aber irgendwann ist der AVR überfordert.
Hier also mal ein Servo-script für den AVR in Bascom.
Code:
'-----------------------------------------------------------------------
' (c) 2001-2003 MCS Electronics
' servo.bas demonstrates the SERVO option
'-----------------------------------------------------------------------
'Servo's need a pulse in order to operate
'with the config statement CONFIG Servos we can specify how many servo's we
'will use and which port pins are used
'A maximum of 16 Servos might be used
'The SERVO statements use one byte for an interrupt counter and the TIMER0
'This means that you can not use TIMER0 anymore
'The reload value specifies the interval of the timer in uS
'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
'we use 2 Servos with 10 uS resolution(steps)
'we must configure the port pins used to act as output
Config Portb = Output
'finally we must turn on the global interrupt
Enable Interrupts
'the servo() array is created automatic. You can used it to set the
'time the servo must be on
Servo(1) = 10 '10 times 10 = 100 uS on
'Servo(2) = 20 '20 times 10 = 200 uS on
Do
Loop
Dim I As Byte
Do
For I = 0 To 100
Servo(1) = I
Waitms 1000
Next
For I = 100 To 0 Step -1
' Servo(1) = I
Waitms 1000
Next
Loop
End
Noch Fragen? 
MFG Moritz
Lesezeichen