Sind deine HW / SW-Stack u. Frame Werte ausreichend ?Zitat von Charly_cs
mit den defaultwerten kommst du nicht weit.
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:
Neben bei noch, die Schrittmotorschaltung funktioniert wunderbar. Hab sie schon mit der RN-Control zum laufen bekommen.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
Gruß
Sind deine HW / SW-Stack u. Frame Werte ausreichend ?Zitat von Charly_cs
mit den defaultwerten kommst du nicht weit.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
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?
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.
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?
Tut mir, leid, war unterwegs.
Zitat von Bascom Help
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.
Guten Morgen!
Danke das du mir noch weiterhilfst.
Hier der Code inclusive deinem:
Der Errorcode: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
Gruß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
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.
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...
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.
Lesezeichen