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






Zitieren

Lesezeichen