Forum: PC-Programmierung Portzugriff -> LPT -> I2C


von Ja mann (Gast)


Lesenswert?

Moin,

gleich vorweg: Die Frage lautet nicht: "Wie kann ich unter Windows auf 
die parallele Schnittstelle zugreifen", das wurde ja schon mehr als 
genug behandelt.
Ich habe an der parallelen Schnittstelle den "Standard I2C Adaptor" 
hängen, der auch soweit funktioniert. Daran habe ich eine SmartBattery 
gehängt. Mit dem Programm "ACCPlus" klappt der Zugriff zuverlässig und 
wunderbar.

Nun habe ich mir selber ein Programm geschrieben (Delphi), welches 
mittels giveio auf die Schnittstelle zugreift. Dabei treten sehr oft 
Zugriffsprobleme auf, was vermutlich am Timing liegt, da der SMBus eine 
Datenrate zwischen 10 kHz und 100 kHz vorschreibt. Weiß jemand wie man 
das Timing in einer Windowsapplikation halbwegs vernünftig hinbekommt ? 
Das Timing in meiner Version schwankt sehr stark, was wohl damit 
zusammenhängt was das Betriebssystem gerade sonst noch so machen möchte. 
Die Jungs die die oben genannte Software geschrieben haben, haben es 
aber wohl auch irgendwie hinbekommen, nur wie ?

Gruß
Ja mann

von *.* (Gast)


Lesenswert?

Es hilft, mit hoher Priorität zu laufen, wobei es immer nur kurz 
erforderlich sein sollte. Paar Millisekunden abfragen, dann eine Sekunde 
Pause machen, wieder abfragen...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Man kann die Granularität des Windowsschedulers von den standardmäßigen 
10 msec auf 1 msec reduzieren, damit bestehtn die Chancen, daß Dein 
Programm ein etwas besseres Timingverhalten aufweist.
Das geht erstaunlicherweise ohne irgendwelche Devicetreiber oder 
Kernelmode-Applikationen, sondern kann von praktisch jedem 
Usermode-Programm durchgeführt werden.
Dazu sind die Win32-API-Funktionen timeBeginPeriod und timeEndPeriod 
vorgesehen. Beide erwarten als Argument die Timergranularität in ganzen 
msec.

Zu Anfang timeBeginPeriod(1); aufrufen, beim Beenden des Programmes 
timeEndPeriod(1); aufrufen.

Fertig!

http://msdn.microsoft.com/en-us/library/ms713413(VS.85).aspx

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.