PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo ansteuern - ich komm nicht drauf!



xxrider
21.05.2011, 10:05
warum geht der erste Code und der zweite nicht?
Beim ersten habe ich den Vorschlag aus RN Wissen genommen und die nicht benötigten Kanäle mit einer sinnlosen Routine versehen (Toggle x), aber die Architektur belassen.

Beim zweiten Code habe ich den Code abgeändert weil es ja nicht nötig ist, den jeweiligen Kanal 2mal anzusprechen, aber ich brauche ja auch eine gewisse Zeitverschwendung um das Servo nicht zu oft anzusprechen.
Dieser Code aber geht nicht. Auch wenn ich die Anzahl der Kanäle verdopple (weil ja jeder nur 1mal angesprochen wird) gehts nicht. Warum?

Wäre schön wenn mir jemand auf die Sprünge helfen könnte, ich komm da grad echt nicht weiter.



If Kanal = 0 Then
If Porta.2 = 0 Then
Timer0 = Servo(1)
Porta.2 = 1
Else
Porta.2 = 0
Incr Kanal
End If
End If

If Kanal = 1 Then
If X = 0 Then
Toggle X
Else
Toggle X
Incr Kanal
End If
End If

If Kanal = 2 Then
If X = 0 Then
Toggle X

Else
Toggle X
Incr Kanal
End If
End If

If Kanal = 3 Then
Timer1 = 0
Kanal = 0
End If
Return
End


If Kanal = 0 Then
If Porta.2 = 0 Then
Timer0 = Servo(1)
Porta.2 = 1
Else
Porta.2 = 0
Incr Kanal
End If
End If

If Kanal = 1 Then
Incr Kanal
Timer0=0
End If

If Kanal = 2 Then
Incr Kanal
Timer0=0
End If
...
If Kanal = 3 Then
Timer1 = 0
Kanal = 0
End If
Return
End

Willa
21.05.2011, 12:48
Ist es so gewollt, dass du beide Timer benutzt um nur ein Servo anzusprechen...?
zusammengestückelt ausm rn-wissen beitrag für 1 Servo:


Servoirq:
If Kanal = 0 Then
If Portb.0 = 0 Then 'wenn port low
Timer1 = Servo(1) 'dann timer auf entsprechende verzögerung
Portb.0 = 1 'und port anschalten
Else 'das hier passiert erst bei dem darauf folgenden interrupt
Portb.0 = 0 'dann port wieder ausschalten
Incr Kanal 'und den nächsten kanal bearbeiten
End If
End If
If Kanal = 1 Then
Timer1 = 40000
Kanal = 0
End If
Return

xxrider
21.05.2011, 20:52
Hallo Willa,
ja du hast natürlich recht. Es muss Timer0 heißen.
Allerdings ändert es dennoch nichts an der Funktion bzw. Funktionslosigkeit!
In meinem 2. Code (nicht funktionierendem) wird das Servo viel zu häufig befeuert, und das egal wieviele "Kanäle" ich noch dranhänge.
Aber diese müssten doch eine Verzögerung bringen, da sie ja abgearbeitet werden müssen bis wieder Kanal 0 drankommt!?!

Willa
21.05.2011, 22:21
dein code geht nicht, weil du kein elseif benutzt. Kanal wird um 1 erhöht, sofort danach wird gefragt ob er einer höher ist, und dann wieder um eins erhöht. dein ganzer code läuft also innerhalb von einem einzigen interrupt ab.

xxrider
22.05.2011, 22:29
vielen Dank, das war der Fehler. wie kann man nur so blind sein.
danke.
jetzt klappt alles :)