Hier ist eine 20 Schritt Schablone um die Schritte besser nachvollziehen zu können. Kann man unter den Motor kleben. Und einen Zeiger an die Achse machen.
\ Schrittmotor testen (Unipolarmotor) \ Portpins als Ausgaenge betreiben. \ H-Puls schaltet Transistor, der die Spule im Motor treibt. \ 9V --- Spule --- TIP120 --- GND \ ^<-Diode-^ ^--- R --- P2.x BIN : init 1111 P2 1+ cset ; \ P2.0..3 = out : aus 1111 P2 cclr ; : PULS ( x m adr -- x ) c! dup ms ; : _A_ 0001 p2 puls ; : _B_ 0010 p2 puls ; : _C_ 0100 p2 puls ; : _D_ 1000 p2 puls ; : _AB_ 0011 P2 puls ; : _BC_ 0110 P2 puls ; : _CD_ 1100 P2 puls ; : _DA_ 1001 P2 puls ; DECIMAL \ wave drive mode : WDM ( x -- ) init aus BEGIN _A_ _B_ _C_ _D_ key? UNTIL drop aus ; \ full step drive : FSD ( x -- ) init aus BEGIN _AB_ _BC_ _CD_ _DA_ key? UNTIL drop aus ; \ half step drive : HSD ( x -- ) init aus BEGIN _A_ _AB_ _B_ _BC_ _C_ _CD_ _D_ _DA_ key? UNTIL drop aus ; \ Halbschritte rechts oder links drehen. VARIABLE STEPS 0 steps ! \ im flash Schrittfolge ablegen IHERE ' _A_ i, ' _AB_ i, ' _B_ i, ' _BC_ i, ' _C_ i, ' _CD_ i, ' _D_ i, ' _DA_ i, CONSTANT FOLGE : STEP+ 1 steps +! ; : STEP- -1 steps +! ; : FOLGEADR ( n -- adr ) 8 mod 2* folge + ; \ Pulsdauer auf den stack legen! : RECHTS ( ms n -- ms ) \ n Schritte rechts herum drehen dup 0 > IF 0 DO step+ steps @ folgeadr @ execute LOOP ELSE drop THEN aus ; : LINKS ( ms n -- ms ) \ n Schritte links herum drehen dup 0 > IF 0 DO step- steps @ folgeadr @ execute LOOP ELSE drop THEN aus ; ( finis)