IOW56 mit MAX127

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
ttillack
Posts: 5
Joined: Fri Sep 25, 2009 8:19 am

IOW56 mit MAX127

Post by ttillack »

Hallo zusammen,

war bisher nur stiller Mitleser und habe auch schon einige Probleme dank eurer Threads selbst lösen können.

Jetzt habe ich aber ein (hoffentlich kleines) Problem mit dem IOW56SK und dem MAX127.

Angeschlossen über I2C und verschaltet wie auf dem MAX-Datenblatt beschrieben.
IOW und MAX finden sich auch (über All-In-One getestet).
Jetzt wollte ich den MAX mittels des VB.net-Samples testen und habe es für den 56er "erweitert".
Erweiterung sah folgendermaßen aus:

Code: Select all

'Für Form_Open und _Closed, sowie Timer_Tick
If IOWarrior <> 0 And (Pid = IOWKIT_PID_IOW40 Or Pid = IOWKIT_PID_IOW56 Or Pid = IOWKIT_PID_IOW24) Then
<..>
'Für Timer_Tick
Ret = IowKitReadNonBlocking(IOWarrior, IOW_PIPE_SPECIAL_MODE, Report(0), 8)
Allerdings ist entweder die Beschaltung der Analog-Eingänge falsch (unwahrscheinlich), oder die Erweiterung war nicht so einfach, wie oben beschrieben, denn:
Alle Kanäle zeigen mir eine anliegende Spannung von ca. 6,3V.
Da dieser Wert größer V(USB), fällt die falsche Verkabelung IMHO erstmal aus.

Also meine Frage:
Was habe ich übersehen?

Bin für jeden Tipp dankbar.
---
Thorsten
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: IOW56 mit MAX127

Post by Guido Körber »

8 Byte vom zweiten Interface des IOW56 zu lesen ist auf keinen Fall möglich, die Reports sind da 63 Bytes plus ReportID.
ttillack
Posts: 5
Joined: Fri Sep 25, 2009 8:19 am

Re: IOW56 mit MAX127

Post by ttillack »

Guido Körber wrote:8 Byte vom zweiten Interface des IOW56 zu lesen ist auf keinen Fall möglich, die Reports sind da 63 Bytes plus ReportID.
Soll heißen, dass ich die Zeilen

Code: Select all

Report(3) = &H8CS Or (I * 16)
Ret = IowKitWrite(IOWarrior, IOW_PIPE_SPECIAL_MODE, Report(0), 8)
' read answer containing voltage value
Ret = IowKitReadNonBlocking(IOWarrior, IOW_PIPE_SPECIAL_MODE, Report(0), 8)
auf

Code: Select all

Report(3) = &H8CS Or (I * 16)
Ret = IowKitWrite(IOWarrior, IOW_PIPE_SPECIAL_MODE, Report(0), 8)
' read answer containing voltage value
Ret = IowKitReadNonBlocking(IOWarrior, IOW_PIPE_SPECIAL_MODE, Report(0), 63)
ändern muss?

Und wie sieht dann die Umrechnung aus?

Code: Select all

 
' extract bytes of value
N = Report(2) And &HFFS
N = N * 256
N = N Or Report(3)
' value is upper 12 bits of 16 bits
N = N / 16
' value is 12 bit signed!
' We need to add the upper twos complement sign bits for the Integer.
' This is a sign extension from 12 bit to 32 bit.
If (N And &H800S) <> 0 Then
   N = N Or &HFFFFF000
End If
Stehe ein bissel auf dem Schlauch. Finde für den IOW56 in der API-Doku kaum Infos. (Ver. 1.5 Stand Dez. 2005)

Gruß
Thorsten
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: IOW56 mit MAX127

Post by Guido Körber »

An der Umrechnung ändert sich nichts, da sind ja nur mehr unbenutzte Bytes im Report als bei IOW24/40.

Die SDK geht nicht weiter auf den IOW56 ein, weil die Unterschiede sich im Wesentlichen in der Größe der Reports erschöpfen und ggf. in den einzelnen Flags, die sind aber nicht im SDK, sondern im Datenblatt zum Chip dokumentiert.
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: IOW56 mit MAX127

