MCP3421 an IOW40-56

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
Thoene
Posts: 33
Joined: Sat Aug 29, 2009 8:13 pm

MCP3421 an IOW40-56

Post by Thoene »

Habe mir den 18 Bit-Wandler zugelegt. MCP3421 18-Bit AD mit I2C hier mit SOT-23-6 auf DIL Adapter
Ehe ich jetzt lange rumprobiere, wer hat damit schon gearbeitet und würde mir helfen?
Was muss ich in Data(0),Data(1),Data(2),Data(3) usw. schreiben ?
Ich will 18 Bit Auflösung mit Gain von 1 und 400Khz takt

Zb.
IOW I2C aktivieren
IOW Write

Setup MCP3421
Data(0), (1),.... Werte?
IOW Write

Do

Schreiben Configuration (Auflösung und Gain usw.)
Data(0), (1),.... Werte?
IOW Write

Lesen Daten
Daten(0), (1),....
IOW Read

Werte auswerten

Loop

IOW I2C deaktivieren
IOW Write

Danke im vorraus.
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: MCP3421 an IOW40-56

Post by friend-of-rq »

Hallo Thoene,
MCP3421 an IOW40-56
IOW40 und IOW56 unterscheiden sich schon ein wenig in der Ansteuerung ...
an welchen IOW genau willst Du denn den MCP3421 betreiben ...

läuft denn deine Schaltung schon (getestet) ... Du kann mit dem Tool ALL-in-ONE problemlos dem MCP3421 testen.

Gruss Ralf
Thoene
Posts: 33
Joined: Sat Aug 29, 2009 8:13 pm

Re: MCP3421 an IOW40-56

Post by Thoene »

Ich habe beide IOWs. Bei 3 Sampels würde ja der IOW40 reichen.
Habe mit dem Programm "ALL-in-ONE" und dem IOW56 schon mal probiert und der Chip wurde erkannt.
Der Unterschied zwichen den beiden IOWs ist mir schon klar (Lesen IOW40 = 8 Byte) und (IOW56 = 64 Byte)
Ich habe damit Probleme die Datenblätter zu lesen. Wertigkeit der einzelnen Bit von rechts nach links 1,2,4,...
oder anders rum.
Das ist meine erste Aktion mit I2C. Bei der Programmierung der IO-Leitungen gibt es keine Probleme bei beiden Schips.
Einfach ein Beispiel zum ausprobieren.
Byte0 (wert)
Byte1 (wert)
....
Habe im Moment ein Programm mit ICL7135 Auflösung +/- 20000 und schaufle das über die I-O Ports rein. Das funktioniert
ganz gut, aber der Aufwand der Platine und die größe des benötigten Gehäuse ist das Problem.
Mit dem 3421 und vorgeschalteten Instrumenten Verstärker (AD520) bekomme ich das bequem in die Hosentasche.
Brauche auch kein Netzteil. Die -5V für den AD520 kann ich mit dem ICL7660 erzeugen.
Habe dann die anderen E/A zum Steuern.
Daher das interesse an dem Schip.
Wenn man ein kurzes funktionierendes Programm hat versteht man die Dokumentation auch besser und es bereitet
die Programmänderung für andere Auflösung und Verstärkung kein Problem.
Gruß Thöne und Danke für die Antwort!!!!
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: MCP3421 an IOW40-56

Post by friend-of-rq »

@Thoene
Wenn man ein kurzes funktionierendes Programm hat versteht man die Dokumentation auch besser und es bereitet
die Programmänderung für andere Auflösung und Verstärkung kein Problem.
Mit einem fertigen Programm kann ich nicht weiterhelfen, da ich den von mir verwendeten MCP3421 über meinen IOW-Socket-Server anspreche ...

Mein Tipp: mit dem Test-Tool über die I2C-Funktion den MCP3421 ausprobieren und dann die aufgezeichneten Daten aus dem Data-Log für das eigene Programm auswerten und nutzen.
Bit von rechts nach links 1,2,4,... oder anders rum.
ausprobieren ...
Poti bzw. Spannungsteiler VCC/GND , Mittelanzapfung über einen (Schutz)Widerstand am Eingang des MCP3421 ...

Gruss Ralf
towaibw
Posts: 198
Joined: Sat Dec 27, 2003 10:55 pm
Location: Berlin / Germany
Contact:

Re: MCP3421 an IOW40-56

Post by towaibw »

Hi Thoene,

in welcher Programmiersprache brauchst du es denn? Wenn Java eine Option ist, hätte ich das was (Achtung! Reklame): IOWJ. Da gibt es I2C-Unterstützung, ob IOW40 oder IOW56 ist da völlig egal, weil die I2C-Kommunikation komplett "weggekapselt" ist. Bei IOWJ werden die I2C-Chips als Java-Klasse realisiert. Das bedeutet, das auf die Chip-Funktionen mit einfachen Methoden zugegriffen werden kann. Mit dem I2C-Bus kommt man da nicht mehr in Berührung.

Zur Zeit gibt es in IOWJ aber noch keine Klasse für den MCP3421. Aber die Chips sind schon bestellt (ich verfolge das Forum aufmerksam und versuche, Bedarfe schon im Vorfeld zu erkennen ;-), die Adapterplatinen vorhanden. Somit ist es nur eine Frage der Zeit (der Motivation, und ich muss das Datenblatt verstehen ;-) bis es diese Klasse geben wird. Sollte das klappen, kannst Du später auch nachschauen, wie ich es gemacht habe und es auf andere Programmiersprachen übertragen, denn IOWJ ist Open Source.

Gruß Thomas
Thoene
Posts: 33
Joined: Sat Aug 29, 2009 8:13 pm

Re: MCP3421 an IOW40-56

Post by Thoene »

Danke:
Benutze Power-Basic (Kirchbaum) Pure-Basic auch Ok, fast gleich.
Ich hatte am 09.10. Beispielprogramm "IOW24-56 mit Pure Basic und Power Basic" als Beitrag gebracht.
Ich brauche für den I2C Modus nur die einzelnen Bytes in der richtigen Reihenfolge für Init, Schreiben Konf. start
und lesen der Daten.
Beispiel in anderer Sprache auch Ok, besser als Datenblätter.
Gruß Thöne
friend-of-rq
Posts: 389
Joined: Sun Feb 13, 2005 1:22 pm
Location: Gerblingerode / Duderstadt
Contact:

Re: MCP3421 an IOW40-56

Post by friend-of-rq »

@ Thoene

siehe PN

Gruss Ralf
Thoene
Posts: 33
Joined: Sat Aug 29, 2009 8:13 pm

Re: MCP3421 an IOW40-56

Post by Thoene »

Danke für das Beispiel. Werde mir das mal in Ruhe reinziehen.
Wenn ich den Chip am laufen habe werde ich ein einfaches lauffähiges Programm ins Forum setzen.
Kann aber noch etwas dauern, da ich im Moment anderweitig beschäftigt bin.
Danke für die Unterstützung!!!!
Thoene
Posts: 33
Joined: Sat Aug 29, 2009 8:13 pm

Re: MCP3421 an IOW40-56

Post by Thoene »

Hallo habe den Wandler am laufen!!
Ist zwar nur als Einzelmessung, Dauermessung kann aber jeder selbst realisieren.
Ich habe im Moment keine Zeit, aber ich wollte für interessierte die Lösung der I2C Ansteuerung zwichen dem IOW56
und dem MCP3421 anbieten.
Der eigentliche Mess und Umrechnungscode zwichen 12-18 bit ist im Sub "Messen". Der Rest ist zum Aufbau des Dialog
von der benutzten Programmiersprache "Power-Basic"
Wer genauere Angaben möchte, kann mich unter der Mail: Helmut-Thoene@t-online.de erreichen.
Code:

#PBFORMS CREATED V2.01
'------------------------------------------------------------------------------
'Programm mit 18 bit A/D-Wandler (MCP3421) und IO-Warior 56
'Verstärkung 1, 2, 4, 8 kann angewählt werden.
'Voreinstellung ist Verstärkung = 1, Wandlung mit 18 bit und Einzelmessung.
'Wandlung mit 12, 14, 16, 18 bit kann angewählt werden.
'Soll nur als einfaches Programm zur Verständnis des I2C-Bus zwichen dem
'A/D-Wandler MCP3421 und dem IOW56 dienen.
'Programmiersprache ist Power-Basic für Windows Vers. 9.05 (WWW.Powerbasic.de)
'Die I2C Ansteuerung befindet sich in der SUB Messen.
'adresse = 208 ,config = 140 in dezimal voreingestellt.
'Button "STOP" keine Funktion
'Button "Start" für Einzelmessung. Mehrmals anklicken für richtige Werte.
'Messwert +/- 17 bit (+131071 bis -131072) bei Uin +/- 2,048 Vol
'Auflösung ca. 15µV
'Kontinuierliches Messen ist in Arbeit kann aber dauern.

'------------------------------------------------------------------------------

#COMPILE EXE
#DIM ALL

