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