Post by friend-of-rq »

Hallo ttillack,

Code: Select all

Report(3) = &H8CS Or (I * 16)
Ret = IowKitWrite(IOWarrior, IOW_PIPE_SPECIAL_MODE, Report(0), 64)
' read answer containing voltage value
Ret = IowKitReadNonBlocking(IOWarrior, IOW_PIPE_SPECIAL_MODE, Report(0), 64)
sollte für ein IOW56 passen ...

Du solltest auch (RET) abfragen !! da sollte bei einer fehlerfreien Übertragung auch die Anzahl der Übertragenen Bytes stehen :
IOW 24 Pipe-0 (3) Byte
IOW 40 Pipe-0 (5) Byte
IOW 56 Pipe-0 (8) Byte

IOW 24/40 Pipe-1 (8) Byte
IOW 56 Pipe-1 (64) Byte

steht dort nicht die entsprechende Zahl ist die Übertragung fehlerhaft !!

Des weiteren musst Du beim verwenden vom IowKitReadNonBlocking() darauf achten,
dass das Report-ID (Report(0)) die richtige ID hat. Steht dort der Wert 0 ist der Report leer.
Bei schnellen Rechnern/Programmen kann es sein, das Du den Buffer mehrfach abfragen musst
bevor ein gültiger Datensatz kommt (Report-ID<>0)

Gruss Ralf
ttillack
Posts: 5
Joined: Fri Sep 25, 2009 8:19 am

Re: IOW56 mit MAX127

Post by ttillack »

Hallo Ralf, hallo Guido,

Danke für die Hilfe. Allerdings ändert sich an der Ausgabe nichts...
Hier noch mal der komplette Code, den ich zum Auslesen der IIC benutze:

Code: Select all

Report(0) = &H2S ' ReportID IIC write request
Report(1) = &H80S ' 2 bytes with IIC Start and Stop
Report(2) = &H50S ' MAXIM127 address byte = ADR 0, write
' MAXIM127 control byte
' START, I = Channel index, +/-10 V = RNG 1 and BIP 1, normal operation
Report(3) = &H8CS Or (I * 16)
Ret = IowKitWrite(IOWarrior, IOW_PIPE_SPECIAL_MODE, Report(0), 64)
' swallow ACK report
Ret = IowKitReadNonBlocking(IOWarrior, IOW_PIPE_SPECIAL_MODE, Report(0), 64)

Report(0) = &H3S ' ReportID IIC write request
Report(1) = &H2S ' 2 bytes with IIC Start and Stop
Report(2) = &H51S ' MAXIM127 address byte = ADR 0, read
' MAXIM127 control byte
' START, I = Channel index, +/-10 V = RNG 1 and BIP 1, normal operation
Report(3) = &H8CS Or (I * 16)
Ret = IowKitWrite(IOWarrior, IOW_PIPE_SPECIAL_MODE, Report(0), 64)
' read answer containing voltage value
Ret = IowKitReadNonBlocking(IOWarrior, IOW_PIPE_SPECIAL_MODE, Report(0), 64)
'Umrechnung und Ausgabe
Ret liefert bei mir 0. Ausgegeben werden immer noch 6,38 - 6,43V.
Achso: ich teste mit einer 3V-Knopfzelle (+-Pol an AnalogIO).

Hab auch noch mal die Verkabelung geprüft. Kann hier nichts verdächtiges finden.
Besorge mir noch mal ein Multimeter und schaue mal, ob nicht doch irgendwo ein Kriechstrom herkommt(auch wenn USB nur 5V liefert...).

Grüße
Thorsten
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: IOW56 mit MAX127

Post by Guido Körber »

Na dann hört sich das doch plausibel an, der MAX127 hat ja diverse verschiedene Messbereiche, möglicherweise ist die Skalierung der Werte falsch.
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: IOW56 mit MAX127

Post by friend-of-rq »

Code: Select all

Report(1) = &H80S ' 2 bytes with IIC Start and Stop
Also da stimmt schon was nicht ...
Start = 128 = 1000 0000
Stop = 64 = 0100 0000

