AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Pausen im µs Bereich

Ein Thema von nEmai · begonnen am 28. Mai 2009 · letzter Beitrag vom 28. Mai 2009
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Pausen im µs Bereich

  Alt 28. Mai 2009, 19:53
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?
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
nEmai

Registriert seit: 9. Feb 2008
29 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Pausen im µs Bereich

  Alt 28. Mai 2009, 19:53
Zitat von Klaus01:
.. und wenn Du das sleep ganz herausnimmst, LPT ist ja auch nicht das schnellste?
Oder kannst Du die Verzögerung nicht auf dem PIC bewerkstelligen?

Grüße
Klaus
Leider nein, es handelt sich hier um die Strobe Leitung, die sagt dem PIC erst, dass was passieren soll, beziehungsweise sie hängt an einem seiner Interrupteingänge. Das Signal muss ne gewisse Zeit gehalten werden, ich weiß nicht wie lang. Deshalb will ich mit dem Delay etwas experimentieren.

Delphi-Quellcode:
procedure EnableStrobe();
begin
  SetPortBit($378, 4);
  Sleep(1);
  ClrPortBit($378, 4);
end;
Das Sleep(1) ist der Knackpunkt.. so ein Sleep(0,2) wäre mir lieb z.B.

Mfg.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#13

Re: Pausen im µs Bereich

  Alt 28. Mai 2009, 19:55
Ich weis nicht obs wegoptimiert wird, aber du kannst ja mal ein
Delphi-Quellcode:
for i := 0 to 10000 do
asm
  NOP;
end;
probieren
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#14

Re: Pausen im µs Bereich

  Alt 28. Mai 2009, 19:58
Du solltest besser den Pause-Befehl nehmen - der ist für solche Anwendungen gedacht.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
nEmai

Registriert seit: 9. Feb 2008
29 Beiträge
 
Delphi 2007 Professional
 
#15

Re: Pausen im µs Bereich

  Alt 28. Mai 2009, 19:59
Zitat von jfheins:
Ich weis nicht obs wegoptimiert wird, aber du kannst ja mal ein
Delphi-Quellcode:
for i := 0 to 10000 do
asm
  NOP;
end;
probieren
Genial das funktioniert! Sag mir mal einer dass es NOP auch im x86 Assembler gibt.
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.151 Beiträge
 
Delphi 12 Athens
 
#16

Re: Pausen im µs Bereich

  Alt 28. Mai 2009, 20:12
PS: Sleep(1) ist bei aktuellen Betriebssystemen 0 bis 16 ms lang, also durchschnittlich 8ms

ich mach es meistens so:
for i := 0 to 10000 do if i = 0 then ; und wenn dich die Dauer interessiert ... einfach mal messen
Delphi-Quellcode:
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;
oder
Delphi-Quellcode:
QueryPerformanceFrequency(Freq);
QueryPerformanceCounter(Start);
  for i := 1 to 10000 * Durchlaeufe do if i = 0 then ;
QueryPerformanceCounter(Stopp);
Dauer := (Stopp - Start) / Freq / Durchlaeufe;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von mischerr
mischerr

Registriert seit: 6. Feb 2004
Ort: Konz
243 Beiträge
 
Delphi 12 Athens
 
#17

Re: Pausen im µs Bereich

  Alt 28. Mai 2009, 21:44
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?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:57 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