Hallo!

Ich habe folgendes Problem. Wie in der angehängten Software wird ein Servo von einem ATtiny 13 gesteuert um damit auf der Modellbahn Weichen, oder Tore zu steuern. Mit den Potis werden die Endlagen eingestellt, die eigentlich eingehalten werden sollen.

Nun ist es beim Einschalten aber so, daß das Servo kurz über die Eine Endlage zuckt um dann in der gewünschten Lage stehen zu bleiben.
Kann man dies irgendwie unterdrücken??? Oder liegt das am Servo generell? Kenne dieses Phänomän noch gut von der Lenkung meines Ferngesteuerten Auto beim Einschalten, nur macht es hier nichts aus, da keine mechanische Endlage in der Mittelstellung erreicht wird.
Kann man das vierhindern, indem ich den zuerst auf high oder low lege und dann erst als Servo freigebe???

Hat vielleicht noch jemand eine Idee, wie ich das verwendete kleine Conrad-Servo langsamer aber dennoch gleichmäßig laufen lassen kann?
Evtl. ein kleines Beispiel?

Viele Grüße

und schon mal danke für Eure Mithilfe

Sven
Code:
'-----------------------------------------------------------------------------------------
'name                     : Schuppentor_Servotiny13.bas
'copyright                : (c) 2007 SZ
'purpose                  : Endlage über Potis einstellbar
'                           Ansteuerrung über PB1
'micro                    : TINY13
'Minimum                  : 35 for most small Conrad-Servos
'-----------------------------------------------------------------------------------------

$regfile = "attiny13.dat"                                   ' specify the used micro
$crystal = 9600000                                          ' used crystal frequency
'$baud = 19200                                               ' use baud rate
'$sim

$hwstack = 32                                               ' default use 32 for the hardware stack
$swstack = 10                                               ' default use 10 for the SW stack
$framesize = 40                                             ' default use 40 for the frame space

Config Servos = 1 , Servo1 = Portb.0 , Reload = 10

'--------------------------Config AD - Wandler--------------------------------------
Config Adc = Single , Prescaler = Auto , Reference = Avcc
'For this chip you can use the additional param :
'Config Adc = Single , Prescaler = Auto, Reference = Internal
'The reference param may be :
'OFF      : AREF, internal reference turned off
'AVCC     : AVCC, with external capacitor at AREF pin
'INTERNAL : Internal 2.56 voltage reference with external capacitor ar AREF pin

Enable Interrupts                                           'Ist nötig
Config Portb.0 = Output                                     'Servoausgang
Config Pinb.1 = Input                                       'Auf/ZU
Config Pinb.2 = Input                                       'Jumper
Config Debounce = 20                                        'Tastenentprellung 20ms

'Interne Pullup Widerstände einschalten
Portb.1 = 1
Portb.2 = 1

Dim Minimum As Byte
Dim Maximum As Byte
Dim Spg_p1 As Word
Dim Sresult As Word
Dim Flag As Bit
'-----------------------------Sub Deklaration-------------------------------------
Declare Sub Poti_1
Declare Sub Poti_2

Start Adc

Flag = 0
Minimum = 35                                                'Rechter Anschlag
Maximum = 155                                               'Linker Anschlag

Do

Gosub Taster_up

Loop



End
'*******************************************************************************

Taster_up:
'Debounce Pinb.1 , 1 , Pr 'try this for branching when high(1)
  Debounce Pinb.1 , 1 , Aus_up , Sub                        'Taster offen
  Debounce Pinb.1 , 0 , Ein_up , Sub                        'Taster gedrückt

Return
'*******************************************************************************

'Unterprogramm Taste Up
Ein_up:
  Gosub Poti_1
Return

'*******************************************************************************

'Unterprogramm Taste Up
Aus_up:
  Gosub Poti_2
Return

'*******************************************************************************

Sub Poti_1

Spg_p1 = Getadc(2)                                          'Spannung an Poti

 Sresult = Spg_p1 / 8
 Sresult = Sresult + 35

 If Sresult < 35 Then
   Servo(1) = Minimum
 End If

 If Sresult = 35 Then
   Servo(1) = Sresult
 End If

 If Sresult > 35 Then
   Servo(1) = Sresult
 End If

 If Sresult > 155 Then
   Servo(1) = Maximum
 End If

End Sub

'*******************************************************************************
Sub Poti_2

Spg_p1 = Getadc(3)                                          'Spannung an Poti

 Sresult = Spg_p1 / 8
 Sresult = Sresult + 35

 If Sresult < 35 Then
   Servo(1) = Minimum
 End If

 If Sresult = 35 Then
   Servo(1) = Sresult
 End If

 If Sresult > 35 Then
   Servo(1) = Sresult
 End If

 If Sresult > 155 Then
   Servo(1) = Maximum
 End If

End Sub