mikrocontroller.net

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


Autor: Ja mann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: *.* (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.