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







Zitieren

Lesezeichen