Performancefrage: 72 bit In und 24 bit Out über I2C

Dies ist das deutsche Forum für alle Themen um den IO-Warrior. Beiträge bitte nur in Deutsch.

Moderator: Guido Körber

Post Reply
cnause
Posts: 3
Joined: Tue Jun 28, 2005 10:06 pm

Performancefrage: 72 bit In und 24 bit Out über I2C

Post by cnause »

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
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

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.
cnause
Posts: 3
Joined: Tue Jun 28, 2005 10:06 pm

Post by cnause »

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
Robert Marquardt
Posts: 543
Joined: Mon Dec 01, 2003 6:09 pm

Post by Robert Marquardt »

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.
cnause
Posts: 3
Joined: Tue Jun 28, 2005 10:06 pm

Post by cnause »

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
Danny243
Posts: 9
Joined: Fri Feb 25, 2005 1:03 pm

Post by Danny243 »

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.
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.
guidooffer
Posts: 35
Joined: Wed Feb 23, 2005 8:15 pm
Location: Berlin

Post by guidooffer »

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.
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?
Guido Körber
Site Admin
Posts: 2876
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Post by Guido Körber »

Grundsätzlich ist das Problem die Beschränkung des USB auf einen Transfer alle 8msec vom IOW zum Rechner. Bei IIC Befehlen bekommt man vom IOW immer eine Quittung, muss also auch in Schreibrichtung diese Geschwindigkeit einhalten.
Post Reply