Browse Source

Micropython port

master
Pierrick C 2 years ago
parent
commit
701a8d6b7e
  1. 70
      adafruit_max31865.py

70
adafruit_max31865.py

@ -23,10 +23,11 @@
`adafruit_max31865`
====================================================
CircuitPython module for the MAX31865 platinum RTD temperature sensor. See
MicroPython module for the MAX31865 platinum RTD temperature sensor. See
examples/simpletest.py for an example of the usage.
* Author(s): Tony DiCola
* micropython port: arofarn
Implementation Notes
--------------------
@ -44,16 +45,15 @@ Implementation Notes
**Software and Dependencies:**
* Adafruit CircuitPython firmware for the ESP8622 and M0-based boards:
https://github.com/adafruit/circuitpython/releases
* Adafruit's Bus Device library: https://github.com/adafruit/Adafruit_CircuitPython_BusDevice
* Micropython firmware :
https://micropython.org/download
"""
import math
import time
from machine import Pin
from micropython import const
import adafruit_bus_device.spi_device as spi_device
__version__ = "0.0.0-auto.0"
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_MAX31865.git"
@ -91,21 +91,29 @@ _RTD_B = -5.775e-7
class MAX31865:
"""Driver for the MAX31865 thermocouple amplifier."""
# Class-level buffer for reading and writing data with the sensor.
# This reduces memory allocations but means the code is not re-entrant or
# thread safe!
_BUFFER = bytearray(3)
def __init__(self, spi, cs, *, rtd_nominal=100, ref_resistor=430.0, wires=2):
def __init__(
self, spi, cs, *, rtd_nominal=100, ref_resistor=430.0,
wires=2, filter_frequency=60
):
self.rtd_nominal = rtd_nominal
self.ref_resistor = ref_resistor
self._device = spi_device.SPIDevice(
spi, cs, baudrate=500000, polarity=0, phase=1
)
self._spi = spi
self._cs = cs
self._cs.init(mode=Pin.OUT, pull=Pin.PULL_UP)
self._cs.value(1)
# Set 50Hz or 60Hz filter.
if filter_frequency not in (50, 60):
raise ValueError("Filter_frequency must be a value of 50 or 60!")
config = self._read_u8(_MAX31865_CONFIG_REG)
if filter_frequency == 50:
config |= _MAX31865_CONFIG_FILT50HZ
else:
config &= ~_MAX31865_CONFIG_FILT50HZ
# Set wire config register based on the number of wires specified.
if wires not in (2, 3, 4):
raise ValueError("Wires must be a value of 2, 3, or 4!")
config = self._read_u8(_MAX31865_CONFIG_REG)
if wires == 3:
config |= _MAX31865_CONFIG_3WIRE
else:
@ -119,26 +127,30 @@ class MAX31865:
# pylint: disable=no-member
def _read_u8(self, address):
# Read an 8-bit unsigned value from the specified 8-bit address.
with self._device as device:
self._BUFFER[0] = address & 0x7F
device.write(self._BUFFER, end=1)
device.readinto(self._BUFFER, end=1)
return self._BUFFER[0]
buf=bytearray(1)
self._cs.value(0)
self._spi.write(bytes([address & 0x7F]))
self._spi.readinto(buf, 1)
self._cs.value(1)
return buf[0]
def _read_u16(self, address):
# Read a 16-bit BE unsigned value from the specified 8-bit address.
with self._device as device:
self._BUFFER[0] = address & 0x7F
device.write(self._BUFFER, end=1)
device.readinto(self._BUFFER, end=2)
return (self._BUFFER[0] << 8) | self._BUFFER[1]
buf=bytearray(2)
self._cs.value(0)
self._spi.write(bytes([address & 0x7F]))
self._spi.readinto(buf, 1)
self._cs.value(1)
return (buf[0] << 8) | buf[1]
def _write_u8(self, address, val):
# Write an 8-bit unsigned value to the specified 8-bit address.
with self._device as device:
self._BUFFER[0] = (address | 0x80) & 0xFF
self._BUFFER[1] = val & 0xFF
device.write(self._BUFFER, end=2)
buf=bytearray(2)
buf[0] = (address | 0x80) & 0xFF
buf[1] = val & 0xFF
self._cs.value(0)
self._spi.write(buf)
self._cs.value(1)
# pylint: enable=no-member

Loading…
Cancel
Save