AD7195 adc 24-bit output to arduino

Hi,

I am building a force transducer where the forces would be in micro (e-6) to mili(e-3) range. So I need suggestion I was thinking that AD7195 would work but since it has 24-bit output I dont know if it will work. Any suggestions are appreciated.

Keeping noise away from it is going to be your main problem.

(I believe the AVR toolchain supports 24 bit integer datatypes, if you're tight on memory, but you'll need to be careful, because many (most?) Arduino libraries know nothing about them)

Welcome to the forum.

Can you give the brand and type of the force transducer and give a link to it ?

The Arduino Uno (from the AVR family of boards) can do calculations with 32 bits integers and even simple calculations with 64 bits integers. But it supports only 32-bit floating point variables.
Other boards with new processors have 64-bit floating point.

For normal bathroom scales and kitchen scales, the HX711 is often used.
Your question might be similar to this topic: Scale from 50 kg to 5000kg, what adc?

I am actually developing the a force transducer from scratch using strain gauges (Contraflexure, Full Bridge Strain Gauges). The force output is expected to be in mili Newtons or some order lower than this.

I have read that AD7195 is good for handling noise.

Then you have to build it. We can not tell how good it will work.

I have no doubt that the AD7195 is a wonderful chip, but do you know if there is code for it or can you write code for it ?

I found a code on git i dont know if it will work or not linux-3.8.13/drivers/staging/iio/adc/ad7192.c at master · opennetworklinux/linux-3.8.13 · GitHub

That is a typical linux driver. You need someone to translate that to Arduino code, or you could use a linux board, such as a Raspberry Pi.

These drivers from Analog Devices are written with embedded microcontrollers/processors in mind: AD7190 - Microcontroller No-OS Driver [Analog Devices Wiki]
That code is suitable for Arduino boards, but there is a lot to read and to learn how to use that code with the AD7195.

Ok got it. But I have a question since the adc is 24-bit and arduino is 8-bit will I get accurate readings because as I already mentioned the output will be way smaller than usual load cell which have accuracy range above 1kg or something.

The 32-bit floating point calculations is not good enough (in my opinion). The Arduino Uno can not do 64-bit floating point calculations in a normal way, so you need a board with a processor that can do 64-bit floating point calculations.

The Arduino Uno is a 8-bit microcontroller, but that doesn't matter. The compiler uses that 8-bit microcontroller to make code and use libraries. The Arduino Uno can do 64-bit integer calculation as I wrote. That is done by code generated by the compiler.
However, the Arduino Uno does not have a 64-bit floating point library.

Which Arduino board do you want to use ?

Which board do you think will be good for 64-bit? I will make it work. Earlier you told me about Rasp Pi what do you think would be better? I need this to work.

When you have to adapt code for Arduino, you might be on your own.

A normal Raspberry Pi is a mini linux computer. A Raspberry Pi Pico is a Arduino-compatible board (not a linux computer).

Because I know Arduino code, I would use a Arduino board or a Arduino-compatible board. But I can only speak for myself. Most Arduino boards support 64-bit floating point precision: Arduino Zero, Raspberry Pi Pico, ESP32.

There is Arduino code for the AD719x, for example:

If you have not built the strain gauge yet, how do you know that the AD7195 will work with it?
If the effective number of bits from the AD7195 is only 12, a 64 bit processor won't make any difference, might as well use an UNO.

I have never worked with rasp pi. I worked with Arduino 5,6 years ago. I think Arduino zero that you mentioned would work for me. I just need to adopt the code for my use.

Have you worked with AD7195 before or any of the AD719x series? or anything similar?

AD7190 for a load cell application

:smiley: :smiley: A long-long time ago I was confused by that! Back when electronics was mostly analog I was learning about the GPIB bus (used to interface equipment like oscilloscopes, multimeters, spectrum analyzers, etc.). When they told me it was 8-bits I couldn't understand how it could be useful at all. Even when they told me it sends 8-bits at a time I didn't really understand it.

But with the Arduino the compiler and C++ take care of everything so you can work with 32-bit integers and floating point. (It takes a little longer for the processor... Not a problem when measuring static or slowly-changes forces.)

Or if you open any file with a hex editor the information is read & displayed as bytes.

So the "digital side" isn't a problem. But low analog voltages (millivolts or less) are "difficult" because it's hard to get a usable signal-to-noise ratio. It also depends on impedance. Lower resistance/impedance devices are more immune to noise pick-up and they also tend to generate less noise. Strain gauges are low resistance so that's one thing in your favor.

That was a really good explanation. So you are saying that even with an 8-bit processor I can use a 24-bit ADC it would just take more time to for the software to complie.

Did you get a module or made your own PCB?

Made my own