'------------------------------------------------------------------------------
' ** Includes **
'------------------------------------------------------------------------------
#PBFORMS BEGIN INCLUDES
#RESOURCE "Forum3421.pbr"
%USEMACROS = 1
#INCLUDE ONCE "WIN32API.INC"
#INCLUDE ONCE "COMMCTRL.INC"
#INCLUDE ONCE "PBForms.INC"
#PBFORMS END INCLUDES
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
' ** Constants **
'------------------------------------------------------------------------------
#PBFORMS BEGIN CONSTANTS
%IDD_DIALOG1 = 101
%IDC_BUTTON1 = 1001
%IDC_BUTTON2 = 1002
%IDC_BUTTON3 = 1003
%IDC_LABEL1 = 1004
%IDC_LABEL2 = 1005
%IDC_CHECKBOX1 = 1006
%IDC_CHECKBOX2 = 1007
%IDC_CHECKBOX3 = 1008
%IDC_CHECKBOX4 = 1009
%IDC_CHECKBOX5 = 1010
%IDC_CHECKBOX6 = 1011
%IDC_CHECKBOX7 = 1012
%IDC_CHECKBOX8 = 1013
%IDC_LABEL3 = 1014
%IDC_LABEL4 = 1015
%IDC_LABEL5 = 1016
%IDC_LABEL6 = 1017
%IDC_LABEL7 = 1018
%IDC_LABEL8 = 1019
%IDC_LABEL9 = 1020
%IDC_LABEL10 = 1021
%IDC_LABEL11 = 1022
%IDC_LABEL12 = 1023
%IDC_LABEL13 = 1024
#PBFORMS END CONSTANTS
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
' ** Declarations **
'------------------------------------------------------------------------------
DECLARE CALLBACK FUNCTION ShowDIALOG1Proc()
DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
DECLARE CALLBACK FUNCTION ShowDIALOG1Proc()
DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG

DECLARE FUNCTION GetLastError LIB "kernel32" ALIAS "GetLastError" () AS LONG
DECLARE FUNCTION IowKitOpenDevice LIB "iowkit.dll" ALIAS "IowKitOpenDevice"() AS LONG
DECLARE SUB IowKitCloseDevice LIB "iowkit.dll" ALIAS "IowKitCloseDevice" (BYVAL iowHandle AS LONG)
DECLARE FUNCTION IowKitWrite LIB "iowkit.dll" ALIAS "IowKitWrite" (BYVAL iowHandle AS LONG, _
BYVAL numPipe AS LONG, BYREF buffer AS BYTE, BYVAL length AS LONG) AS LONG
DECLARE FUNCTION IowKitRead LIB "iowkit.dll" ALIAS "IowKitRead" (BYVAL iowHandle AS LONG, _
BYVAL numPipe AS LONG, BYREF buffer AS BYTE, BYVAL length AS LONG) AS LONG
DECLARE FUNCTION IowKitReadNonBlocking LIB "iowkit.dll" ALIAS "IowKitReadNonBlocking" (BYVAL iowHandle AS LONG, _
BYVAL numPipe AS LONG, BYREF buffer AS BYTE, BYVAL length AS LONG) AS LONG
DECLARE FUNCTION IowKitReadImmediate LIB "iowkit.dll" ALIAS "IowKitReadImmediate" _
(BYVAL iowHandle AS LONG, BYREF Value AS LONG) AS LONG
' Get number of IOW devices
DECLARE FUNCTION IowKitGetNumDevs LIB "iowkit.dll" ALIAS "IowKitGetNumDevs" () AS LONG
DECLARE FUNCTION IowKitGetDeviceHandle LIB "iowkit.dll" ALIAS "IowKitGetDeviceHandle" _
(BYVAL numDevice AS LONG) AS LONG
DECLARE FUNCTION IowKitSetLegacyOpenMode LIB "iowkit.dll" ALIAS "IowKitSetLegacyOpenMode" (BYVAL openMode AS LONG) AS LONG
DECLARE FUNCTION IowKitGetProductId LIB "iowkit.dll" ALIAS "IowKitGetProductId" (BYVAL iowHandle AS LONG) AS LONG
DECLARE FUNCTION IowKitGetRevision LIB "iowkit.dll" ALIAS "IowKitGetRevision" (BYVAL iowHandle AS LONG) AS LONG
DECLARE FUNCTION IowKitGetThreadHandle LIB "iowkit.dll" ALIAS "IowKitGetThreadHandle" (BYVAL iowHandle AS LONG) AS LONG
DECLARE FUNCTION IowKitGetSerialNumber LIB "iowkit.dll" ALIAS "IowKitGetSerialNumber" _
(BYVAL iowHandle AS LONG, BYREF serialNumber AS BYTE) AS LONG
DECLARE FUNCTION IowKitSetTimeout LIB "iowkit.dll" ALIAS "IowKitSetTimeout" _
(BYVAL iowHandle AS LONG, BYVAL TIMEOUT1 AS LONG) AS LONG
DECLARE FUNCTION IowKitSetWriteTimeout LIB "iowkit.dll" ALIAS "IowKitSetWriteTimeout" _
(BYVAL iowHandle AS LONG, BYVAL TIMEOUT1 AS LONG) AS LONG
DECLARE FUNCTION IowKitCancelIo LIB "iowkit.dll" ALIAS "IowKitCancelIo" _
(BYVAL iowHandle AS LONG, BYVAL numPipe AS LONG) AS LONG


