Hallo Forum,
in einem Projekt sollen an einem IOW24 mit zwölf Chips vom Typ PCF8574 am I2C-Bus zyklisch 9 Bytes eingelesen und 3 Bytes ausgegeben werden. Optimal wären etwa 2 - 4 Zyklen pro Sekunde. Daraus ergibt sich, dass pro PCF8574 ca. 40 bzw. 20 ms Lese- bzw. Schreibzeit zur Verfügung steht. Ist das mit dem Warrior machbar? Wie sehr wird ein 1 GHz-PC mit Windows XP dabei gestreßt, d.h. wie performant ist der IOW-Treiber?
Ich freue mich auf Tips und Erfahrungen, besten Dank!
Christian
Performancefrage: 72 bit In und 24 bit Out über I2C
Moderator: Guido Körber
-
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
Das sollte reichen. Ich lese alle 8 Kanaele eines MAX127 alle 200 msec aus.
Die Datenmenge ist nicht das Problem. Es ist die USB-Polling-Zeit des IO-Warrior. Die Performance der DLL ist ohne Belang. Pro Leseauftrag gehen 8 msec drauf.
Ich werde naher nochmal nach der Prozessorlast schauen, aber die duerfte gering sein. Bei schnellen Fensterbewegungen kann man eine gewisse Ruckligkeit sehen, aber das ist die schwachsinnige Implementation von Windows, die dort gerne mal 100% Prozessorlast ausloest.
Wie erwartet: Die Prozessorlast ist kaum zu sehen. Selten ueber 2 Prozent.
Wenn man die Implementierung mit Threads durchfuehrt, so sollte auch die Ruckligkeit zu beseitigen sein.
Die Datenmenge ist nicht das Problem. Es ist die USB-Polling-Zeit des IO-Warrior. Die Performance der DLL ist ohne Belang. Pro Leseauftrag gehen 8 msec drauf.
Ich werde naher nochmal nach der Prozessorlast schauen, aber die duerfte gering sein. Bei schnellen Fensterbewegungen kann man eine gewisse Ruckligkeit sehen, aber das ist die schwachsinnige Implementation von Windows, die dort gerne mal 100% Prozessorlast ausloest.
Wie erwartet: Die Prozessorlast ist kaum zu sehen. Selten ueber 2 Prozent.
Wenn man die Implementierung mit Threads durchfuehrt, so sollte auch die Ruckligkeit zu beseitigen sein.
Besten Dank, das hört sich ja erst mal recht positiv an. Wie genau muß ich mir das Pollen des IOW vorstellen? Pollt der IOW den USB-Bus oder pollt der Treiber bzw. die DLL den IOW?
Verstehe ich das richtig: Das Lesen oder Schreiben eines PCF8574 dauert 8 ms bzw. das Lesen und Schreiben aller geplanten zwölf PCF8574 dauert dann 12 * 8 ms = 96 ms? Muß ich noch eine "Erhol- oder Wartezeit" einplanen?
Gruß, Christian
Verstehe ich das richtig: Das Lesen oder Schreiben eines PCF8574 dauert 8 ms bzw. das Lesen und Schreiben aller geplanten zwölf PCF8574 dauert dann 12 * 8 ms = 96 ms? Muß ich noch eine "Erhol- oder Wartezeit" einplanen?
Gruß, Christian
-
- Posts: 543
- Joined: Mon Dec 01, 2003 6:09 pm
Das Polling ist eine Eigenschaft des USB. Es wird also in Hardware vom Hostcontroller durchgefuehrt.
Das Device meldet wie oft es gepollt werden moechte und der Hostcontroller schaut dann entsprechend oft beim Device vorbei ob es Daten hat.
Die Zeit bezieht sich also auf das Lesen eines Reports vom IO-Warrior. Das duerften dann 6 Byte Nutzdaten ueber den IIC sein.
Verlegt man dieses Lesen in einen Thread (das Schreiben ist unproblematisch) so wird die Benutzeroberflaeche nicht behindert.
Erholzeiten sind nicht noetig.
Mit ein bischen Programmoptimierung sollten also ca. 5 Zyklen pro Sekunde durchaus moeglich sein.
Am einfachsten ist eben ein Thread den man mit voller Kraft IO treiben laesst.
Es muessen uebrigens PCF8574A sein, da das Handbuch sagt das nur 8 PCF8574 am IIC haengen koennen, waehrend es 16 PCF8574A sein duerfen.
Das Device meldet wie oft es gepollt werden moechte und der Hostcontroller schaut dann entsprechend oft beim Device vorbei ob es Daten hat.
Die Zeit bezieht sich also auf das Lesen eines Reports vom IO-Warrior. Das duerften dann 6 Byte Nutzdaten ueber den IIC sein.
Verlegt man dieses Lesen in einen Thread (das Schreiben ist unproblematisch) so wird die Benutzeroberflaeche nicht behindert.
Erholzeiten sind nicht noetig.
Mit ein bischen Programmoptimierung sollten also ca. 5 Zyklen pro Sekunde durchaus moeglich sein.
Am einfachsten ist eben ein Thread den man mit voller Kraft IO treiben laesst.
Es muessen uebrigens PCF8574A sein, da das Handbuch sagt das nur 8 PCF8574 am IIC haengen koennen, waehrend es 16 PCF8574A sein duerfen.
OK, dann werde ich das mal testen, besten Dank. Zum Thema 8574 vs. 8574A: Die beiden Chips sind identisch und unterscheiden sich nur in den Adressbereichen. Jeder Chip deckt 8 Adressen ab. Das heißt für meine Anwendung, dass ich 8 Chips vom Typ PCF8574 und 4 Chips vom Typ PCF8574A einsetzen muss.
Christian
Christian
Es können je 8 Stück 8574 und 8574A sein. Die Chips sind ja baugleich und haben alle 3 Adressbits (also 8 Bausteine), nur die Basisadresse ist eine andere.Robert Marquardt wrote:Es muessen uebrigens PCF8574A sein, da das Handbuch sagt das nur 8 PCF8574 am IIC haengen koennen, waehrend es 16 PCF8574A sein duerfen.
-
- Posts: 35
- Joined: Wed Feb 23, 2005 8:15 pm
- Location: Berlin
Ist es möglich mehr als nur 200 msec herauszuholen, da der max127 ja wesentlich schnellere Datentransfer unterstützt? Bei mir ist auch leider die Grenze bei maximal 5 Werten pro Sekunde erreicht. Was eigendlich sehr wenig ist. Gibt es eventuell noch andere Möglichkeiten die Rate zu erhöhen? Zum Beispiel mit einer Zusatzhardware? Wenn ja, um welche handelt es sich dabei?Robert Marquardt wrote:Das sollte reichen. Ich lese alle 8 Kanaele eines MAX127 alle 200 msec aus.
Die Datenmenge ist nicht das Problem. Es ist die USB-Polling-Zeit des IO-Warrior.
-
- Site Admin
- Posts: 2876
- Joined: Tue Nov 25, 2003 10:25 pm
- Location: Germany/Berlin
- Contact: