Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Zeitproblem (oder: Delay ist nicht gleich Delay)

6 views
Skip to first unread message

Tomas Lankers

unread,
Oct 26, 1999, 3:00:00 AM10/26/99
to
Hmm,
irgendwie ist mir die Sache ja fast peinlich, aber:
Mein Computer ist zu schnell ... ;-)

Ich benötige für eine möglichst einfache Schrittmotoransteuerung
eine *systemunabhängige* Verzögerung in TP6 zur Erzeugung eines
Takts.

Auch wenn Borland im Handbuch und im Helpfile schreibt, DELAY
wäre systemunabhängig, so stimmt das nur bis zum 386. Danach wird
das hoffnungslos systemabhängig.

Daher meine Fragen:

- Hat jemand eine Lösung im Keller liegen ?
- Ist das Problem bei späteren Versionen behoben ?
- Stelle ich vielleicht einfach nur zu hohe Ansprüche ? :-)

Gruß, Thomas

Wilfried Brinkmann

unread,
Oct 26, 1999, 3:00:00 AM10/26/99
to
Tomas Lankers schrieb an All:

Hallo Tomas !

TL> Ich ben杯ige f〉 eine m波lichst einfache Schrittmotoransteuerung
TL> eine *systemunabh�gige* Verz波erung in TP6 zur Erzeugung eines
TL> Takts.

Das geht (solange Du dich unter DOS bewegst) mit Int $15, ah $86 ...

Procedure DosSleep(MilliSecs : Word); assembler;
asm
mov ax,1000
mul ms
mov cx,dx
mov dx,ax
mov ah,$86
int $15
end;

TL> - Ist das Problem bei spдeren Versionen behoben ?

Nein ..

TL> - Stelle ich vielleicht einfach nur zu hohe Anspr…he ? :-)

Mit obiger routine bekommst Du eine aufl敗ung von 1 ms, das sollte reichen.
Ansonsten den Wert von AX verkleinern ...

Gruss, email: tsc...@netsurf.de
Wilfried www : http://tsc.msing.de


Hourdi

unread,
Oct 27, 1999, 3:00:00 AM10/27/99
to

Wilfried Brinkmann <IMf...@news.tsc.bbs.de> schrieb in im Newsbeitrag:
81626b80$wilfried.brinkmann$2.24.600.0$@news.tsc.bbs.de...


> Tomas Lankers schrieb an All:
>
> Hallo Tomas !
>

> TL> Ich ben"tige f r eine m"glichst einfache Schrittmotoransteuerung
> TL> eine *systemunabh"ngige* Verz"gerung in TP6 zur Erzeugung eines


> TL> Takts.
>
> Das geht (solange Du dich unter DOS bewegst) mit Int $15, ah $86 ...
>
> Procedure DosSleep(MilliSecs : Word); assembler;
> asm
> mov ax,1000
> mul ms
> mov cx,dx
> mov dx,ax
> mov ah,$86
> int $15
> end;
>

> TL> - Ist das Problem bei sp"teren Versionen behoben ?
>
> Nein ..
>
> TL> - Stelle ich vielleicht einfach nur zu hohe Anspr che ? :-)
>
> Mit obiger routine bekommst Du eine aufl"sung von 1 ms, das sollte


reichen.
> Ansonsten den Wert von AX verkleinern ...
>
> Gruss, email: tsc...@netsurf.de
> Wilfried www : http://tsc.msing.de
>

Hallo,

auch die "einfach(st)e" Schrittmotoransteuerung sollte eigentlich
spezifiziert werden,
sonst "hoppelt" das Teil leicht unmotiviert. Selbst mit einer alleinigen
Routine
unter purem Steinzeit-DOS (ohne Windoze) ist durch Portausgabe _keine_
gleichmässige Taktfrequenz zu erreichen (egal ob über z.B. PIO8255 oder
LPT),
selbst wenn ein selbstgeschriebenes "Delay" im microsekunden-Bereich
auflösen
kann.

