Skip to content

Commit

Permalink
support for kernel spi (not bitbang) MAX38155 interface
Browse files Browse the repository at this point in the history
  • Loading branch information
2bitoperations committed Dec 1, 2017
1 parent c6b5ca1 commit 87778d8
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 16 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@
thumbs.db
storage/profiles
config.py
.idea/*
13 changes: 10 additions & 3 deletions config.py.EXAMPLE
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,22 @@ heater_invert = 0 # switches the polarity of the heater control
### Inputs
gpio_door = 18

### Thermocouple Adapter selection (MAX31855 or MAX6675)
max31855 = 1
### Thermocouple Adapter selection:
# max31855 - bitbang SPI interface
# max31855spi - kernel SPI interface
# max6675 - bitbang SPI interface
max31855 = 0
max6675 = 0
max31855spi = 1

### Thermocouple I2C Connection
### Thermocouple Connection (using bitbang interfaces)
gpio_sensor_cs = 27
gpio_sensor_clock = 22
gpio_sensor_data = 17

### Thermocouple SPI Connection (using adafrut drivers + kernel SPI interface)
spi_sensor_chip_id = 0


########################################################################
#
Expand Down
32 changes: 32 additions & 0 deletions lib/max31855spi.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/usr/bin/python
from Adafruit_MAX31855 import MAX31855

class MAX31855SPI(object):
'''Python driver for [MAX38155 Cold-Junction Compensated Thermocouple-to-Digital Converter](http://www.maximintegrated.com/datasheet/index.mvp/id/7273)
Requires:
- adafruit's MAX31855 SPI-only device library
'''
def __init__(self, spi_dev):
self.max31855 = MAX31855.MAX31855(spi=spi_dev)

def get(self):
'''Reads SPI bus and returns current value of thermocouple.'''
state = self.max31855.readState()
if state['openCircuit']:
raise MAX31855Error('Not Connected')
elif state['shortGND']:
raise MAX31855Error('Short to Ground')
elif state['shortVCC']:
raise MAX31855Error('Short to VCC')
elif state['fault']:
raise MAX31855Error('Unknown Error')
return self.max31855.readLinearizedTempC()


class MAX31855SPIError(Exception):
def __init__(self, value):
self.value = value

def __str__(self):
return repr(self.value)
34 changes: 21 additions & 13 deletions lib/oven.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,19 @@
log = logging.getLogger(__name__)

try:
if (config.max31855 == config.max6675):
log.error("choose (only) one converter IC")
exit()
if config.max31855 + config.max6675 + config.max31855spi > 1:
log.error("choose (only) one converter IC")
exit()
if config.max31855:
from max31855 import MAX31855, MAX31855Error
log.info("import MAX31855")
from max31855 import MAX31855, MAX31855Error
log.info("import MAX31855")
if config.max31855spi:
import Adafruit_GPIO.SPI as SPI
from max6675 import MAX31855SPI, MAX31855SPIError
log.info("import MAX31855SPI")
if config.max6675:
from max6675 import MAX6675, MAX6675Error
log.info("import MAX6675")
from max6675 import MAX6675, MAX6675Error
log.info("import MAX6675")
sensor_available = True
except ImportError:
log.warning("Could not initialize temperature sensor, using dummy values!")
Expand Down Expand Up @@ -147,14 +151,14 @@ def set_heat(self, value):
self.heat = 1.0
if gpio_available:
if config.heater_invert:
GPIO.output(config.gpio_heat, GPIO.LOW)
GPIO.output(config.gpio_heat, GPIO.LOW)
else:
GPIO.output(config.gpio_heat, GPIO.HIGH)
else:
self.heat = 0.0
if gpio_available:
if config.heater_invert:
GPIO.output(config.gpio_heat, GPIO.HIGH)
GPIO.output(config.gpio_heat, GPIO.HIGH)
else:
GPIO.output(config.gpio_heat, GPIO.LOW)

Expand Down Expand Up @@ -211,19 +215,23 @@ class TempSensorReal(TempSensor):
def __init__(self, time_step):
TempSensor.__init__(self, time_step)
if config.max6675:
log.info("init MAX6675")
self.thermocouple = MAX6675(config.gpio_sensor_cs,
log.info("init MAX6675")
self.thermocouple = MAX6675(config.gpio_sensor_cs,
config.gpio_sensor_clock,
config.gpio_sensor_data,
config.temp_scale)

if config.max31855:
log.info("init MAX31855")
self.thermocouple = MAX31855(config.gpio_sensor_cs,
log.info("init MAX31855")
self.thermocouple = MAX31855(config.gpio_sensor_cs,
config.gpio_sensor_clock,
config.gpio_sensor_data,
config.temp_scale)

if config.max31855spi:
log.info("init MAX31855-spi")
self.thermocouple = MAX31855SPI(spi_dev=SPI.SpiDev(port=0, device=config.spi_sensor_chip_id))

def run(self):
while True:
self.temperature = self.thermocouple.get()
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Adafruit-MAX31855>=1.6.1

0 comments on commit 87778d8

Please sign in to comment.