Re: Pausen im µs Bereich
Hardware-Handshake ist doch auf dem LPT eh schon vorgesehen, hast Du keinen I/O-Pin mehr frei um die vom System vorgesehene Flusskontrolle zu nutzen?
|
Re: Pausen im µs Bereich
Zitat:
Delphi-Quellcode:
Das Sleep(1) ist der Knackpunkt.. so ein Sleep(0,2) wäre mir lieb z.B.
procedure EnableStrobe();
begin SetPortBit($378, 4); Sleep(1); ClrPortBit($378, 4); end; Mfg. |
Re: Pausen im µs Bereich
Ich weis nicht obs wegoptimiert wird, aber du kannst ja mal ein
Delphi-Quellcode:
probieren :stupid:
for i := 0 to 10000 do
asm NOP; end; |
Re: Pausen im µs Bereich
Du solltest besser den Pause-Befehl nehmen - der ist für solche Anwendungen gedacht.
|
Re: Pausen im µs Bereich
Zitat:
Danke, perfekt. (Ich hab an der Grenze noch etwas gedreht, weiß nicht wie lange es im Endeffekt verzögert, aber das Bild wird auf Klick aufgebaut) MfG, Danke und bis zum nächsten Mal :thumb: |
Re: Pausen im µs Bereich
PS: Sleep(1) ist bei aktuellen Betriebssystemen 0 bis 16 ms lang, also durchschnittlich 8ms
ich mach es meistens so:
Delphi-Quellcode:
und wenn dich die Dauer interessiert ... einfach mal messen
for i := 0 to 10000 do if i = 0 then ;
Delphi-Quellcode:
oder
QueryPerformanceFrequency(Freq);
QueryPerformanceCounter(Start); for k := 1 to Durchlaeufe do for i := 0 to 10000 do if i = 0 then ; QueryPerformanceCounter(Stopp); Dauer := (Stopp - Start) / Freq / Durchlaeufe;
Delphi-Quellcode:
QueryPerformanceFrequency(Freq);
QueryPerformanceCounter(Start); for i := 1 to 10000 * Durchlaeufe do if i = 0 then ; QueryPerformanceCounter(Stopp); Dauer := (Stopp - Start) / Freq / Durchlaeufe; |
Re: Pausen im µs Bereich
Ich hatte vor Jahren mal ein Projekt wo ich ne SW für nen Programmer von Atmel am LPT als Ersatz für das mitgelieferte DOS-Tool geschrieben habe. War so'n Teil für 89Cx usw. dessen Schaltpläne irgendwo bei Atmel auf der Seite liegen.
Ich habs auch über QueryPerformanceCounter / QueryPerformanceFrequency gelöst. Erst mit QPF den Wert per Sekunde ermitteln, dann mit QPC einen Startwert lesen, mein Delta zu Startwert berechnen und mit QPC solange lesen bis AktuellerWert >= Startwert + Delta. Hat gereicht und war genau genug. Michael Nachtrag: Der Zugriff lief damals über so ne freie IO.DLL unter W2k und XP. Ich hatte mit nem Oszi mal gemessen und kam auf bis zu 0.5µ runter. Ich hatte auch einen Testmode über den man einen zusätzlichen Kompensationswert mit Hilfe eines Oszis ermitteln und konfigurieren konnte. Das ganze war natürlich machinen- und lastabhängig. Aber wer flasht schon unter Last? ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz