Also wenn nur einer der beiden laufen soll, dann würde ich den Code
nehmen der hier schon mal besprochen wurde. Ich weiß jetzt nicht mehr
wer es war der mir dabei geholfen hatte.
Joachim ich poste mal meinen Code, vllt kannst was gebrauchen.
Bei mir haut es 100% hin mit den Code.
Code
Takt_X [@PortB,5] : bit; // X6
DIR_X [@PortB,2]: bit; // X10
Takt_Y [@PortA,7] : bit;
DIR_Y [@PortA,4]: bit;
Code
procedure onTickTimer; //
begin
//Takt X ausgeben
if X_Step = true then
incl(Takt_X);
uDelay_1(3); //alt 3 uS
excl(Takt_X);
endif;
//Takt Y ausgeben
if Y_Step = true then
incl(Takt_Y);
uDelay_1(3); //alt 3 uS
excl(Takt_Y);
endif;
//Takt Z ausgeben
if Z_Step = true then
incl(Takt_Z);
uDelay_1(3); //alt 3 uS
excl(Takt_Z);
endif;
Tick_True:= true;
end;
Code
// S_Freq; -> StartFreq
// E_Freq; -> EndFreq
//==============================================================================
Procedure Proc_Rampen_Fahrt;
begin
TickTimerStop;
rest:= 0;
accel_count:= Start_rampwert;
dly_alt := S_Freq;
newDelay := S_Freq;
TickTimerTime(dly_alt);
TickTimerStart;
Tick_True:= false;
step_half:= step_count div 2;
{Rampe anfahren}
Repeat
if Tick_True = true then
accel_count:= accel_count + 1;
newDelay := dly_alt - (2* dly_alt + rest) div (4 * accel_count + 1);
TickTimerReload(newDelay);
Tick_True:= false;
rest:= (2 * dly_alt + rest) mod (4 * accel_count + 1);
dly_alt := newDelay;
step_count:= step_count - 1;
endif;
until (newDelay < E_Freq) or (step_count = step_half);
rampwert := longword(accel_count);
{Fullspeed}
Repeat
if Tick_True = true then
Tick_True:= false;
step_count:= step_count - 1;
endif;
Until (step_count <= rampwert);
{Rampe abbremsen}
Repeat
if Tick_True = true then
accel_count:= accel_count + 1;
newDelay := dly_alt + (2* dly_alt + rest) div (4 * accel_count + 1);
TickTimerReload(newDelay); // writing a new value
Tick_True:= false;
rest:= (2 * dly_alt + rest) mod (4 * accel_count + 1);
dly_alt := newDelay;
step_count:= step_count - 1;
endif;
until step_count = 0;
//Alles beenden
TickTimerStop;
Tick_True:= false;
X_Step:= false;
Y_Step:= false;
Z_Step:= false;
end Proc_Rampen_Fahrt;
Gruß Frank