Skip to content

Instantly share code, notes, and snippets.

@sli
Last active June 15, 2016 16:24
Show Gist options
  • Save sli/ef3e2b3eaf11f0f1ea3f56bb764d9ff6 to your computer and use it in GitHub Desktop.
Save sli/ef3e2b3eaf11f0f1ea3f56bb764d9ff6 to your computer and use it in GitHub Desktop.
Read from an ADC channel on a Raspberry Pi. Shamelessly lifted from Adafruit.
import RPi.GPIO as GPIO
def readadc(adcnum, clockpin=18, mosipin=23, misopin=24, cspin=25):
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment