Hier mal der Code, der nicht funktioniert:
	Code:
	
$crystal = 8000000
$baud = 9600
Declare Sub Stepper_move(byval Stepper_goto_pos As Word)
Declare Sub Shoulder_move(byval Shoulder_goto_pos As Integer)
Declare Sub Elbow_move(byval Elbow_goto_pos As Integer)
Const Writepowerport_adr = &H72                             'I2C Adr PCF 2
Const Readpowerport_adr = &H73                              'I2C Adr PCF 2
Dim I2cdaten As Byte                                        'Datenbyte aus PCF8574
Dim I As Integer
$crystal = 8000000                                          'Quarzfrequenz
Config Scl = Portc.0                                        'Ports fuer IIC-Bus
Config Sda = Portc.1
I2cinit
Config Pind.6 = Output                                      'Schrittmotoren Ein/Aus
Config Pinc.5 = Output                                      'Schrittmotor Links Richtung
Config Pinc.3 = Output                                      'Schrittmotor Links Step
Config Pinc.4 = Output                                      'Schrittmotor Rechts Richtung
Config Pinc.2 = Output                                      'Schrittmotor Rechts Step
Portd.6 = 0                                                 'Schrittmotoren ausschalten
Dim Stepper_curr_pos As Integer
Stepper_curr_pos = 0
Dim Shoulder_curr_pos As Integer
Shoulder_curr_pos = 127
Dim Elbow_curr_pos As Integer
Elbow_curr_pos = 127
Dim Temp As Byte
Hauptschleife:
   Call Elbow_move(0)
   Wait 1
   Call Shoulder_move(255)
   Wait 1
Goto Hauptschleife
Sub Shoulder_move(byval Shoulder_goto_pos As Integer)
   Local Schritt As Integer
      If Shoulder_curr_pos < Shoulder_goto_pos Then
         Schritt = 1
      Elseif Shoulder_curr_pos > Shoulder_goto_pos Then
         Schritt = -1
      Elseif Shoulder_curr_pos = Shoulder_goto_pos Then
         Exit Sub
      End If
      Open "comd.7:9600,8,n,1" For Output As #2
      For Shoulder_curr_pos = Shoulder_curr_pos To Shoulder_goto_pos Step Schritt
         Temp = Shoulder_curr_pos
         Print #2 , "#s" ; Chr(1) ; Chr(temp)
         Print #2 , "#s" ; Chr(2) ; Chr(temp)
         Print "SHOULDER: " ; "Schritt: " ; Schritt ; "  CURR: " ; Temp ; "  GOTO: " ; Shoulder_goto_pos
      Next Shoulder_curr_pos
      Close #2
      Shoulder_curr_pos = Shoulder_goto_pos
End Sub
Sub Elbow_move(byval Elbow_goto_pos As Integer)
   Local Schritt As Integer
      If Elbow_curr_pos < Elbow_goto_pos Then
         Schritt = 1
      Elseif Elbow_curr_pos > Elbow_goto_pos Then
         Schritt = -1
      Elseif Elbow_curr_pos = Elbow_goto_pos Then
         Exit Sub
      End If
      Print "elbow"
      Open "comd.7:9600,8,n,1" For Output As #2
      For Elbow_curr_pos = Elbow_curr_pos To Elbow_goto_pos Step Schritt
         Temp = Elbow_curr_pos
         Print #2 , "#s" ; Chr(3) ; Chr(temp)
         Print "ELBOW: " ; "Schritt: " ; Schritt ; "  CURR: " ; Temp ; "  GOTO: " ; Elbow_goto_pos
      Next Elbow_curr_pos
      Close #2
      Elbow_curr_pos = Elbow_goto_pos
End Sub
Sub Stepper_move(byval Stepper_goto_pos As Intgeger)
   Local Betrag As Integer
   If Stepper_goto_pos > Stepper_curr_pos Then
      Betrag = Stepper_goto_pos - Stepper_curr_pos
      Portc.5 = 0                                           'Richtung
      Portc.3 = 0
      For I = 0 To Betrag Step 1
         Portc.3 = 0
         Waitms 5
         Portc.3 = 1
         Waitms 30
      Next I
      Stepper_curr_pos = Stepper_goto_pos
      Print Stepper_curr_pos
   Elseif Stepper_goto_pos < Stepper_curr_pos Then
      Betrag = Stepper_curr_pos - Stepper_goto_pos
      Portc.5 = 1                                           'Richtung
      Portc.3 = 0
      For I = 0 To Betrag Step 1
         Portc.3 = 0
         Waitms 5
         Portc.3 = 1
         Waitms 30
      Next I
      Stepper_curr_pos = Stepper_goto_pos
      Print Stepper_curr_pos
   End If
End Sub
End
 Das seltsame ist, dass diese Hauptschleife funktioniert:
	Code:
	Hauptschleife:
   Call Shoulder_move(255)
   Wait 1
   Call Elbow_move(0)
   Wait 1
Goto Hauptschleife
 diese aber nicht:
	Code:
	Hauptschleife:
   Call Elbow_move(0)
   Wait 1
   Call Shoulder_move(255)
   Wait 1
Goto Hauptschleife
 hier bewegt sich die Schulter nach ewiger Zeit auf 255, dannach passiert nichts mehr, egal wie lange ich warte.
mfg
jagdfalke
						
					
Lesezeichen