Forum: Mikrocontroller und Digitale Elektronik MAX1238 I2C Probleme


von Volker K. (prefekt)


Lesenswert?

Hallo,

ich benötige einen ADC mit 12bit und I2C. Zuerst hatte ich den MAX127 
ins Auge gefaßt, aber der ist nirgends lieferbar (falls jemand eine 
Bezugsquelle kennt!)
Ich hab mich dann für den MAX1238 entschieden, 12 Kanäle und 12bit.

Allerdings habe ich das Problem, das ich immer nur einen Kanal auslesen 
kann, keine Ahnung welchen.
Hier ist der Code zum Auslesen in VB für den IOW24 von codemercs:
1
'IIC activate
2
Report(0) = &H1S
3
Report(1) = &H1S
4
Ret = IowKitWrite(iowHandles(iowHandel_ID), IOW_PIPE_SPECIAL_MODE, Report(0), 8)
5
6
For I = 0 To 3
7
                ' #### MAX1238 init ####
8
                Report(0) = &H2S ' ReportID IIC write request
9
                Report(1) = &HC3S ' 3 bytes with IIC Start and Stop
10
                Report(2) = &H6AS ' MAXIM1238 address byte = ADR 0, write
11
                ' MAXIM1238 setup byte
12
                Report(3) = &H82S ' SetupByte=1, ReferenceVoltage=000, Clock=0, BIP=0, RST=1, 0
13
                ' MAXIM1238 control byte
14
                Report(4) = &H1S Or (I * 2) ' ControlByte=0, scanning=0, channel=AN0, SGL=1
15
                Ret = IowKitWrite(iowHandles(iowHandel_ID), IOW_PIPE_SPECIAL_MODE, Report(0), 8)
16
                ' swallow ACK report
17
                Ret = IowKitRead(iowHandles(iowHandel_ID), IOW_PIPE_SPECIAL_MODE, Report(0), 8)
18
19
                ' #### MAX1238read ####
20
                Report(0) = &H3S ' ReportID IIC read request
21
                Report(1) = &H2S ' 1 bytes with IIC Start and Stop
22
                Report(2) = &H6BS ' MAXIM1238 address byte = ADR 0, read
23
                Report(3) = &H1S Or (I * 2) ' ControlByte=0, scanning=0, channel=AN0, SGL=1
24
                Ret = IowKitWrite(iowHandles(iowHandel_ID), IOW_PIPE_SPECIAL_MODE, Report(0), 8)
25
                ' read answer containing voltage value
26
                Ret = IowKitRead(iowHandles(iowHandel_ID), IOW_PIPE_SPECIAL_MODE, Report(0), 8)
27
28
                ' extract bytes of value
29
                N = Report(2) And &HAS
30
                N = N * 256
31
                N = N Or Report(3)
32
                N = N / 16
33
                ' value is 12 bit signed!
34
                Select Case I
35
                    Case 0 : lblCH1.Text = VB6.Format(N * 5.0# / 4096.0#, "0.0000")
36
                    Case 1 : lblCH2.Text = VB6.Format(N / 5000 * 4096.0#, "0000")
37
                    Case 2 : lblCH3.Text = VB6.Format(N / 5000 * 4096.0#, "0000")
38
                End Select
39
40
            Next
41
            'IIC deactivate
42
            Report(0) = &H1S
43
            Report(1) = &H0S

Die Aufbereitung des 12bit Wertes stimmt auch noch nicht.

Jemand eine Idee, warum das Teil nur einen Kanal ausspuckt oder hat 
jemand einen funktionierenden Beispielcode?

Gruß

von Martin J. (bluematrix) Benutzerseite


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.