I am having trouble executing the code on the raspberry pi to read from the MCP3002 ADC



Hi I’m just having trouble executing the code on the raspberry pi to read from the MCP3002 ADC. This is the code that I typed in onto the raspberry pi nano script through this link: http://www.learningaboutelectronics.com/Code/botbook_mcp3002.txt, but when I execute this code on the terminal it wouldn’t work

I have type in this code on the first line “#!usr/bin/python” but I’m still getting error messages according to the image

So what would be the right code for the raspberry pi to read from the MCP3002 ADC
because this code doesn’t work

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 ©, 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
#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”:

before executing the script to get the raspberry pi to read from the ADC, do I need to write a python script to activate the GPIO pins on the raspberry pi since its interface with the ADC and Infrared Distance Sensor


The error suggests spidev kernel module is not yet loaded. Enable it, reboot the Raspberry Pi, and try again. See https://learn.sparkfun.com/tutorials/raspberry-pi-spi-and-i2c-tutorial for how to enable it. Especially check with ls /dev/*spi* that the filesystem nodes are created by the kernel module.

Oh, and please don’t type the code in, there’s so much opportunity for mistakes. Download the file on the Raspberry Pi if it has internet, or download it on another computer and transfer it with a USB drive, or if the other computer runs Linux then you could insert the microSD or SD card to put the file on it.


Thank you so much this has really helped me