#PBFORMS DECLARATIONS
'------------------------------------------------------------------------------
GLOBAL hTimer AS LONG
GLOBAL hdlg AS LONG
GLOBAL Res AS LONG 'Rückgabewert Funktion IOW - x
GLOBAL numIows AS LONG
GLOBAL Stp AS BYTE
GLOBAL adresse AS BYTE
GLOBAL config AS BYTE
GLOBAL Check1 AS LONG
GLOBAL Check2 AS LONG
GLOBAL Check3 AS LONG
GLOBAL Check4 AS LONG
GLOBAL Check5 AS LONG
GLOBAL Check6 AS LONG
GLOBAL Check7 AS LONG
GLOBAL Check8 AS LONG

'------------------------------------------------------------------------------
' ** Main Application Entry Point **
'------------------------------------------------------------------------------
FUNCTION PBMAIN()
DIM iowHandles(16) AS GLOBAL LONG
DIM S(18) AS GLOBAL BYTE
DIM Daten(64) AS GLOBAL BYTE
DIM Messwert(4) AS GLOBAL BYTE

PBFormsInitComCtls (%ICC_WIN95_CLASSES OR %ICC_DATE_CLASSES OR _
%ICC_INTERNET_CLASSES)

ShowDIALOG1 %HWND_DESKTOP
END FUNCTION
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
' ** CallBacks **
'------------------------------------------------------------------------------
CALLBACK FUNCTION ShowDIALOG1Proc()

SELECT CASE AS LONG CB.MSG
CASE %WM_INITDIALOG
' Initialization handler
adresse = 208 'Bei Programmstart Startwert
config = 140 'Bei Programmstart Startwert
CONTROL SET CHECK CB.HNDL, %idc_Checkbox1, BIT(config, 0)
CONTROL SET CHECK CB.HNDL, %idc_Checkbox2, BIT(config, 1)
CONTROL SET CHECK CB.HNDL, %idc_Checkbox3, BIT(config, 2)
CONTROL SET CHECK CB.HNDL, %idc_Checkbox4, BIT(config, 3)
CONTROL SET CHECK CB.HNDL, %idc_Checkbox5, BIT(config, 4)
CONTROL SET CHECK CB.HNDL, %idc_Checkbox6, BIT(config, 5)
CONTROL SET CHECK CB.HNDL, %idc_Checkbox7, BIT(config, 6)
CONTROL SET CHECK CB.HNDL, %idc_Checkbox8, BIT(config, 7)
CONTROL SET TEXT CB.HNDL, %idc_Label7, STR$(config)
CONTROL SET TEXT CB.HNDL, %idc_Label11, HEX$(config)

CASE %WM_NCACTIVATE
STATIC hWndSaveFocus AS DWORD
IF ISFALSE CB.WPARAM THEN
' Save control focus
hWndSaveFocus = GetFocus()
ELSEIF hWndSaveFocus THEN
' Restore control focus
SetFocus(hWndSaveFocus)
hWndSaveFocus = 0
END IF

CASE %WM_COMMAND
' Process control notifications
SELECT CASE AS LONG CB.CTL
CASE %IDC_BUTTON1
IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
Messen CB.HNDL
END IF

CASE %IDC_BUTTON2
IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
MSGBOX "%IDC_BUTTON2=" + FORMAT$(%IDC_BUTTON2), _
%MB_TASKMODAL
END IF

CASE %IDC_BUTTON3 ' Ende
IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
killTimer (CB.HNDL, hTimer)
stp = 1
hTimer = 0
IowKitCloseDevice (iowHandles(0))'IO-Warrior
DIALOG END CB.HNDL, 0
FUNCTION = 0
END IF
CASE %WM_CLOSE
killTimer (CB.HNDL, hTimer)
stp = 1
hTimer = 0
IowKitCloseDevice (iowHandles(0))'IO-Warrior
DIALOG END CB.HNDL, 0
FUNCTION = 0

CASE %WM_DESTROY
killTimer (CB.HNDL, hTimer)
stp = 1
hTimer = 0
IowKitCloseDevice (iowHandles(0))'IO-Warrior
DIALOG END CB.HNDL, 0
FUNCTION = 0


CASE %IDC_CHECKBOX1 'Verstärkung Bit 0 (Wert 001)
CONTROL GET CHECK CB.HNDL, %IDC_CHECKBOX1 TO Check1
IF Check1 = 1 THEN BIT SET Config, 0
IF Check1 = 0 THEN BIT RESET Config, 0
CONTROL SET TEXT CB.HNDL, %idc_Label7, STR$(config)
CONTROL SET TEXT CB.HNDL, %idc_Label11, HEX$(config)

