Ich bin dabei eine Schrittmotorsteuerung zu implementieren. Dazu takte ich einen Schrittmotortreiber-IC. Der Takt wird über einen Timer erzeugt und in selbigem gleich der Schrittzähler mit hochgezählt bzw runter gezählt.
Das Problem dabei ist, daß zwar der Timer wunderschön läuft und auch die entsprechenden Variable "Actualposition" setzt, aber das Hauptprogramm schlicht die Abbruchbedingung nicht auswertet.
Beispiel:
Actualposition =0 (integer)
Value =10 (integer)
bedeutet, daß der Timer 10 mal aufgerufen werden muss, bis die aktuelle Position des Motors der gewünschten Position (in Value) entspricht. Wenn beide gleich sind, dann soll die Do-Loop-Until Klausel verlassen werden und der Timer gestoppt. Danach wird die aktuelle Position ausgegeben. Passiert aber nicht.
Ich habe das auch schon mit anderen Schleifen-Konstrukten wie While-Do usw. durchprobiert. Hat alles nix gebracht. Auch eine extra auswertung nochmal in der Schleife, wie im Codebeispiel hat mir nix gebracht. Die Abbruchbedingung wird nicht ausgeführt, sondern Actualposition läut munter weiter in die entsprechende Richtung.
Muss da irgendwo noch ein Wait rein?
Code:$crystal = 6000000 Config Timer0 = Timer , Prescale = 256 On Timer0 Tim0_isr Clock Alias Portc.2 Dirout Alias Portc.3 ... 'Hauptschleife Do If Actualposition = Value Then 'nur zum test hier nochmal auswerten Stop Timer0 End If Loop Until Actualposition = Value 'solange ungleich Stop Timer0 Print Actualposition ... 'ISR von Timer0 Tim0_isr: Timer0 = Stepdelay ' zeit setzen Clock = Not Clock ' negieren und damit takten' If Dirout = 0 Then 'Richtung auswerten Decr Actualposition Else Incr Actualposition End If Return
Lesezeichen