PhilippW
14.12.2006, 14:44
Hallo!
Ich steh momentan vor einem Problem, dass ich mir selbst nicht erklären kann:
Servo-Ansteuerung unter Bascom ist ja recht leicht und wurde hier ja auch schon mehrfach besprochen...
Mein Anliegen ist jedoch, dass der Controller (AtMega8) solange Befehle ausführen soll, bis er über die serielle Schnittstelle eine "1" empfängt... Soweit auch kein Problem...
Nachdem er diese Zahl empfangen hat, soll er einen Servo in Einzelschritten drehen. Auch das hat bereits in einem anderen Projekt bestens funktioniert!
Nur wenn ich alles zusammen pack, also die Schnittstellen- mit der Servogeschichte, versagt die Drehung jämmerlich... :-(
Ich habe versucht, dem ganzen auf den Grund zu gehen und am Programmanfang und nach dem Schleifendurchlauf eine vollständige Drehung nach links, sowie am Programmende eine Drehung nach rechts eingeleitet... Das funktioniert auch bestens!
Nur in der FOR-Schleife tut sich mit dem Servo rein gar nichts...
Hier der Code:
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600
Dim Servopos As Integer
Dim L As Integer
Dim R As Integer
Dim S As Integer
Dim Inpt As String * 1
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
Config Portb = Output
On Urxc Onrxd
Enable Urxc
Enable Interrupts
L = 100
R = 30
S = -1
Print "Servo wird ausgerichtet..."
Servo(1) = L
Print "Servo linksseitig ausgerichtet!"
Do
Main:
Print "Main"
Wait 1
Goto Main
Command:
Print "Command"
If Inpt = "1" Then Gosub Rotation
Inpt = ""
Return
Rotation:
Print "Starte Drehung..."
For Servopos = L To R Step S
Servo(1) = Servopos
Waitms 3
Next
Print "Drehung beendet!"
Servo(1) = L
Print "Servo zurückgesetzt!"
Return
Onrxd:
Print "Empfange Signal..."
Inpt = Inpt + Chr(udr)
Gosub Command
Print "Signalempfang beendet!"
Servo(1) = R
Print "Servo rechtsseitig ausgerichtet!"
Return
Loop
Hat jemand eine Idee, woran das liegen könnte und was ich tun muss, damit es funktioniert?
Ich hab schon alles versucht... Controller ausgetauscht, den Servo an einen anderen Port angeschlossen... Es tut sich jedoch rein gar nichts... :-(
Könnte es daran liegen, dass der Servo innerhalb eines Interrupts irgendwie deaktiviert ist?
Wenn ich die FOR-Schleife in den Main-Bereich verlege, funktioniert die Servo-Drehung...
Ich hoffe, ihr könnt mir helfen!
Mit freundlichen Grüßen
Philipp
Ich steh momentan vor einem Problem, dass ich mir selbst nicht erklären kann:
Servo-Ansteuerung unter Bascom ist ja recht leicht und wurde hier ja auch schon mehrfach besprochen...
Mein Anliegen ist jedoch, dass der Controller (AtMega8) solange Befehle ausführen soll, bis er über die serielle Schnittstelle eine "1" empfängt... Soweit auch kein Problem...
Nachdem er diese Zahl empfangen hat, soll er einen Servo in Einzelschritten drehen. Auch das hat bereits in einem anderen Projekt bestens funktioniert!
Nur wenn ich alles zusammen pack, also die Schnittstellen- mit der Servogeschichte, versagt die Drehung jämmerlich... :-(
Ich habe versucht, dem ganzen auf den Grund zu gehen und am Programmanfang und nach dem Schleifendurchlauf eine vollständige Drehung nach links, sowie am Programmende eine Drehung nach rechts eingeleitet... Das funktioniert auch bestens!
Nur in der FOR-Schleife tut sich mit dem Servo rein gar nichts...
Hier der Code:
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600
Dim Servopos As Integer
Dim L As Integer
Dim R As Integer
Dim S As Integer
Dim Inpt As String * 1
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
Config Portb = Output
On Urxc Onrxd
Enable Urxc
Enable Interrupts
L = 100
R = 30
S = -1
Print "Servo wird ausgerichtet..."
Servo(1) = L
Print "Servo linksseitig ausgerichtet!"
Do
Main:
Print "Main"
Wait 1
Goto Main
Command:
Print "Command"
If Inpt = "1" Then Gosub Rotation
Inpt = ""
Return
Rotation:
Print "Starte Drehung..."
For Servopos = L To R Step S
Servo(1) = Servopos
Waitms 3
Next
Print "Drehung beendet!"
Servo(1) = L
Print "Servo zurückgesetzt!"
Return
Onrxd:
Print "Empfange Signal..."
Inpt = Inpt + Chr(udr)
Gosub Command
Print "Signalempfang beendet!"
Servo(1) = R
Print "Servo rechtsseitig ausgerichtet!"
Return
Loop
Hat jemand eine Idee, woran das liegen könnte und was ich tun muss, damit es funktioniert?
Ich hab schon alles versucht... Controller ausgetauscht, den Servo an einen anderen Port angeschlossen... Es tut sich jedoch rein gar nichts... :-(
Könnte es daran liegen, dass der Servo innerhalb eines Interrupts irgendwie deaktiviert ist?
Wenn ich die FOR-Schleife in den Main-Bereich verlege, funktioniert die Servo-Drehung...
Ich hoffe, ihr könnt mir helfen!
Mit freundlichen Grüßen
Philipp