CASE %IDC_CHECKBOX2 'Verstärkung Bit 1 (Wert 002)
CONTROL GET CHECK CB.HNDL, %IDC_CHECKBOX2 TO Check2
IF Check2 = 1 THEN BIT SET Config, 1
IF Check2 = 0 THEN BIT RESET Config, 1
CONTROL SET TEXT CB.HNDL, %idc_Label7, STR$(config)
CONTROL SET TEXT CB.HNDL, %idc_Label11, HEX$(config)

CASE %IDC_CHECKBOX3 'Auflösung Bit 0 (Wert 004)
CONTROL GET CHECK CB.HNDL, %IDC_CHECKBOX3 TO Check3
IF Check3 = 1 THEN BIT SET Config, 2
IF Check3 = 0 THEN BIT RESET Config, 2
CONTROL SET TEXT CB.HNDL, %idc_Label7, STR$(config)
CONTROL SET TEXT CB.HNDL, %idc_Label11, HEX$(config)

CASE %IDC_CHECKBOX4 'Auflösung Bit 1 (Wert 008)
CONTROL GET CHECK CB.HNDL, %IDC_CHECKBOX4 TO Check4
IF Check4 = 1 THEN BIT SET Config, 3
IF Check4 = 0 THEN BIT RESET Config, 3
CONTROL SET TEXT CB.HNDL, %idc_Label7, STR$(config)
CONTROL SET TEXT CB.HNDL, %idc_Label11, HEX$(config)

CASE %IDC_CHECKBOX5 'Einzel/Dauermessen(Wert 016)
CONTROL GET CHECK CB.HNDL, %IDC_CHECKBOX5 TO Check5
IF Check5 = 1 THEN BIT SET Config, 4
IF Check5 = 0 THEN BIT RESET Config, 4
CONTROL SET TEXT CB.HNDL, %idc_Label7, STR$(config)
CONTROL SET TEXT CB.HNDL, %idc_Label11, HEX$(config)

CASE %IDC_CHECKBOX6 'Adr. Unbenutzt (Wert 032)
CONTROL GET CHECK CB.HNDL, %IDC_CHECKBOX6 TO Check6
IF Check6 = 1 THEN BIT SET Config, 5
IF Check6 = 0 THEN BIT RESET Config, 5
CONTROL SET TEXT CB.HNDL, %idc_Label7, STR$(config)
CONTROL SET TEXT CB.HNDL, %idc_Label11, HEX$(config)

CASE %IDC_CHECKBOX7 'Adr. Unbenutzt (Wert 064)
CONTROL GET CHECK CB.HNDL, %IDC_CHECKBOX7 TO Check7
IF Check7 = 1 THEN BIT SET Config, 6
IF Check7 = 0 THEN BIT RESET Config, 6
CONTROL SET TEXT CB.HNDL, %idc_Label7, STR$(config)
CONTROL SET TEXT CB.HNDL, %idc_Label11, HEX$(config)

CASE %IDC_CHECKBOX8 'Start bei Einz. (Wert 128)
CONTROL GET CHECK CB.HNDL, %IDC_CHECKBOX8 TO Check8
IF Check8 = 1 THEN BIT SET Config, 7
IF Check8 = 0 THEN BIT RESET Config, 7
CONTROL SET TEXT CB.HNDL, %idc_Label7, STR$(config)
CONTROL SET TEXT CB.HNDL, %idc_Label11, HEX$(config)

END SELECT
END SELECT
END FUNCTION
'------------------------------------------------------------------------------

'------------------------------------------------------------------------------
' ** Dialogs **
'------------------------------------------------------------------------------
FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG
LOCAL lRslt AS LONG

#PBFORMS BEGIN DIALOG %IDD_DIALOG1->->
LOCAL hDlg AS DWORD
LOCAL hFont1 AS DWORD
LOCAL hFont2 AS DWORD
LOCAL hFont3 AS DWORD

