Hi I am writing a python script to code the raspberry pi to read from the MCP3002 ADC. This is the code that I typed in onto the raspberry pi nano script

import spidev   
import time

def readAnalog(device = 0,channel = 0):
    assert device in (1, 0)
    assert channel in (1, 0)
    #open spi
    spi = spidev.SpiDev()
    spi.open(0, device)
    Protocol start bit (S), sql/diff (D), odd/sign (C), MSBF (M)
    Use leading zero for more stable clock cycle
    0000 000S DCM0 0000 0000 0000
    Sending 3 8bit packages so xpi.xfer2 will return the same amount.
    start bit = 1
    sql/diff = 1 SINGLE ENDED MODE  (2 channel mode) 
    odd/sign = channel 0/1
    MSBF = 0
    command = [1, (2 + channel) << 6, 0]
    #2 + channel shifted 6 to left
    #10 or 11 << 6 = 1000 0000 or 1100 0000
    reply = spi.xfer2(command)
    Parse right bits from 24 bit package (3*8bit)
    We need only data from last 2 bytes.
    And there we can discard last two bits to get 10 bit value 
    as MCP3002 resolution is 10bits
    Discard reply[0] byte and start from reply[1] where our data starts
    value = reply[1] & 31   
    #31 = 0001 1111 with & operation makes sure that we have all data from XXXX DDDD and nothing more. 0001 is for signed in next operation.
    value = value << 6  #Move to left to make room for next piece of data.
    #000D DDDD << 6 = 0DDD DD00 0000
    #Now we get the last of data from reply[2]
    value = value + (reply[2] >> 2)
    #Here we discard last to bits
    #DDDD DDXXX >> 2 = 00DD DDDD
    #0DDD DD00 0000 + 00DD DDDD = 0DDD DDDD DDDD
    return value

def main():
    #read channel 0 on device 0
    value = readAnalog(0, 0)
    print value

if __name__ == "__main__":

but when I execute this code on the terminal it wouldn't work

enter image description here

All the connection that I have done are the same within this image, the only difference is I just have to substitute the potentiometer for the Infrared Distance Sensor

enter image description here

So what would be the right code for the raspberry pi to read from the MCP3002 ADC

1 Answer 1


Add the following line as the first of your Python script.

#!/usr/bin/env python

This tells the system that the script should be executed by the Python interpreter.

At the moment the shell thinks the script is a list of shell commands and is getting confused.

  • I tried that but I'm still getting errors when I execute the script
    – Richard
    Commented May 11, 2017 at 13:57
  • If you are getting the same error I am at a loss.
    – joan
    Commented May 11, 2017 at 14:14

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.