Hmm, wie lässt du denn jetzt die Schrittsignale generieren? Normalerweise würde man da einen Timer nehmen und dem dann mittels einer Variablen die Zeit vorgeben, bis er wieder ausgelöst wird. Variable wird kleiner -> Timer löst häufiger aus, Variable wird größer -> Timer löst weniger häufig aus. In der ISR dann nur den Step-Ausgang kurz an- und wieder ausschalten. So kannst du dann die Geschwindigkeit des Steppers steuern.
Hier mal, wie es in einem meiner Codes steht:
Code:
Isr1:
Load Timer1 , Zeit
Porta.1 = 1
Porta.3 = 1
Porta.5 = 1
Waitus 10
Porta.1 = 0
Porta.3 = 0
Porta.5 = 0
Return
Wobei bei mir drei Schrittmotoren gleich angesteuert werden, die Step-Ausgänge befinden sich auf Porta.1, Porta.3 und Porta.5. Zeit hab ich bei mir einfach die Variable genannt, die für die ISR zuständig ist. Durch Load wird das gleich so verrechnet, dass die ISR erst in Zeit*Prescale Taktzyklen ausgelöst wird. Wenn beide Motoren unterschiedlich eingestellt werden sollen, wirst du wohl zwei Timer brauchen. Lies dir am besten mal den Abschnitt zu Timern im Tutorial durch, das wird da alles gut erklärt.
Ansonsten sehen deine If-Verzweigungen noch ein wenig wirr aus. Mach am besten mal die Einrückungen ordentlich, der Übersicht zuliebe. Und wenn hinter dem else nix steht, kannst du es auch weglassen. Und elseif verwenden, das ist günstiger als zwei ähnliche ifs hintereinander.
Der erste Teil in der Hauptschleife lässt sich beispielsweise so zusammenfassen:
Code:
if W1=0 then
Portd.6 = 1
else
Portd.6 = 0
end if
Wenn du eine Variable mehrfach abfragst, kannst du auch eine Case-Struktur verwenden, macht sich besser als zig ifs hintereinander.
Lesezeichen