DIALOG NEW hParent, "Dialog1", 70, 70, 611, 355, %WS_POPUP OR %WS_BORDER _
OR %WS_DLGFRAME OR %WS_SYSMENU OR %WS_MINIMIZEBOX OR %WS_MAXIMIZEBOX _
OR %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR %DS_3DLOOK _
OR %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_CONTROLPARENT OR _
%WS_EX_LEFT OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg
CONTROL ADD BUTTON, hDlg, %IDC_BUTTON1, "Start", 25, 25, 45, 15
CONTROL ADD BUTTON, hDlg, %IDC_BUTTON2, "Stop", 25, 45, 45, 15
CONTROL ADD BUTTON, hDlg, %IDC_BUTTON3, "Ende", 25, 315, 45, 15
CONTROL ADD LABEL, hDlg, %IDC_LABEL1, "", 20, 85, 70, 20, %WS_CHILD OR _
%WS_VISIBLE OR %SS_CENTER OR %SS_CENTERIMAGE, %WS_EX_LEFT OR _
%WS_EX_LTRREADING
CONTROL SET COLOR hDlg, %IDC_LABEL1, -1, RGB(251, 251, 251)
CONTROL ADD LABEL, hDlg, %IDC_LABEL2, "Messwert", 20, 75, 70, 10, _
%WS_CHILD OR %WS_VISIBLE OR %SS_CENTER OR %SS_CENTERIMAGE, _
%WS_EX_LEFT OR %WS_EX_LTRREADING
CONTROL SET COLOR hDlg, %IDC_LABEL2, -1, RGB(240, 240, 240)
CONTROL ADD CHECKBOX, hDlg, %IDC_CHECKBOX1, "Verstärkung Bit 0", 185, 50, _
110, 10
CONTROL ADD CHECKBOX, hDlg, %IDC_CHECKBOX2, "Verstärkung Bit 1", 185, 60, _
110, 10
CONTROL ADD CHECKBOX, hDlg, %IDC_CHECKBOX3, "Auflösung Bit 2", 185, 80, _
110, 10
CONTROL ADD CHECKBOX, hDlg, %IDC_CHECKBOX4, "Auflösung Bit 3", 185, 90, _
110, 10
CONTROL ADD CHECKBOX, hDlg, %IDC_CHECKBOX5, "Einz/Dauermes Bit 4", 185, _
110, 110, 10
CONTROL ADD CHECKBOX, hDlg, %IDC_CHECKBOX6, "Nicht benutzt Bit 5", 185, _
130, 110, 10
CONTROL ADD CHECKBOX, hDlg, %IDC_CHECKBOX7, "Nicht benutzt Bit 6", 185, _
140, 110, 10
CONTROL ADD CHECKBOX, hDlg, %IDC_CHECKBOX8, "Start Einzelmes Bit 7", 185, _
160, 110, 10
CONTROL ADD LABEL, hDlg, %IDC_LABEL3, "0= x1, 1= x2, 2= x4, 3= x8", _
305, 45, 185, 25, %WS_CHILD OR %WS_VISIBLE OR %SS_CENTER OR _
%SS_CENTERIMAGE, %WS_EX_LEFT OR %WS_EX_LTRREADING
CONTROL ADD LABEL, hDlg, %IDC_LABEL4, "0= 12, 1= 14, 2= 16, 3= 18 " + _
"Bit", 305, 75, 185, 25, %WS_CHILD OR %WS_VISIBLE OR %SS_CENTER OR _
%SS_CENTERIMAGE, %WS_EX_LEFT OR %WS_EX_LTRREADING
CONTROL ADD LABEL, hDlg, %IDC_LABEL5, "0= Einzel, 1= Dauer Messung", _
305, 110, 185, 15
CONTROL ADD LABEL, hDlg, %IDC_LABEL6, "Start Einzelm. 0=Wandlung ok", _
305, 160, 185, 15
CONTROL ADD LABEL, hDlg, %IDC_LABEL7, "", 185, 180, 35, 15, %WS_CHILD _
OR %WS_VISIBLE OR %SS_CENTER OR %SS_CENTERIMAGE, %WS_EX_LEFT OR _
%WS_EX_LTRREADING
CONTROL SET COLOR hDlg, %IDC_LABEL7, -1, RGB(233, 233, 233)
CONTROL ADD LABEL, hDlg, %IDC_LABEL8, "Config in Dez", 225, 180, 80, _
15
CONTROL ADD LABEL, hDlg, %IDC_LABEL9, "Configurationsbyte: " + _
"Verstärkung, Auflösung usw.", 185, 25, 305, 15, %WS_CHILD OR _
%WS_VISIBLE OR %SS_CENTER OR %SS_CENTERIMAGE, %WS_EX_LEFT OR _
%WS_EX_LTRREADING
CONTROL SET COLOR hDlg, %IDC_LABEL9, -1, %YELLOW
CONTROL ADD LABEL, hDlg, %IDC_LABEL10, "Config in Hex", 225, 200, 80, _
15
CONTROL ADD LABEL, hDlg, %IDC_LABEL11, "", 185, 200, 35, 15, %WS_CHILD _
OR %WS_VISIBLE OR %SS_CENTER OR %SS_CENTERIMAGE, %WS_EX_LEFT OR _
%WS_EX_LTRREADING
CONTROL SET COLOR hDlg, %IDC_LABEL11, -1, RGB(233, 233, 233)
CONTROL ADD LABEL, hDlg, %IDC_LABEL12, "", 20, 125, 70, 20, %WS_CHILD _
OR %WS_VISIBLE OR %SS_CENTER OR %SS_CENTERIMAGE, %WS_EX_LEFT OR _
%WS_EX_LTRREADING
CONTROL SET COLOR hDlg, %IDC_LABEL12, -1, RGB(251, 251, 251)
CONTROL ADD LABEL, hDlg, %IDC_LABEL13, "Volt", 20, 115, 70, 10, _
%WS_CHILD OR %WS_VISIBLE OR %SS_CENTER OR %SS_CENTERIMAGE, _
%WS_EX_LEFT OR %WS_EX_LTRREADING
CONTROL SET COLOR hDlg, %IDC_LABEL13, -1, RGB(240, 240, 240)

