2

I'm using python to read in values from a high-speed 8-bit ADC (the ADS7885 linked here) and convert them into voltages using the SPI0 ports on a Raspberry Pi 4. At this point, I do receive values from the ADC on the Raspberry Pi, but the values I am reading in are not at all accurate. I was hoping someone might be able to help me out with my code so that I can accurately read values from the ADC at a sampling rate of 48mHz and convert them into voltages?

I think the problem might have to do with the number of clock cycles it takes before the ADC can read/convert valid data? The datasheet says that this specific ADC requires 16 SCLK cycles before it is able to begin converting valid data, but I'm not sure how to enforce this in my code.

I followed sample code for a 10-bit ADC that uses the Spidev python module, but I'm open to any other code solutions. This is what I'm currently running:

spi404 = spidev.SpiDev(0, 0)

def read_adc404(adc_ch, vref = 5):
    msg = 0b11
    msg = ((msg << 1) + 0) << 3
    msg = (msg, 0b000000)
    reply = spi404.xfer2(msg)

    adc = 0
    for n in reply:
       adc = (adc << 6) + n

    adc = adc >> 2

    voltage  = (vref * adc) / 256

    return voltage

Any tips or help would be greatly appreciated!!

1
  • If you know exactly how data are written, then I would do something like data = np.fromfile(f_in, dtype=np.uint8) or so. I use it for my own ADC. Hopefully everything is just in the same binary format, time-stamps and data. Commented Apr 21, 2022 at 7:52

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.