From 701a8d6b7e4a4bf510c9206c81d5311caa6796fa Mon Sep 17 00:00:00 2001 From: Pierrick C Date: Sun, 29 Mar 2020 17:55:28 +0200 Subject: [PATCH] Micropython port --- adafruit_max31865.py | 70 ++++++++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 29 deletions(-) diff --git a/adafruit_max31865.py b/adafruit_max31865.py index ad192cc..e076827 100644 --- a/adafruit_max31865.py +++ b/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