FONT NEW "MS Sans Serif", 12, 1, %ANSI_CHARSET TO hFont1
FONT NEW "MS Sans Serif", 14, 1, %ANSI_CHARSET TO hFont2
FONT NEW "MS Sans Serif", 10, 1, %ANSI_CHARSET TO hFont3

CONTROL SET FONT hDlg, %IDC_BUTTON1, hFont1
CONTROL SET FONT hDlg, %IDC_BUTTON2, hFont1
CONTROL SET FONT hDlg, %IDC_BUTTON3, hFont1
CONTROL SET FONT hDlg, %IDC_LABEL1, hFont2
CONTROL SET FONT hDlg, %IDC_LABEL2, hFont1
CONTROL SET FONT hDlg, %IDC_CHECKBOX1, hFont3
CONTROL SET FONT hDlg, %IDC_CHECKBOX2, hFont3
CONTROL SET FONT hDlg, %IDC_CHECKBOX3, hFont3
CONTROL SET FONT hDlg, %IDC_CHECKBOX4, hFont3
CONTROL SET FONT hDlg, %IDC_CHECKBOX5, hFont3
CONTROL SET FONT hDlg, %IDC_CHECKBOX6, hFont3
CONTROL SET FONT hDlg, %IDC_CHECKBOX7, hFont3
CONTROL SET FONT hDlg, %IDC_CHECKBOX8, hFont3
CONTROL SET FONT hDlg, %IDC_LABEL3, hFont1
CONTROL SET FONT hDlg, %IDC_LABEL4, hFont1
CONTROL SET FONT hDlg, %IDC_LABEL5, hFont1
CONTROL SET FONT hDlg, %IDC_LABEL6, hFont1
CONTROL SET FONT hDlg, %IDC_LABEL7, hFont1
CONTROL SET FONT hDlg, %IDC_LABEL8, hFont1
CONTROL SET FONT hDlg, %IDC_LABEL9, hFont1
CONTROL SET FONT hDlg, %IDC_LABEL10, hFont1
CONTROL SET FONT hDlg, %IDC_LABEL11, hFont1
CONTROL SET FONT hDlg, %IDC_LABEL12, hFont2
CONTROL SET FONT hDlg, %IDC_LABEL13, hFont1
#PBFORMS END DIALOG

DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt

#PBFORMS BEGIN CLEANUP %IDD_DIALOG1
FONT END hFont1
FONT END hFont2
FONT END hFont3
#PBFORMS END CLEANUP

FUNCTION = lRslt
END FUNCTION
'------------------------------------------------------------------------------
SUB Messen (BYVAL hdlg AS LONG)
LOCAL msg AS tagmsg
LOCAL Res AS LONG
LOCAL Wert, Wert0, Wert1, Wert2 AS LONG

'-------------------------- IOW öffnen ---------------------------------------------------------
iowHandles(0) = IowKitOpenDevice() 'IO-Warrior öffnen
IF iowHandles(0) = 0 THEN 'Fehler
MSGBOX "Can not open device!", 0, "Error"
END IF
'-------------------------- IOW56 I2C-Modus anwählen ------------------------------------------
Daten(0) = 1 'I2C anwählen
Daten(1) = 1 'I2C aktivieren
Daten(2) = 1 'I2C Takt 400 KHz
Daten(3)=0:Daten(4)=0:Daten(5)=0:Daten(6)=0:Daten(7)=0:Daten(8)=0
Res = IowKitWrite(iowHandles(0), 1, Daten(0), 64)'
' ------------------------------------ Mess Start ----------------------------------------------
Daten(0) = 2 '0000 0010 2 ReportID IIC write request
Daten(1) = 194 '1100 0010 C2 2 bytes with IIC Start and Stop
Daten(2) = adresse '1101 0000 D0 Adress byte Schreiben voreingestellt
Daten(3) = config '1000 1100 8C Config byte voreingestellt
Res = IowKitWrite(iowHandles(0), 1, Daten(0), 64)'Nach IOW schreiben
Res = IowKitRead(iowHandles(0), 1, Daten(0), 64)
' ------------------------------------- Daten Lesen --------------------------------------------
Daten(0) = 3 '0000 0010 2 ReportID IIC write request
Daten(1) = 196 '1100 0100 C4 4 bytes with IIC Start and Stop
Daten(2) = adresse+1 '1101 0001 D1 Adress byte Lesen
Daten(3) = config'1000 1100 8C Config byte voreingestellt: Gain=1, Wandlung=18Bit, Einzelmessung)
Res = IowKitWrite(iowHandles(0), 1, Daten(0), 64)'Nach IOW schreiben
Res = IowKitRead(iowHandles(0), 1, Daten(0), 64)