Ohne spezielle Kontrollerkarte für SM (Schrittmotoren) ist nur rudimentäre
Ansteuerung möglich (meist braucht man Rampen für Anlauf und Stop,
Stromabsenkung bei Halt etc.

PS: Ich weiss nichts, aber das perfekt!
--
Gruss
Hourdi
alias Georg O.F. Richter
hou...@t-online.de


Klaus Hartnegg

unread,
Oct 27, 1999, 3:00:00 AM10/27/99
to
Hourdi (hou...@t-online.de) wrote:

: Wilfried Brinkmann <IMf...@news.tsc.bbs.de> schrieb in im Newsbeitrag:
: >
: > TL> Ich ben"tige f r eine m"glichst einfache Schrittmotoransteuerung


: > TL> eine *systemunabh"ngige* Verz"gerung in TP6 zur Erzeugung eines
: > TL> Takts.

Delay in TP6 hat einen Fehler bei Prozessoren mit Cache, verwende TP7.
Allerdings das hat einen Fehler bei den heutigen schnellen Prozessoren,
verwende also noch besser NewDelay o.ae. von meiner Web-Seite,
bei Run Time Error 200 zu finden, oder meine htimers unit,
bei meinen Pascal Sources zu finden.

: sonst "hoppelt" das Teil leicht unmotiviert. Selbst mit einer alleinigen


: Routine
: unter purem Steinzeit-DOS (ohne Windoze) ist durch Portausgabe _keine_
: gleichmässige Taktfrequenz zu erreichen (egal ob über z.B. PIO8255 oder
: LPT),

Das geht ganz sicher, notfalls indem man ueber port[$21] alle
Interrupts bis auf Timer abschaltet, den timer interrupt selbst
programmiert und den Port-Befehl in der Interrupt-Routine absetzt.
Dafuer gibt's eine Timer FAQ, kann ich bei Bedarf raussuchen.
Oder alles ganz ohne Interrupts mit abgezaehlten
Schleifendurchlaeufen. Dann ist das ganze vom Prozessor-Takt abhaengig,
aber den kann man am Anfang einmal messen und beruecksichtigen.
So machen die diversen delay prozedur fuer Turbo Pascal das auch,
dort koennte man es abschauen, nur eben in der Initialisierung
alle Interrupts bis auf Timer abschalten und im Delay dann restlos alle
Interrupts abschalten. Vielleicht laesst sich NewDelay ganz einfach
entsprechend ergaenzen, evtl. ist das da sogar schon drin.

: Ohne spezielle Kontrollerkarte für SM (Schrittmotoren) ist nur rudimentäre


: Ansteuerung möglich (meist braucht man Rampen für Anlauf und Stop,
: Stromabsenkung bei Halt etc.

Wo ist das Problem? Das geht alles auch rein per Software.
Habe ich vor Ewigkeiten mal fuer Apple ][ programmiert
(weil es fuer Erphi-Controller keine Treiber fuer das AP22 CPM gab).
Dort *musste* die CPU all das selbst machen, weil diese Elektronik
damals auf den Kontrollerkarten nicht drauf war. Funktionierte tadellos.

Klaus
--
Klaus Hartnegg, Institut fuer Biophysik, Hansa-Strasse 9a, D-79104 Freiburg
hart...@uni-freiburg.de http://www.brain.uni-freiburg.de/~klaus/


Heiko Tietze

unread,
Oct 27, 1999, 3:00:00 AM10/27/99
to
On Tue, 26 Oct 1999 22:31:37 +0200, Tomas Lankers <r-t...@t-online.de>
wrote:

>
>Auch wenn Borland im Handbuch und im Helpfile schreibt, DELAY
>wäre systemunabhängig, so stimmt das nur bis zum 386. Danach wird
>das hoffnungslos systemabhängig.
>
>Daher meine Fragen:
>
>- Hat jemand eine Lösung im Keller liegen ?

DOS benutzen - d.h. unter Wxx laeuft die Routine zwar, aber nicht
unbedingt sicher:

{$Q-,n+}
unit timer;
interface

procedure StartTimer; { Start the microsecond-timer }
function Timer : longint; { Read the time since StartTime }
{******************************************************************}

implementation
uses crt;
type time=record
doscount:longint;
timercount:word;
end;

var Ts,Te,Ty,erg : real;
ExitSave : pointer;
starttime,stoptime,elapsedtime:time;

const point:^longint=Ptr($40,$6C);
fudge:extended = 83810.0/100000000.0;

procedure starttimer;
begin
port[$43]:=$34;
port[$40]:=0;
port[$40]:=0;
startTime.dosCount:=point^;
startTime.timerCount:=0;
end;

function timer:longint;
var temp,temp1:byte;
begin
port[$43]:=0;
temp:=port[$40];
temp1:=port[$40];

stopTime.timerCount:=((temp1 shl 8)) + temp;
stopTime.dosCount:=point^;

elapsedTime.dosCount:=stopTime.dosCount - startTime.dosCount;
elapsedTime.timerCount:=65535-stopTime.timerCount;

timer:=round((longint(elapsedTime.dosCount shl 16) +
elapsedTime.timerCount)*fudge);
end;
{$Q+}

end.

>- Ist das Problem bei späteren Versionen behoben ?
die windows-internen timer (MMSytem) kannst du gleich voellig
vergessen ! es gibt aber HiResTimer fuer Delphi, die zu funktionieren
scheinen....
>- Stelle ich vielleicht einfach nur zu hohe Ansprüche ? :-)
wer hat die nicht
>
>Gruß, Thomas
HTH, H.
ICQ: 38076460

Oliver Hanka

unread,
Oct 28, 1999, 3:00:00 AM10/28/99
to

Tomas Lankers schrieb:

> Hmm,
> irgendwie ist mir die Sache ja fast peinlich, aber:
> Mein Computer ist zu schnell ... ;-)

Das geht mir auch so .... (grins)

Kannst du mir mal den Schaltplan von der Schrittmotoren steuereung
mailen ?!? Ich hab auch mal so nen Ding gebastelt, aber bin wohl
ihrgendwie zu doof gewesen das zum laufen zu bringen. :-( Deswegen such
ich jetzt gute Schaltpläne.
(Gibt es hier Netz vielleicht ne Seite voll mit solchen Dingern !?)

Danke

Oliver

e@mail : oliver...@wiesbaden.netsurf.de


Ing. Franz Glaser

unread,
Oct 28, 1999, 3:00:00 AM10/28/99
to
Oliver Hanka wrote:

> Kannst du mir mal den Schaltplan von der Schrittmotoren steuereung
> mailen ?!? Ich hab auch mal so nen Ding gebastelt, aber bin wohl
> ihrgendwie zu doof gewesen das zum laufen zu bringen. :-( Deswegen such
> ich jetzt gute Schaltpläne.
> (Gibt es hier Netz vielleicht ne Seite voll mit solchen Dingern !?)

Da gibt es eine Schrittmotorseite, aber ich habe sie vergessen.
Sie müßte auf meiner Elektronik-links zu finden sein:
http://members.xoom.com/f_glaser/hard/elinks.html
--
Franz Glaser, Glasau 3, A-4191 Vorderweissenbach Austria +43-7219-7035-0
Muehlviertler Elektronik Glaser. Industrial control and instrumentation
http://members.eunet.at/meg-glaser/ http://members.xoom.com/f_glaser/
http://www.geocities.com/~franzglaser/ http://start.at/bedarf

0 new messages