PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schrittmotor Richtung



Che Guevara
12.01.2009, 20:04
Hallo,

mein schrittmotor vom pollin (siehe thread: schrittmotor aus cd-laufwerk) läuft mittlerweile munter vor sich hin :-)
allerdings nur in eine richtung :-(
bis jetzt habe ich folgendes zur ansteuerung:



$regfile = "m32def.dat"
$crystal = 16000000

Dim Vor(4) As Word
Dim Zust As String * 10
Dim N As Byte
Dim Ein As Byte
Dim Led(4) As Byte
Dim Port As Byte

Config Portc.7 = Output
Config Portc.6 = Output
Config Portb.0 = Output
Config Portb.1 = Output
Config Portd.4 = Output
Config Portd.5 = Output
Portc.6 = 1
Portc.7 = 1
Portb.0 = 1
Portb.1 = 1
Portd.4 = 1
Portd.5 = 1


Vor(1) = 11010 : Vor(2) = 10110 : Vor(3) = 10101 : Vor(4) = 11001
Led(1) = 0 : Led(2) = 1 : Led(3) = 6 : Led(4) = 7

Do

For N = 1 To 4 'schritte!! (n)
For Port = 1 To 4 'anschlüsse!! (port)
Zust = Mid(vor(n) , Port , 1)
Ein = Zust
If Port < 3 Then
Portb.led(port) = Ein
Else
Portc.led(port) = Ein
End If
Next Port
Waitms 2
Next N

Loop

End

das ganze läuft auf dem rn-control, deswegen portc.6 , portc.7 , portb.0 und portb.1 .
durch was müsste ich jetzt folgende zeile ändern, damit er sich in die andere Richtung dreht??

Vor(1) = 11010 : Vor(2) = 10110 : Vor(3) = 10101 : Vor(4) = 11001

warscheinlich ist es ganz einfach, nur ich komme nicht darauf?!?!
habe natürlich auch schon die sufu und google benutzt, allerdings nichts brauchbares gefunden.

danke für eure antworten!
gruß
chris

Michael
12.01.2009, 20:34
Hallo CheGuevara,

abgesehen von der kreativen Art, Nuller und Einser zu verwenden, hast du ja alle Schritte soweit.
Du läßt die Schleife For N = 1 To 4 -> Next N weg und schreibst stattdessen:
If Ereignis = 1 Then
N = N + 1
Else
N = N - 1
End If
If N > 5 Then N = 1
If N < 1 Then N = 4

Dann Kommt dein restlicher Code, der je nach N die richtigen Ports einschaltet.
"Ereignis" ist natürlich 0 oder1 bzw. Vorwärts oder rückwärts.

Gruß, Michael

Che Guevara
12.01.2009, 21:16
Hallo Michael,

danke für deine schnelle und funktionstüchtige antwort :-)
ich muss zugeben, ich habe sehr viele möglichkeiten ausprobiert, das allerdings nicht *schämm*

aber eine frage hätte ich jetzt noch:
ist nicht böse gemeint, aber das mit "der kreativen art" ist doch reine ironie... wie hättest du den das ganze gemacht??

gruß
chris

Michael
12.01.2009, 21:28
Hallo CheGeuvara,


wie hättest du den das ganze gemacht??


Dim Schritt as Byte

Do
Schritt vor oder zurückzählen
Select Case Schritt
Case 0 : Gosub Schritt1
Case 1 : Gosub Schritt2
etc.
End Select
Loop
End

Schritt1:
PortX.Y = 1
PortX.Z = 0
PortX.X = 0
PortA.B = 1
PortC.D = 0
Return
etc.

Gruß, Michael

Che Guevara
12.01.2009, 21:32
so hatte ich es auch schon, allerdings bin ich in der letztn zeit auf dem trip, für alles eine function zu erstellen :-S
vorher hatte ich immer nur für einen best. fall etwas programmiert, dabei bin ich allerdings ziemlich oft auf konflikte/grenzen/viel arbeit xD gestoßen!

gruß
chris