ACsenf
05.02.2008, 13:34
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
'-----------------------------------------------------------------------------------------
'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
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
'-----------------------------------------------------------------------------------------
'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