PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 5 Achs Joystick Servos Steuern



Projekt 2252
15.05.2012, 14:03
Hallo ich habe grad das Programm in SD so weit fertig das es mir alle Achsen ausgibt. Jetzt muss ich mein Atmega "nur" noch dazu bringen die Position der Achsen als Servosignal auszugeben (1000-2000). Ich hab es im SD Code so gemacht das der niedrigste Wert 1000 ist und der höchste 2000. Die Servo Funktion in Bascom geht aber nur von 0-255. Wie schaffe ich es jetzt das mein Atmega die Werte 1000-2000 ausgibt. Oder macht er das schon nur unter Bascom wird es anders angegeben ? Ich hab irgendwo gelesen das der Reload wert der Multiplikator für den Servo wert is den man angibt. Aber wenn der Multiplikator auf 10 steht sind das bei Null Null und bei 255 2500. Im Moment sieht es bei mir so aus Ich habe den Reload wert auf 1 = Multiplikator 1 des Servowertes. Die Werte werden direkt vom Joystick übernommen. Jetzt zappeln die Servos aber nur hin und her und reagieren garnicht. Das gleiche habe ich auch wenn ich den Reload Wert auf 10 setzte und SD die Werte 0-255 ausgibt. Was mach ich falsch
Gruß Tjark

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600


Config Servos = 4 , Servo1 = Porta.2 , Servo2 = Porta.3 , Servo3 = Porta.4 , Servo4 = Porta.5 , Reload = 1
Config Porta.2 = Output
Config Porta.3 = Output
Config Porta.4 = Output
Config Porta.5 = Output
Enable Interrupts




'Config Serialin = Buffered , Size = 20 ' Je nachdem wie komplex der Rest eures Programms ist
'Enable Interrupts ' kann es nötig sein einen Buffer einzurichten.


Dim Inputstring As String * 5
Dim Data_available As Byte
'----X-----------------------------------
Dim Joystick_x_wert_string As String * 5
Dim Joystick_x_wert_integer As Integer
Dim X_empfangen As Byte
'----Y-----------------------------------
Dim Joystick_y_wert_string As String * 5
Dim Joystick_y_wert_integer As Integer
Dim Y_empfangen As Byte
'----Z-----------------------------------
Dim Joystick_z_wert_string As String * 5
Dim Joystick_z_wert_integer As Integer
Dim Z_empfangen As Byte
'----Z-Rotation--------------------------
Dim Joystick_rz_wert_string As String * 5
Dim Joystick_rz_wert_integer As Integer
Dim Rz_empfangen As Byte


Do
Data_available = Ischarwaiting()
If Data_available > 0 Then 'wenn Daten da sind, dann...
Input "" , Inputstring
X_empfangen = Instr(inputstring , "X") 'Gibt die Position des Substrings "X" aus oder null wenn nicht gefunden
Y_empfangen = Instr(inputstring , "Y") 'Gibt die Position des Substrings "Y" aus oder null wenn nicht gefunden
Z_empfangen = Instr(inputstring , "Z") 'Gibt die Position des Substrings "Z" aus oder null wenn nicht gefunden
Rz_empfangen = Instr(inputstring , "Rz") 'Gibt die Position des Substrings "Z-Rotation" aus oder null wenn nicht gefunden


'----X-----------------------------------
If X_empfangen = 1 Then
Joystick_x_wert_string = Mid(inputstring , 2) 'die erste Stelle des Strings (das "X") abscheiden
Joystick_x_wert_integer = Val(joystick_x_wert_string) 'string in integer konvertieren
End If


'----Y-----------------------------------
If Y_empfangen = 1 Then
Joystick_y_wert_string = Mid(inputstring , 2) 'die erste Stelle des Strings (das "Y") abscheiden
Joystick_y_wert_integer = Val(joystick_y_wert_string) 'string in integer konvertieren
End If


'----Z-----------------------------------
If Z_empfangen = 1 Then
Joystick_z_wert_string = Mid(inputstring , 2) 'die erste Stelle des Strings (das "Z") abscheiden
Joystick_z_wert_integer = Val(joystick_y_wert_string) 'string in integer konvertieren
End If


'----Z-Rotation--------------------------
If Rz_empfangen = 1 Then
Joystick_rz_wert_string = Mid(inputstring , 2) 'die erste Stelle des Strings (das "Rz") abscheiden
Joystick_rz_wert_integer = Val(joystick_y_wert_string) 'string in integer konvertieren
End If
End If


Servo(1) = Joystick_x_wert_string
Servo(2) = Joystick_y_wert_string
Servo(3) = Joystick_z_wert_string
Servo(4) = Joystick_rz_wert_string
Loop

Projekt 2252
15.05.2012, 23:29
So habs jetz soweit das ich einen Servo ansteuern kann anstatt


Servo(1) = Joystick_x_wert_string musste ich

Servo(1) = Joystick_x_wert_integer nehmen :) Ich habe in SD den Min. Achsenwert mit 35 festgelegt und den Max. Wert mit 175. Das wird direkt in der Servo Funktion von Bascom als wert genommen. Das Problem ist nur das wenn er nichts empfängt den Wert auf 0 setzt und somit der Servo unkontrolliert ausschlägt weil er mal ein Signal bekommt zb. 120 und denn wieder 0 Wie kann ich das im Programm ändern ? Hier der Teil:
Gruß Tjark

Do
Data_available = Ischarwaiting()
If Data_available > 0 Then 'wenn Daten da sind, dann...
Input "" , Inputstring
X_empfangen = Instr(inputstring , "X") 'Gibt die Position des Substrings "X" aus oder null wenn nicht gefunden
Y_empfangen = Instr(inputstring , "Y") 'Gibt die Position des Substrings "Y" aus oder null wenn nicht gefunden
Z_empfangen = Instr(inputstring , "Z") 'Gibt die Position des Substrings "Z" aus oder null wenn nicht gefunden
Rz_empfangen = Instr(inputstring , "Rz") 'Gibt die Position des Substrings "Z-Rotation" aus oder null wenn nicht gefunden


'----X-----------------------------------
If X_empfangen = 1 Then
Joystick_x_wert_string = Mid(inputstring , 2) 'die erste Stelle des Strings (das "X") abscheiden
Joystick_x_wert_integer = Val(joystick_x_wert_string) 'string in integer konvertieren
End If


'----Y-----------------------------------
If Y_empfangen = 1 Then
Joystick_y_wert_string = Mid(inputstring , 2) 'die erste Stelle des Strings (das "Y") abscheiden
Joystick_y_wert_integer = Val(joystick_y_wert_string) 'string in integer konvertieren
End If


'----Z-----------------------------------
If Z_empfangen = 1 Then
Joystick_z_wert_string = Mid(inputstring , 2) 'die erste Stelle des Strings (das "Z") abscheiden
Joystick_z_wert_integer = Val(joystick_y_wert_string) 'string in integer konvertieren
End If


'----Z-Rotation--------------------------
If Rz_empfangen = 1 Then
Joystick_rz_wert_string = Mid(inputstring , 2) 'die erste Stelle des Strings (das "Rz") abscheiden
Joystick_rz_wert_integer = Val(joystick_y_wert_string) 'string in integer konvertieren
End If
End If