2Bytes = 2 = 0000 0010
--------------------------------
Summe = 194 = 1100 0010 = (C2) Hex
Ret liefert bei mir 0.
sollte aber die Anzahl der Übertragenen Bytes beinhalten !? wenn alles richtig ist ...

was steht denn im Report-ID (Byte(0)) nach dem einlesen ? ... sollte (03) sein

mfg R.Greinert
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: IOW56 mit MAX127

Post by friend-of-rq »

Hallo ttillack,

hast Du mit dem Tool All-in-One nur geschaut ob der Max erkannt wird oder
hast Du auch die entsprechenden Sequenzen zum steuern des Max gesendet
bzw. eingelesen ?

Solltest Du vielleicht erstmal probieren um mit den MAX umgehen zu können ...

Im Data-Monitor kannst Du die entsprechenden Bytes die gesendet und empfangen werden
dann betrachten und auf Dein Programm umsetzen ...

Gruss
Ralf
ttillack
Posts: 5
Joined: Fri Sep 25, 2009 8:19 am

Re: IOW56 mit MAX127

Post by ttillack »

Also...
Erstmal Danke für die vielen Tipps bisher.
Guido Körber wrote:Na dann hört sich das doch plausibel an, der MAX127 hat ja diverse verschiedene Messbereiche, möglicherweise ist die Skalierung der Werte falsch.
Habe mich wahrscheinlich falsch ausgedrückt. Ich bekomme die 6,3-6,4V angezeigt, wenn keine "Datenquelle" anliegt!
Entspricht ungefähr "Full Scale" in der MAX-Spek.
Sonst wäre es ja "nur" ein vergessener Bit-Shift.
friend-of-rq wrote:

Code: Select all

Report(1) = &H80S ' 2 bytes with IIC Start and Stop
Summe = 194 = 1100 0010 = (C2) Hex
Habe ich auch schon gedacht. Ist aber in den anderen Beispiel auch so enthalten.
friend-of-rq wrote:
Ret liefert bei mir 0.
sollte aber die Anzahl der Übertragenen Bytes beinhalten !? wenn alles richtig ist ...
was steht denn im Report-ID (Byte(0)) nach dem einlesen ? ... sollte (03) sein
Report-ID = 03. Byte(2) liefert übrigens konstant 81 auf allen Kanälen.
friend-of-rq wrote: hast Du mit dem Tool All-in-One nur geschaut ob der Max erkannt wird oder
hast Du auch die entsprechenden Sequenzen zum steuern des Max gesendet
bzw. eingelesen ?
Hatte ich schon gemacht, aber anscheinend noch nicht genug... ;)

Habe jetzt das Multimeter und schaue mir noch mal die Verkabelung an... Vllt. habe ich da irgendetwas übersehen.
Und anschließend noch etwas mit All-In-One testen.

Gruß
Thorsten
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: IOW56 mit MAX127

Post by Guido Körber »

ttillack wrote:
friend-of-rq wrote:

Code: Select all

Report(1) = &H80S ' 2 bytes with IIC Start and Stop
Summe = 194 = 1100 0010 = (C2) Hex
Habe ich auch schon gedacht. Ist aber in den anderen Beispiel auch so enthalten.
$80 kann nicht funktionieren, da werden dann Null Bytes auf den IIC gesendet.
ttillack
Posts: 5
Joined: Fri Sep 25, 2009 8:19 am

Re: IOW56 mit MAX127

Post by ttillack »

Guido Körber wrote:
ttillack wrote:
friend-of-rq wrote:

Code: Select all

Report(1) = &H80S ' 2 bytes with IIC Start and Stop
Summe = 194 = 1100 0010 = (C2) Hex
$80 kann nicht funktionieren, da werden dann Null Bytes auf den IIC gesendet.
Sorry... Meinte &H02S.
Guido Körber
Site Admin
Posts: 2879
Joined: Tue Nov 25, 2003 10:25 pm
Location: Germany/Berlin
Contact:

Re: IOW56 mit MAX127

Post by Guido Körber »

Das geht dann auch nicht, dann werden zwar zwei Bytes gesendet, aber ohne Start & Stop, also wird jeder IIC Slave das ignorieren.
Post Reply