IF BIT (Config, 2) = 0 AND BIT (Config, 3) = 0 THEN'------ Auflösung 12 (+/- 11) Bit -----
IF BIT (Daten(2), 3) = 0 THEN 'Messwert Positiv
Wert = 0
Wert = Daten(2) AND 7 'Bit 3 Pol.
SHIFT LEFT Wert, 8
Wert = Wert OR Daten(3)
END IF
IF BIT (Daten(2), 3) = 1 THEN 'Messwert Negativ
Wert = 4294967288
Wert = Wert OR Daten(2) ' Mittleres Byte ins 1. Byte
SHIFT LEFT Wert, 8
Wert = Wert OR Daten(3) ' Unteres Byte ins 1. Byte
END IF
CONTROL SET TEXT hdlg, %idc_Label1, STR$(Wert)
CONTROL SET TEXT hdlg, %idc_Label12, STR$(Wert/1000, 5)
END IF

IF BIT (Config, 2) = 1 AND BIT (Config, 3) = 0 THEN'------ Auflösung 14 (+/- 13) Bit -----
IF BIT (Daten(2), 5) = 0 THEN 'Messwert Positiv
Wert = 0
Wert = Daten(2) AND 31 'Bit 5 Pol.
SHIFT LEFT Wert, 8
Wert = Wert OR Daten(3)
END IF
IF BIT (Daten(2), 5) = 1 THEN 'Messwert Negativ
Wert = 4294967264
Wert = Wert OR Daten(2) ' Mittleres Byte ins 1. Byte
SHIFT LEFT Wert, 8
Wert = Wert OR Daten(3) ' Unteres Byte ins 1. Byte
END IF
CONTROL SET TEXT hdlg, %idc_Label1, STR$(Wert)
Wert = Wert / 4
CONTROL SET TEXT hdlg, %idc_Label12, STR$(Wert/1000, 5)
END IF

IF BIT (Config, 2) = 0 AND BIT (Config, 3) = 1 THEN'------ Auflösung 16 (+/- 15) Bit -----
IF BIT (Daten(2), 7) = 0 THEN 'Messwert Positiv
Wert = 0
Wert = Daten(2) AND 127 'Bit 7 Pol.
SHIFT LEFT Wert, 8
Wert = Wert OR Daten(3)
END IF
IF BIT (Daten(2), 7) = 1 THEN 'Messwert Negativ
Wert = 4294967040
Wert = Wert OR Daten(2) ' Mittleres Byte ins 1. Byte
SHIFT LEFT Wert, 8
Wert = Wert OR Daten(3) ' Unteres Byte ins 1. Byte
END IF
CONTROL SET TEXT hdlg, %idc_Label1, STR$(Wert)
Wert = Wert / 16
CONTROL SET TEXT hdlg, %idc_Label12, STR$(Wert/1000, 5)
END IF

IF BIT (Config, 2) = 1 AND BIT (Config, 3) = 1 THEN'------ Auflösung 18 (+/- 17) Bit -----
IF BIT (Daten(2), 1) = 0 THEN 'Messwert Positiv
Wert = 0
Wert = Daten(2) AND 1
SHIFT LEFT Wert, 8
Wert = Wert OR Daten(3)
SHIFT LEFT Wert, 8
Wert = Wert OR Daten(4)
END IF
IF BIT (Daten(2), 1) = 1 THEN 'Messwert Negativ
Wert = 4294967040
Wert = Wert OR Daten(3) ' Mittleres Byte ins 1. Byte
SHIFT LEFT Wert, 8
Wert = Wert OR Daten(4) ' Unteres Byte ins 1. Byte
IF BIT (Daten(2), 0) = 0 THEN BIT RESET Wert, 16
END IF
CONTROL SET TEXT hdlg, %idc_Label1, STR$(Wert)
Wert = Wert / 64
CONTROL SET TEXT hdlg, %idc_Label12, STR$(Wert/1000, 5)
END IF

'------------------------------------ IOW I2C-Modus abwählen -----------------------------------
Daten(0) = 1
Daten(1) = 0
Res = IowKitWrite(iowHandles(0), 1, Daten(0), 64) 'Nach IOW schreiben
IowKitCloseDevice (iowHandles(0)) 'IO-Warrior schließen

END SUB
Post Reply