Das Testprogramm lässt sich jetzt raufspielen keine Ahnung warum. Nun wollte ich diese Programm testen und es treten wieder die selben Fehler auf.
Code:
'###################################################
'RnControlStepper.BAS
'für
'RoboterNetz Board RN-Control ab Version 1.1
'Das neue preiswerte Controllerboard zum experimentieren
'
'Aufgabe:
' Dieses testprogramm steuert einen bipolaren Schritttmotor an
' Den verschiedenen Tasten sind bestimmte Funktionen zugeordnet
' Taste 1: Modus einstellen zwischen Vollschritt, Halbschritt und
' Einstellmöglichkeit für delay zwischen den Schritten
' Taste 2: Schrittmotor vorwärts im Halb- oder Vollschritt, bzw. delay
' um 1 erhöhen
' Taste 3: rückwärts wie bei Taste 2, bzw. delay - 1
' Taste 4: Schrittmotor im gewählten Modus vorwärts ohne Tasten-Delay
' Der Schrittmotor sollte so in etwa die gleiche Nennspannung haben, wie
' das Netzteil mit dem das RN-Control board gefüttert wird.
' Ich teste mit einem 9V Netzteil, und einem Schrittmotor der eigentlich 12V hat.
' Es funktioniert absolut einwandfrei.
' Da ich absoluter Microcontroller, Schrittmotor und Bascom- Neuling bin, gibt's
' da sicher noch einiges zu verbessern, oder?
' Autor: Harry
'##############################################################
Declare Sub Fullstepforward()
Declare Sub Fullstepbackward()
Declare Sub Halfstepforward()
Declare Sub Halfstepbackward()
Declare Sub Lauflicht()
Declare Sub Dofullstep()
Declare Sub Dohalfstep()
Declare Sub Setupprocedure()
Declare Function Tastenabfrage() As Byte
Declare Sub Fastfullstepforward()
Declare Sub Fasthalfstepforward()
$regfile = "m16def.dat"
Dim I As Integer
Dim N As Integer
Dim Ton As Integer
Dim Setupprocindex As Integer
$crystal = 8000000 'Quarzfrequenz
$baud = 9600
Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1 'Pullup Widerstand ein
Dim Taste As Byte
' an diesen Ports hängt der Schrittmotor. jetzt kann man die pins ganz einfach
' mit dem Alias-Namen ansprechen.
A Alias Portc.6
B Alias Portc.7
C Alias Portb.0
D Alias Portb.1
'need this pins for controlling the L293D
Config Pind.4 = Output
Config Pind.5 = Output
Config Pinc.6 = Output
Config Pinc.7 = Output
Config Pinb.0 = Output
Config Pinb.1 = Output
'wir nehmen diese beiden LED's um anzuzeigen, ob der Vollschritt, Halbschritt
'oder der Setup-Modus aktiv ist. Mit dem Setup-Modus kann das delay zwischen den
'Schritten stufenlos verstellt werden
Config Pinc.0 = Output
Config Pinc.1 = Output
'Wir legen uns ein Array für den Vollschrittmodus an. Wir brauchen nur die ersten
'vier Bits. Jedes Bit gibt dabei an, ob an dem jeweiligen Port Strom fließen soll
'oder eben nicht. 4 Elemente deswegen, weil es bei Vollschritt eben 4 Schritte gibt.
Dim Fullsteparray(4) As Byte
Fullsteparray(1).1 = 1
Fullsteparray(1).2 = 0
Fullsteparray(1).3 = 1
Fullsteparray(1).4 = 0
Fullsteparray(2).1 = 1
Fullsteparray(2).2 = 0
Fullsteparray(2).3 = 0
Fullsteparray(2).4 = 1
Fullsteparray(3).1 = 0
Fullsteparray(3).2 = 1
Fullsteparray(3).3 = 0
Fullsteparray(3).4 = 1
Fullsteparray(4).1 = 0
Fullsteparray(4).2 = 1
Fullsteparray(4).3 = 1
Fullsteparray(4).4 = 0
'Das gleiche nochmal für Halbschritt. Hier haben wir dann allerdings 8 Schritte.
Dim Halfsteparray(8) As Byte
Halfsteparray(1).1 = 1
Halfsteparray(1).2 = 0
Halfsteparray(1).3 = 1
Halfsteparray(1).4 = 0
Halfsteparray(2).1 = 1
Halfsteparray(2).2 = 0
Halfsteparray(2).3 = 0
Halfsteparray(2).4 = 0
Halfsteparray(3).1 = 1
Halfsteparray(3).2 = 0
Halfsteparray(3).3 = 0
Halfsteparray(3).4 = 1
Halfsteparray(4).1 = 0
Halfsteparray(4).2 = 0
Halfsteparray(4).3 = 0
Halfsteparray(4).4 = 1
Halfsteparray(5).1 = 0
Halfsteparray(5).2 = 1
Halfsteparray(5).3 = 0
Halfsteparray(5).4 = 1
Halfsteparray(6).1 = 0
Halfsteparray(6).2 = 1
Halfsteparray(6).3 = 0
Halfsteparray(6).4 = 0
Halfsteparray(7).1 = 0
Halfsteparray(7).2 = 1
Halfsteparray(7).3 = 1
Halfsteparray(7).4 = 0
Halfsteparray(8).1 = 0
Halfsteparray(8).2 = 0
Halfsteparray(8).3 = 1
Halfsteparray(8).4 = 0
'für den Halbschritt brauchen wir desweiteren noch ein array mit dem wir die
'Zustände der Ports setzen. Im Gegensatz zum Vollschritt, wo nach dem Schritt der
'Strom an beiden Spulen einfach abgeschaltet werden kann, muß das beim Halbschritt
'anders sein. Beim Halbschritt wird eben auch der Zustand der Spule benötigt.
Dim Halfstepenable(8) As Byte
Halfstepenable(1).1 = 1
Halfstepenable(1).2 = 1
Halfstepenable(2).1 = 1
Halfstepenable(2).2 = 0
Halfstepenable(3).1 = 1
Halfstepenable(3).2 = 1
Halfstepenable(4).1 = 0
Halfstepenable(4).2 = 1
Halfstepenable(5).1 = 1
Halfstepenable(5).2 = 1
Halfstepenable(6).1 = 1
Halfstepenable(6).2 = 0
Halfstepenable(7).1 = 1
Halfstepenable(7).2 = 1
Halfstepenable(8).1 = 0
Halfstepenable(8).2 = 1
'da heben wir uns auf, an welchem Schritt wir uns im Vollschritt-modus gerade
'befinden. Geht von 1 bis 4.
Dim Fullstepindex As Integer
'Ditto für den Halbschritt nur geht's hier von 1 bis 8
Dim Halfstepindex As Integer
'Das ist das delay zwischen den Schritten
Dim Delaybetweensteps As Word
Fullstepindex = 0
Halfstepindex = 0
Delaybetweensteps = 10
Setupprocindex = 0
'Kommt noch aus dem Originalcode von RN-Control
Sound Portd.7 , 400 , 450 'BEEP
Print
Print "**** RN-Control V1.4 *****"
Print "Das neue Experimentier- und Roboterboard"
Print
Do
'je nachdem, welche Taste wird gedrückt haben, schalten wir in den
'halbschritt oder vollschritt-modus oder in den modus, in dem das delay
'verstellt werden kann.
'Taste 1 = Modus einstellen
'Taste 2 = Motor im eingestellten modus vorwärts oder delay + 1, je nach modus
'Taste 3 = Motor rückwärts oder delay - 1, je nach modus
'Taste 4 = Motor mehrere male vorwärts ohne delay der tastenabfrage
Taste = Tastenabfrage()
If Taste <> 0 Then
Select Case Taste
Case 1
Call Setupprocedure
Case 2
If Setupprocindex = 0 Then
Fullstepforward
End If
If Setupprocindex = 1 Then
Halfstepforward
End If
If Setupprocindex = 2 Then
Delaybetweensteps = Delaybetweensteps + 1
Print "delaybetweensteps " ; Delaybetweensteps
End If
Case 3
If Setupprocindex = 0 Then
Fullstepbackward
End If
If Setupprocindex = 1 Then
Halfstepbackward
End If
If Setupprocindex = 2 Then
Delaybetweensteps = Delaybetweensteps - 1
If Delaybetweensteps < 1 Then
Delaybetweensteps = 1
End If
Print "delaybetweensteps " ; Delaybetweensteps
End If
Case 4
If Setupprocindex = 0 Then
Fastfullstepforward
End If
If Setupprocindex = 1 Then
Fasthalfstepforward
End If
End Select
End If
Waitms 100
Loop
End
Sub Setupprocedure
Incr Setupprocindex
If Setupprocindex > 2 Then
Setupprocindex = 0
End If
Select Case Setupprocindex
'Vollschritt Modus
Case 0
Portc.0 = 1
Portc.1 = 0
Print "no setup, fullstep"
'Halbschritt Modus
Case 1
Portc.0 = 0
Portc.1 = 1
Print "no setup, halfstep"
'Setup modus in dem mit Taste 2 oder 3 das delay verstellt werden kann
Case 2
Portc.0 = 1
Portc.1 = 1
Print "setup, delaybetweensteps"
End Select
End Sub
'Diese Unterfunktion fragt die Tastatur am analogen Port ab.
'Hier hab ich so mein Problem. Das ganze geht zu langsam. Muß irgendwie anders
'implementiert werden. Da ich mir vorstelle, daß bei gedrückter Taste der Motor
'läuft und bei loslassen wieder stoppt. Das hier erzeugt ein zu großes Delay.
Function Tastenabfrage() As Byte
Local Ws As Word
Tastenabfrage = 0
Start Adc
Ws = Getadc(7)
If Ws < 1010 Then
Select Case Ws
Case 400 To 450
Tastenabfrage = 1
Case 330 To 380
Tastenabfrage = 2
Case 265 To 305
Tastenabfrage = 3
Case 180 To 220
Tastenabfrage = 4
Case 100 To 130
Tastenabfrage = 5
End Select
' Print "Es wurde gedrueckt: " ; Tastenabfrage
End If
End Function
'Stepper in Fullstep-mode forward
Sub Fullstepforward()
Incr Fullstepindex
If Fullstepindex > 4 Then
Fullstepindex = 1
End If
Dofullstep
End Sub
'Stepper in Fullstep-mode backward
Sub Fullstepbackward()
Decr Fullstepindex
If Fullstepindex < 1 Then
Fullstepindex = 4
End If
Dofullstep
End Sub
'Stepper in Halfstep-mode forward
Sub Halfstepforward()
Incr Halfstepindex
If Halfstepindex > 8 Then
Halfstepindex = 1
End If
Dohalfstep
End Sub
'Stepper in Halfstep-mode backward
Sub Halfstepbackward()
Decr Halfstepindex
If Halfstepindex < 1 Then
Halfstepindex = 8
End If
Dohalfstep
End Sub
'einen Schritt im Vollschritt-Modus ausführen
Sub Dofullstep()
Portd.4 = 1
Portd.5 = 1
A = Fullsteparray(fullstepindex).1
B = Fullsteparray(fullstepindex).2
C = Fullsteparray(fullstepindex).3
D = Fullsteparray(fullstepindex).4
Waitms Delaybetweensteps
'Hier schalten wir die Spulen am Schrittmotor wieder ab. Vorteil: spart Strom.
'Nachteil: Der Motor kann durch äußere Einwirkung weiter gedreht werden.
'Das geht allerdings nur im Vollschrittmodus. Im Halbschritt darf man mit
'Strom eben nicht sparsam umgehen.
Portd.4 = 0
Portd.5 = 0
End Sub
Sub Dohalfstep()
Portd.4 = Halfstepenable(halfstepindex).1
Portd.5 = Halfstepenable(halfstepindex).2
A = Halfsteparray(halfstepindex).1
B = Halfsteparray(halfstepindex).2
C = Halfsteparray(halfstepindex).3
D = Halfsteparray(halfstepindex).4
Waitms Delaybetweensteps
'Hier die Stromspar-Geschichte auskommentiert. Läuft ansosnten nicht ordentlich.
'D.h. der Motor macht mal nen kleineren, mal nen größeren Schritt.
' Portd.4 = 0
' Portd.5 = 0
End Sub
'Lass den Motor im Vollschritt mal ordentlich drehen
Sub Fastfullstepforward()
For I = 1 To 500
Incr Fullstepindex
If Fullstepindex > 4 Then
Fullstepindex = 1
End If
Dofullstep
Next
End Sub
'Ditto im Halbschritt
Sub Fasthalfstepforward()
For I = 1 To 500
Incr Halfstepindex
If Halfstepindex > 8 Then
Halfstepindex = 1
End If
Dohalfstep
Next
End Sub
Lesezeichen