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
Code:
$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
Lesezeichen