LabVIEW Interface for Arduino Discussions

cancel
Showing results for 
Search instead for 
Did you mean: 

ADS1115 Labview Interface for Arduino

Hi,

I'm trying to configure a 16-bit ADC (ADS1115) using Labview Interface for Arduino and I2C communication. I have read the datasheet several times and I can't understand what is wrong.

Next figure shows the circuit. I have used the Arduino libraries from Adafruit and they worked properly. Both, single shot and differential read 26979 bits (5058,56 mV). So, the problem is not here, I think.

ADS1115 + Arduino.jpg

This ADC has a configurable gain (PGA). In the previous picture, in order to simplify all the connections, 5V are connected to A0 because in Arduino libraries, the default gain is 2/3 (range 6,144V). Next two examples the gain will be different (2x with range of 2,048V on the first one and 1x with range of 4,096V on the second one). Taking this into account, I have changed the input voltage of 5V to 1,6V for the first case and 3,3V for the second one. Once again, both of them worked perfectly using Arduino libraries, but not using Labview.

In datasheet, page 11, there is an example. These are the steps:
- Set the configuration register:
1st byte (Address + low R/W bit): 10010000 (144)
2nd byte (Pointer register): 00000001 (1)
3rd byte (Config. Reg. MSB): 10000100 (132)

4th byte (Config. Reg. LSB): 10000011 (131)


- Set the pointer register:
1st byte (Adress +low R/W bit): 10010000 (144)
2nd byte (Pointer Register to Conversion Reg.): 00000000 (0)

- Read the conversion register:

1st byte (Address + low R/W bit): 10010001 (145)

2nd byte (Conversion Reg. MSB response): read this byte

3rd byte (Conversion Reg. LSB response): read this byte

This is the .vi:

ADS1115 Example1.png

I should expect to make a continuous conversion and read the 1,6V, but I don't...

There is another example, quite similar. Here is the link: http://openlabtools.eng.cam.ac.uk/Resources/Datalog/RPi_ADS1115/
These are the steps:

- Set the configuration register:

1st byte (Address + low R/W bit): 10010000

2nd byte (Pointer register): 00000001 (1)
3rd byte (Config. Reg. MSB): 11000011 (195)

4th byte (Config. Reg. LSB): 00000011(3)

(The configuration is a little bit different. This is a single shot example)


- Read the configuration register:

1st byte (Address + low R/W bit): 10010001 (145)

2nd byte (Config. Reg. MSB response): read this byte

3rd byte (Config. Reg. LSB response): read this byte


(Read the config register, continuously loop this step until bit 15 of the config register is 1)

- Set the pointer register:

1st byte (Adress +low R/W bit): 10010000 (144)

2nd byte (Pointer Register to Conversion Reg.): 00000000 (0)


- Read the conversion register:

1st byte (Address + low R/W bit): 10010001 (145)

2nd byte (Conversion Reg. MSB response): read this byte

3rd byte (Conversion Reg. LSB response): read this byte

This is the .vi:

ADS1115 Example2.png

I should expect to make a single shot conversion and read the 3,3V, but I don't... Actually, it seems I'm reading the configuration register default values 10000101 10000011 (133 131).

I don't know where could be the problem. Any help will be appreciated.....!

Cheers,

Sergi

Message 1 of 32
(18,669 Views)

The mistake that you are making is that you are writing the device address twice.  Once as the address and second as a data byte.  The I2C device address is sent specially by the Arduino code so you should not include that as one of the data bytes.

Because of confusion like this, I tend to prefer trying to port the Arduino library for the device into LabVIEW if such a library exists (and isn't overly complicated).

You should also know that LIFA is old, outdated, and no longer officially supported.  You should instead use LINX which is LIFA's replace, is much faster, and is actively supported and being developed to add more functionality.  LabVIEW MakerHub is the official home of LINX.  Also, given the code that you posted, LINX code will be nearly identical (Note that the "I2C Channel" will be 0 for all Arduinos).

P.S.  LINX also includes support for many more micro controllers other than Arduino.

Message 2 of 32
(16,298 Views)

Hi, thank you for your replay. It has a lot of sense what you said. Also, thanks for your recommendations. I know a little bit about LINX, but I'm running a bit out of time and I don't know if it would be so easy to download, use, etc. I totally agree with you about using Arduino libraries, but the problem is I'm programming the whole software using Labview, I must use Labview. It's not just a code for Arduino.

I ran the code with only one address and it worked perfectly!!

Thanks again for your help!

Sergi

0 Kudos
Message 3 of 32
(16,298 Views)

http://www.transport-intelligent.net/technologies/systemes-cooperatifs/

2015-07-13 11:37 GMT+02:00 sergiclariana <web.community@ni.com>:

Community

<https://decibel.ni.com/content/index.jspa> Re: ADS1115 Labview

Interface for Arduino created by sergiclariana

<https://decibel.ni.com/content/people/sergiclariana> in *LabVIEW

Interface for Arduino* - View the full discussion

<https://decibel.ni.com/content/message/106963#106963>

0 Kudos
Message 4 of 32
(16,298 Views)

Hi Sergi,

 

I tried removing the address (144 and 145) in the data array, yet timeout occurred at the I2C Read.vi. I made sure the hardware is not the problem using Arduino example.

 

Could you share your revised example code?

0 Kudos
Message 5 of 32
(14,785 Views)

Hi,

 

i have the same problem that Linx + Arduino Uno + ADS1115 is not working.

Can anybody share a working code for labview?

I wired ADDR with GND and want to use the full range of 6V.

 

Thank you very much

0 Kudos
Message 6 of 32
(14,698 Views)

i2c demo.jpg

Well, it works now, I just forgot to put the I2C Open.vi after the Open Serial.vi...

0 Kudos
Message 7 of 32
(14,649 Views)

Dear, pichw. I'm working with the ADS1115 and your code but I don't understand the data that I get. Could you help me with the interpretation of the data please? Thanks.


pichw escribió:

i2c demo.jpg

Well, it works now, I just forgot to put the I2C Open.vi after the Open Serial.vi...


 

0 Kudos
Message 8 of 32
(14,452 Views)

Firstly, there are 2 bytes you need to read, MSB and LSB. Secondly, the unit of the reading you get is related to the full scale you set. ADS1115 is a 16bits ADC, and 1 bit is used for sign, therefore when the full scale is +/-4.096V the unit of the reading is 4096/2^15 = 0.125 mV.

i2c demo_.jpg

 

Message 9 of 32
(14,443 Views)

Dear All,

I am facing a problem with interfacing ADS1115 with LINX. I am able to communicate the ADS with INX but cannot figure out how to read exact analog data. I also want to read the differential voltage of A0-A1 and A2-A3 and want to change the PGA values. I am also concerned about the sign of the data like -2.5 mV. But I am getting some crazy data. How to configure the registers and write codes for the same. I am attaching the codes in VI. Please reply as soon as possible.

Thanks in advance...

0 Kudos
Message 10 of 32
(13,059 Views)