I am trying to sample an analog voltage signal on the Raspberry Pi using an MCP3004 ADC. I am using the spidev package and the basic code is something like:

import spidev
import time
list = []
timeout = time.time() + 5
spi = spidev.SpiDev()
def getAdc(channel)
    r = spixfer([1, (8+channel) << 4, 0])
    adcOut = ((r[1]&3) << 8 + r[2]
    voltage = (adcOut * 3.3)/ (1023)
while time.time()<timout

I am running the code for 5 seconds and it gives me around 1000 samples (which is sampling at 200 Hz). Is there a way I can increase this? I need at least 1 kHz.

1 Answer 1


There is nothing obviously inefficient in your Python.

Perhaps you need to go to C. The standard C library SPI calls should approach 20 thousand samples per second.

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.