Charly_cs
14.07.2005, 16:07
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:
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ß
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:
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ß