- LiFePO4 Speicher Test         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: Code für Schrittmotorsteuerung stimmt nicht

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    13.04.2005
    Beiträge
    56

    Code für Schrittmotorsteuerung stimmt nicht

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo!

    Bastel grad an meinem ersten Roboter und bin ein totaler Bascomneuling. Möchte über einen PC + RN-Control 1.4 meinen Schrittmotor für die Lenkung steuern. Am PC läuft Labview. An der RN-Control hängt die standart L297/L298 Schaltung.
    Portbeschaltung der RN-Control:

    Portd.2 = CLOCK
    Portd.3 = Direction
    Portd.7 = Enable

    Die Ports von Portc.0 bis einschließlich Portc.2 hab ich als Eingänge definiert. Sie sind mit meinem PC verbunden.
    Das Board soll nun die oben genannten c-Ports in einer Endlosschleife abfragen, bis einer auf High gesetzt ist. Sollte das der Fall sein, muss das Unterprogramm Schrittmotor ausgeführt werden. Hier wird nun geprüft, wie die c-Ports geschaltet sind. Sie bleiben vom PC für eine Sekunde beschaltet, bevor alles wieder auf low gesetzt wird. Die Unterscheidung der Laufrichtung des Schrittmotors hängt von der Zusammensetzung der Low-High-Zustände der c-Ports ab. Je nachdem wie sie beschaltet sind wird im Schrittmotor-Unterprogramm ein entsprechendes weiteres Unterprogramm geöffnet.
    Nun zu meinem Problem… es tut sich gar nichts am Motor. Meine Vermutung wäre, dass ich in einem Unterprogramm kein weiteres öffnen kann. Wäre echt dankbar, wenn mir hier jemand helfen würde.
    So hier noch mein Quellcode:

    Code:
    Declare Sub Schrittmotor()                                  'Subs Ports und Variablen declarieren
    Declare Sub Rechts0()
    Declare Sub Rechts()
    Declare Sub Links0()
    Declare Sub Links()
    Dim I As Integer
    $regfile = "m16def.dat"
    $crystal = 16000000
    $baud = 9600
    
    Config Pinc.0 = Input
    Config Pinc.1 = Input
    Config Pinc.2 = Input
    Portc.0 = 0
    Portc.0 = 0
    Portc.0 = 0
    
    Config Pind.2 = Output
    Config Pind.3 = Output
    Config Pind.7 = Output
    
    
    Do                                                          'Endlosschleife
    For I = 0 To 2
    If Portc.i = 1 Then
    Call Schrittmotor
    Else
    Waitms 20
    End If
    Next I
    Loop
    End
    
    Sub Schrittmotor()                                          'Unterprogramm Schrittmotor
    If Portc.0 = 1 And Portc.1 = 0 Then
       If Portc.2 = 0 Then
       Call Links0
       Else
       Call Links
       End If
       Else
       If Portc.0 = 0 And Portc.1 = 1 Then
          If Portc.2 = 0 Then
          Call Rechts0
          Else
          Call Rechts
          End If
       End If
    End If
    End Sub
    
    Sub Links0()                                                'Unterprogramme, die je nach beschaltung der C-Ports ausgeführt werden
    Portd.7 = 1
    Portd.3 = 0
    For I = 0 To 500
    Portd.2 = 1
    Waitms 5
    Portd.2 = 0
    Waitms 5
    Next I
    Portd.7 = 0
    Portd.3 = 0
    End Sub
    
    Sub Links()
    Portd.7 = 1
    Portd.3 = 0
    For I = 0 To 1000
    Portd.2 = 1
    Waitms 5
    Portd.2 = 0
    Waitms 5
    Next I
    Portd.7 = 0
    Portd.3 = 0
    End Sub
    
    Sub Rechts0()
    Portd.7 = 1
    Portd.3 = 1
    For I = 0 To 500
    Portd.2 = 1
    Waitms 5
    Portd.2 = 0
    Waitms 5
    Next I
    Portd.7 = 0
    Portd.3 = 0
    End Sub
    
    Sub Rechts()
    Portd.7 = 1
    Portd.3 = 1
    For I = 0 To 1000
    Portd.2 = 1
    Waitms 5
    Portd.2 = 0
    Waitms 5
    Next I
    Portd.7 = 0
    Portd.3 = 0
    End Sub
    Neben bei noch, die Schrittmotorschaltung funktioniert wunderbar. Hab sie schon mit der RN-Control zum laufen bekommen.

    Gruß

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842

    Re: Code für Schrittmotorsteuerung stimmt nicht

    Zitat Zitat von Charly_cs
    ... Meine Vermutung wäre, dass ich in einem Unterprogramm kein weiteres öffnen kann.
    Sind deine HW / SW-Stack u. Frame Werte ausreichend ?
    mit den defaultwerten kommst du nicht weit.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    13.04.2005
    Beiträge
    56
    Hi!

    Danke für die rasche Antwort! Kann mit ihr aber leidernichts anfangen. Was sind denn "HW / SW-Stack u. Frame Werte" ?
    Vom PC aus schalt ich mit einer Digital I/O-Karte. Ich lasse die High/Low-Zustände extra 1 s gesetzt, dass der µ-Controller genug Zeit hat sich diese anzuschauen und die entsprechenden Subs zu starten. Nur scheint er dies nicht zu tun. Woran liegt das?

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Der PC is ein armes Ferkel, der kann da nix dazu.

    Schreib am Anfang des Bascom Programmes:
    $HWSTACK = 64
    $SWSTACK = 96
    $FRAMESIZE = 32
    (type "HELP" for help)

    Immer, wenn irgendwelche Subprogramme irgendwie seltsam reagieren, stehen diese Werte unter Verdacht.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    13.04.2005
    Beiträge
    56
    Habs gemacht und jetzt mag er es mir nicht compilieren.
    Bringt mir für alle drei Zeilen einen assignment error.
    Kannst du mir da auch weiterhelfen?

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Tut mir, leid, war unterwegs.

    Zitat Zitat von Bascom Help
    Action

    Sets the available space for the Hardware stack.

    Syntax

    $HWSTACK = var

    Remarks

    Var A numeric decimal value.




    Syntax

    $SWSTACK = var

    Remarks

    Var A numeric decimal value.

    Syntax

    $FRAMESIZE = var

    Remarks

    Var A numeric decimal value.

    Is mir jetzt nicht klar, was ihm nicht passen könnte.

    kannst du das Stück Code und die .ERR Liste posten ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    13.04.2005
    Beiträge
    56
    Guten Morgen!

    Danke das du mir noch weiterhilfst.
    Hier der Code inclusive deinem:
    Code:
    $regfile = "m32def.dat"
    $hwstack = 64
    $swstack = 96
    $framesize = 32
    
    Declare Sub Schrittmotor()                                  'Subs Ports und Variablen declarieren
    Declare Sub Rechts0()
    Declare Sub Rechts()
    Declare Sub Links0()
    Declare Sub Links()
    Dim I As Integer
    
    
    $crystal = 16000000
    $baud = 9600
    
    
    
    
    Config Pinc.0 = Input
    Config Pinc.1 = Input
    Config Pinc.2 = Input
    Portc.0 = 0
    Portc.0 = 0
    Portc.0 = 0
    
    Config Pind.2 = Output
    Config Pind.3 = Output
    Config Pind.7 = Output
    
    
    Do                                                          'Hauptprogramm
    For I = 0 To 2
    If Portc.i = 1 Then
    Call Schrittmotor
    Else
    Waitms 20
    End If
    Next I
    Loop
    End
    
    Sub Schrittmotor()
    If Portc.0 = 1 And Portc.1 = 0 Then
       If Portc.2 = 0 Then
       Call Links0
       Else
       Call Links
       End If
       Else
       If Portc.0 = 0 And Portc.1 = 1 Then
          If Portc.2 = 0 Then
          Call Rechts0
          Else
          Call Rechts
          End If
       End If
    End If
    End Sub
    
    Sub Links0()
    Portd.7 = 1
    Portd.3 = 0
    For I = 0 To 500
    Portd.2 = 1
    Waitms 5
    Portd.2 = 0
    Waitms 5
    Next I
    Portd.7 = 0
    Portd.3 = 0
    End Sub
    
    Sub Links()
    Portd.7 = 1
    Portd.3 = 0
    For I = 0 To 1000
    Portd.2 = 1
    Waitms 5
    Portd.2 = 0
    Waitms 5
    Next I
    Portd.7 = 0
    Portd.3 = 0
    End Sub
    
    Sub Rechts0()
    Portd.7 = 1
    Portd.3 = 1
    For I = 0 To 500
    Portd.2 = 1
    Waitms 5
    Portd.2 = 0
    Waitms 5
    Next I
    Portd.7 = 0
    Portd.3 = 0
    End Sub
    
    Sub Rechts()
    Portd.7 = 1
    Portd.3 = 1
    For I = 0 To 1000
    Portd.2 = 1
    Waitms 5
    Portd.2 = 0
    Waitms 5
    Next I
    Portd.7 = 0
    Portd.3 = 0
    End Sub
    Der Errorcode:

    Code:
    Error : 46    Line :   2     Assignment error [$HWSTACK: 112   64: 112]  , in File : C:\DOKUMENTE UND EINSTELLUNGEN\CHARLY1\DESKTOP\BASCOM-BEISPIELE\SCHRITTMOTOR üBER COMPUTER.BAS
    Error : 46    Line :   3     Assignment error [$SWSTACK: 112   96: 112]  , in File : C:\DOKUMENTE UND EINSTELLUNGEN\CHARLY1\DESKTOP\BASCOM-BEISPIELE\SCHRITTMOTOR üBER COMPUTER.BAS
    Error : 46    Line :   4     Assignment error [$FRAMESIZE: 112   32: 112]  , in File : C:\DOKUMENTE UND EINSTELLUNGEN\CHARLY1\DESKTOP\BASCOM-BEISPIELE\SCHRITTMOTOR üBER COMPUTER.BAS
    Gruß

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Seltsam. Ich hab deinen Code, wie er ist, mit Copy & Paste meinem Bascom in die Hand gedrückt und er hat das Ganze mit wohligem Grunzen
    ohne irgendwelche Kommentare übersetzt.
    *ratlos*
    Ich werd' mal versuchen, irgendwie den gleichen Fehler bei mir zu provozieren
    *brabbel*
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    13.04.2005
    Beiträge
    56
    Ich verstehs auch nicht. Wenn ich z.B. das Testprogramm von der RN-Control compilier gibt er mir für die drei Zeilen keinen Fehler aus. Wenns in meinem Programm ist, dann schon. komisch...

  10. #10
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ist nur ein versuch: im gleichen directory wie das programm.BAS programm gibt's nach dem Übersetzen eine file programm.CFG

    Lösch' die mal und versuchs nochmal. (er macht eh eine neue)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen