' ---------------------------------------------------------------------------
' 7 Schrittmotoren als Stahl-,Spiegelschalter verwalten mit dem C-Control Basic-M / C-Control Basic von Conrad
' Es stehen 8 K-Byte Speicher für Basic-Token bereit sowie knapp unter 1/4 K-Byte für Assembler.
' Dieses File hat 0.7 K-Byte z.B.
' Der Motor verfährt 25.6 Grad je nach Programmvariante in 13.6 / 26.4 / 61.6 Millisekunden.
' Ich empfehle 1.8 Grad Motoren . Teile mit größeren Gradzahlen laufen zwar ähnlich schnell ,
' haben aber meist Startprobleme und verschlucken Schritte!
' Wenn der 4 Mhz Quarz der CPU gegen eien 8 Mhz erweitert wird verkürzen sic die Zeiten entsprechend.
' Komandoeingang ist der A/D Eingangskanal 1 , könnte auch die RS232 sein
'
' Mit verschiedenen Demos für's Motortiming
' Assembler & 8 MHz Qaurz entlocken dem Teil Pulsfolgen bis >250 KHz .
'
' (c) by Gento
'--------------------------------------------------------------------------------

Define Motor_1_Richtung Port[1]
Define Motor_2_Richtung Port[2]
Define Motor_3_Richtung Port[3]
Define Motor_4_Richtung Port[4]
Define Motor_5_Richtung Port[5]
Define Motor_6_Richtung Port[6]
Define Motor_7_Richtung Port[7]

Define Motor_1_Takt Port[1]
Define Motor_2_Takt Port[2]
Define Motor_3_Takt Port[3]
Define Motor_4_Takt Port[4]
Define Motor_5_Takt Port[5]
Define Motor_6_Takt Port[6]
Define Motor_7_Takt Port[7]

Define SAA_Reset Port[8]
Define Komandoeingang AD[1]

define Komando Byte
define Komando_Alt Byte
define Schritte Byte
define Vor Byte
define Zurueck Byte

' ------------------------------------ Programmoperationen :

Vor=1
Zurueck=0
Gosub Referenzlauf
Komando_Alt=0



#Einlesen
Komando = Komandoeingang
Komando = Komando shr 2
if Komando=Komando_Alt then goto Einlesen
on Komando gosub
Motor_1_vor,Motor_1_zurueck,Motor_2_vor,Motor_2_zurueck,Motor_3_vor,Motor_3_zurueck,Motor_4_vor,Motor_4_zurueck
'
Motor_5_vor,Motor_5_zurueck,Motor_6_vor,Motor_6_zurueck,Motor_7_vor,Motor_7_zurueck,Effekt_1
Komando_Alt=Komando
goto Einlesen



#Referenzlauf 'geht auch als kürzer indem man den gesamten Byteport taktet.
Pulse SAA_Reset 'SAA1027 Reseten und Motoren auf Schritt 0 bringen
Gosub Motor_1_vor
Gosub Motor_1_zurueck
Gosub Motor_2_vor
Gosub Motor_2_zurueck
Gosub Motor_3_vor
Gosub Motor_3_zurueck
Gosub Motor_4_vor
Gosub Motor_4_zurueck
Gosub Motor_5_vor
Gosub Motor_5_zurueck
Gosub Motor_6_vor
Gosub Motor_6_zurueck
Gosub Motor_7_vor
Gosub Motor_7_zurueck
return

#Motor_1_vor ' Variante 1: 25.6 Grad
schwenken in ca 61,6 mSek bei 263 Schritte Sek.
Motor_1_Richtung=Vor
for Schritte=1 to 16
Pulse Motor_1_Takt
next
Return

#Motor_1_zurueck
Motor_1_Richtung=Zurueck ' Variante 2: 25.6 Grad schwenken in ca 26,4> mSek bei 625 Schritte Sek.
Motor_1_Takt=1 ' Schaffen nur gute
Restpostenmotoren aus dem Stand !
Motor_1_Takt=0
Motor_1_Takt=1
Motor_1_Takt=0
Motor_1_Takt=1
Motor_1_Takt=0
Motor_1_Takt=1
Motor_1_Takt=0
Motor_1_Takt=1
Motor_1_Takt=0
Motor_1_Takt=1
Motor_1_Takt=0
Motor_1_Takt=1
Motor_1_Takt=0
Motor_1_Takt=1
Motor_1_Takt=0
Motor_1_Takt=1
Motor_1_Takt=0
Motor_1_Takt=1
Motor_1_Takt=0
Motor_1_Takt=1
Motor_1_Takt=0
Motor_1_Takt=1
Motor_1_Takt=0
Motor_1_Takt=1
Motor_1_Takt=0
Motor_1_Takt=1
Motor_1_Takt=0
Motor_1_Takt=1
Motor_1_Takt=0
Motor_1_Takt=1
Motor_1_Takt=0
Return

#Motor_2_vor Motor_1_Richtung=Vor ' Variante 3: 25.6 Grad schwenken in ca 13,6 mSek bei 1250 Schritte Sek.
Pulse Motor_2_Takt ' Schafften nur sehr gute Schrittmotoren aus dem Stand.
Pulse Motor_2_Takt
Pulse Motor_2_Takt
Pulse Motor_2_Takt
Pulse Motor_2_Takt
Pulse Motor_2_Takt
Pulse Motor_2_Takt
Pulse Motor_2_Takt
Pulse Motor_2_Takt
Pulse Motor_2_Takt
Pulse Motor_2_Takt
Pulse Motor_2_Takt
Pulse Motor_2_Takt
Pulse Motor_2_Takt
Pulse Motor_2_Takt
Pulse Motor_2_Takt
Return

#Motor_2_zurueck
Motor_2_Richtung=Zurueck
for Schritte=1 to 16
Pulse Motor_1_Takt
next
Return

#Motor_3_Vor
Motor_3_Richtung=Vor
for Schritte=1 to 16
Pulse Motor_1_Takt
next
Return

#Motor_3_zurueck
Motor_2_Richtung=Zurueck
for Schritte=1 to 16
Pulse Motor_1_Takt
next
Return

#Motor_4_Vor
Motor_4_Richtung=Vor
for Schritte=1 to 16
Pulse Motor_1_Takt
next
Return

#Motor_4_zurueck
Motor_4_Richtung=Zurueck
for Schritte=1 to 16
Pulse Motor_1_Takt
next
Return

#Motor_5_Vor
Motor_5_Richtung=Vor
for Schritte=1 to 16
Pulse Motor_1_Takt
next
Return

#Motor_5_zurueck
Motor_5_Richtung=Zurueck
for Schritte=1 to 16
Pulse Motor_1_Takt
next
Return

#Motor_6_Vor
Motor_6_Richtung=Vor
for Schritte=1 to 16
Pulse Motor_1_Takt
next
Return

#Motor_6_zurueck
Motor_6_Richtung=Zurueck
for Schritte=1 to 16
Pulse Motor_1_Takt
next
Return

#Motor_7_Vor
Motor_7_Richtung=Vor
for Schritte=1 to 16
Pulse Motor_1_Takt
next
Return

#Motor_7_zurueck
Motor_7_Richtung=Zurueck
for Schritte=1 to 16
Pulse Motor_1_Takt
next
Return

#Effekt_1 ' Zwei Motoren bewegen sich gleichzeitig.
Motor_1_Richtung=Vor
Motor_5_Richtung=Zurueck
For Schritte=1 to 16
Pulse Motor_1_Takt
Pulse Motor_5_Takt
next
Return