Skip to content

Instantly share code, notes, and snippets.

@qqrs
Forked from ladyada/adafruit_mcp3008.py
Created November 18, 2012 04:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save qqrs/4103646 to your computer and use it in GitHub Desktop.
Save qqrs/4103646 to your computer and use it in GitHub Desktop.
Raspbery Pi Analog Input with MCP3008
#!/usr/bin/env python
import time
import datetime
import os
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
DEBUG = 1
# read SPI data from MCP3008 chip, 8 possible adc's (0 thru 7)
def readadc(adcnum, clockpin, mosipin, misopin, cspin):
if ((adcnum > 7) or (adcnum < 0)):
return -1
GPIO.output(cspin, True)
GPIO.output(clockpin, False) # start clock low
GPIO.output(cspin, False) # bring CS low
commandout = adcnum
commandout |= 0x18 # start bit + single-ended bit
commandout <<= 3 # we only need to send 5 bits here
for i in range(5):
if (commandout & 0x80):
GPIO.output(mosipin, True)
else:
GPIO.output(mosipin, False)
commandout <<= 1
GPIO.output(clockpin, True)
GPIO.output(clockpin, False)
adcout = 0
# read in one empty bit, one null bit and 10 ADC bits
for i in range(12):
GPIO.output(clockpin, True)
GPIO.output(clockpin, False)
adcout <<= 1
if (GPIO.input(misopin)):
adcout |= 0x1
GPIO.output(cspin, True)
adcout >>= 1 # first bit is 'null' so drop it
return adcout
# change these as desired - they're the pins connected from the
# SPI port on the ADC to the Cobbler
SPICLK = 18
SPIMISO = 23
SPIMOSI = 24
SPICS = 25
# set up the SPI interface pins
GPIO.setup(SPIMOSI, GPIO.OUT)
GPIO.setup(SPIMISO, GPIO.IN)
GPIO.setup(SPICLK, GPIO.OUT)
GPIO.setup(SPICS, GPIO.OUT)
# 10k trim pot connected to adc #0
adc_pin = 0;
while True:
begin_time = datetime.datetime.now()
# read the analog pin
adc_value = readadc(adc_pin, SPICLK, SPIMOSI, SPIMISO, SPICS)
diff_time = datetime.datetime.now() - begin_time
# print adc read time in us and adc value
print "%8d: adc_value: %4d" % (diff_time.microseconds, adc_value)
time.sleep(0.1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment