Add MAX6675_*_IS_MAX318*5

This commit is contained in:
Scott Lahteine 2020-11-09 01:55:59 -06:00
parent 4fddc5ce02
commit 32f88165d2
4 changed files with 49 additions and 61 deletions

View file

@ -445,9 +445,9 @@
#define HEATER_0_MAX6675_TMAX 1024 #define HEATER_0_MAX6675_TMAX 1024
#endif #endif
#if TEMP_SENSOR_0 == -5 #if TEMP_SENSOR_0 == -5
#define MAX6675_IS_MAX31865 1 #define MAX6675_0_IS_MAX31865 1
#elif TEMP_SENSOR_0 == -3 #elif TEMP_SENSOR_0 == -3
#define MAX6675_IS_MAX31855 1 #define MAX6675_0_IS_MAX31855 1
#endif #endif
#elif TEMP_SENSOR_0 == -4 #elif TEMP_SENSOR_0 == -4
#define HEATER_0_USES_AD8495 1 #define HEATER_0_USES_AD8495 1
@ -473,6 +473,11 @@
#define HEATER_1_MAX6675_TMIN 0 #define HEATER_1_MAX6675_TMIN 0
#define HEATER_1_MAX6675_TMAX 1024 #define HEATER_1_MAX6675_TMAX 1024
#endif #endif
#if TEMP_SENSOR_1 == -5
#define MAX6675_1_IS_MAX31865 1
#elif TEMP_SENSOR_1 == -3
#define MAX6675_1_IS_MAX31855 1
#endif
#if TEMP_SENSOR_1 != TEMP_SENSOR_0 #if TEMP_SENSOR_1 != TEMP_SENSOR_0
#if TEMP_SENSOR_1 == -5 #if TEMP_SENSOR_1 == -5
#error "If MAX31865 Thermocouple (-5) is used for TEMP_SENSOR_1 then TEMP_SENSOR_0 must match." #error "If MAX31865 Thermocouple (-5) is used for TEMP_SENSOR_1 then TEMP_SENSOR_0 must match."

View file

@ -1814,11 +1814,11 @@ static_assert(hbm[Z_AXIS] >= 0, "HOMING_BUMP_MM.Z must be greater than or equal
#error "TEMP_SENSOR_1 is required with TEMP_SENSOR_1_AS_REDUNDANT." #error "TEMP_SENSOR_1 is required with TEMP_SENSOR_1_AS_REDUNDANT."
#endif #endif
#if MAX6675_IS_MAX31865 && !(defined(MAX31865_SENSOR_OHMS_0) && defined(MAX31865_CALIBRATION_OHMS_0)) #if MAX6675_0_IS_MAX31865 && !(defined(MAX31865_SENSOR_OHMS_0) && defined(MAX31865_CALIBRATION_OHMS_0))
#error "MAX31865_SENSOR_OHMS_0 and MAX31865_CALIBRATION_OHMS_0 must be set in Configuration.h when using a MAX31865 temperature sensor on TEMP_SENSOR_0." #error "MAX31865_SENSOR_OHMS_0 and MAX31865_CALIBRATION_OHMS_0 must be set in Configuration.h if TEMP_SENSOR_0 is MAX31865."
#endif #endif
#if MAX6675_IS_MAX31865 && !(defined(MAX31865_SENSOR_OHMS_1) && defined(MAX31865_CALIBRATION_OHMS_1)) && TEMP_SENSOR_1 == -5 #if MAX6675_1_IS_MAX31865 && !(defined(MAX31865_SENSOR_OHMS_1) && defined(MAX31865_CALIBRATION_OHMS_1))
#error "MAX31865_SENSOR_OHMS_1 and MAX31865_CALIBRATION_OHMS_1 must be set in Configuration.h when using a MAX31865 temperature sensor on TEMP_SENSOR_1." #error "MAX31865_SENSOR_OHMS_1 and MAX31865_CALIBRATION_OHMS_1 must be set in Configuration.h if TEMP_SENSOR_1 is MAX31865."
#endif #endif
/** /**

View file

@ -44,24 +44,22 @@
#include "../lcd/extui/ui_api.h" #include "../lcd/extui/ui_api.h"
#endif #endif
#if MAX6675_IS_MAX31865 #if MAX6675_0_IS_MAX31865 || MAX6675_1_IS_MAX31865
#include <Adafruit_MAX31865.h> #include <Adafruit_MAX31865.h>
#ifndef MAX31865_CS_PIN #if MAX6675_0_IS_MAX31865 && !defined(MAX31865_CS_PIN)
#define MAX31865_CS_PIN MAX6675_SS_PIN // HW:49 SW:65 for example #define MAX31865_CS_PIN MAX6675_SS_PIN
#endif #endif
#if TEMP_SENSOR_1 == -5 #if MAX6675_1_IS_MAX31865 && !defined(MAX31865_CS2_PIN)
#ifndef MAX31865_CS2_PIN
#define MAX31865_CS2_PIN MAX6675_SS2_PIN #define MAX31865_CS2_PIN MAX6675_SS2_PIN
#endif #endif
#endif
#ifndef MAX31865_MOSI_PIN #ifndef MAX31865_MOSI_PIN
#define MAX31865_MOSI_PIN MOSI_PIN // 63 #define MAX31865_MOSI_PIN MOSI_PIN
#endif #endif
#ifndef MAX31865_MISO_PIN #ifndef MAX31865_MISO_PIN
#define MAX31865_MISO_PIN MAX6675_DO_PIN // 42 #define MAX31865_MISO_PIN MAX6675_DO_PIN
#endif #endif
#ifndef MAX31865_SCK_PIN #ifndef MAX31865_SCK_PIN
#define MAX31865_SCK_PIN MAX6675_SCK_PIN // 40 #define MAX31865_SCK_PIN MAX6675_SCK_PIN
#endif #endif
Adafruit_MAX31865 max31865_0 = Adafruit_MAX31865(MAX31865_CS_PIN Adafruit_MAX31865 max31865_0 = Adafruit_MAX31865(MAX31865_CS_PIN
#if MAX31865_CS_PIN != MAX6675_SS_PIN #if MAX31865_CS_PIN != MAX6675_SS_PIN
@ -70,8 +68,7 @@
, MAX31865_SCK_PIN , MAX31865_SCK_PIN
#endif #endif
); );
#if TEMP_SENSOR_1 == -5 #if MAX6675_1_IS_MAX31865 && PIN_EXISTS(MAX31865_CS2)
#if MAX31865_CS2_PIN
Adafruit_MAX31865 max31865_1 = Adafruit_MAX31865(MAX31865_CS2_PIN Adafruit_MAX31865 max31865_1 = Adafruit_MAX31865(MAX31865_CS2_PIN
#if MAX31865_CS2_PIN != MAX6675_SS2_PIN #if MAX31865_CS2_PIN != MAX6675_SS2_PIN
, MAX31865_MOSI_PIN // For software SPI also set MOSI/MISO/SCK , MAX31865_MOSI_PIN // For software SPI also set MOSI/MISO/SCK
@ -81,7 +78,6 @@
); );
#endif #endif
#endif #endif
#endif
#if EITHER(HEATER_0_USES_MAX6675, HEATER_1_USES_MAX6675) && PINS_EXIST(MAX6675_SCK, MAX6675_DO) #if EITHER(HEATER_0_USES_MAX6675, HEATER_1_USES_MAX6675) && PINS_EXIST(MAX6675_SCK, MAX6675_DO)
#define MAX6675_SEPARATE_SPI 1 #define MAX6675_SEPARATE_SPI 1
@ -1489,13 +1485,7 @@ void Temperature::manage_heater() {
#if HEATER_0_USER_THERMISTOR #if HEATER_0_USER_THERMISTOR
return user_thermistor_to_deg_c(CTI_HOTEND_0, raw); return user_thermistor_to_deg_c(CTI_HOTEND_0, raw);
#elif HEATER_0_USES_MAX6675 #elif HEATER_0_USES_MAX6675
return ( return TERN(MAX6675_0_IS_MAX31865, max31865_0.temperature(MAX31865_SENSOR_OHMS_0, MAX31865_CALIBRATION_OHMS_0), raw * 0.25);
#if MAX6675_IS_MAX31865
max31865_0.temperature(MAX31865_SENSOR_OHMS_0, MAX31865_CALIBRATION_OHMS_0)
#else
raw * 0.25
#endif
);
#elif HEATER_0_USES_AD595 #elif HEATER_0_USES_AD595
return TEMP_AD595(raw); return TEMP_AD595(raw);
#elif HEATER_0_USES_AD8495 #elif HEATER_0_USES_AD8495
@ -1507,13 +1497,7 @@ void Temperature::manage_heater() {
#if HEATER_1_USER_THERMISTOR #if HEATER_1_USER_THERMISTOR
return user_thermistor_to_deg_c(CTI_HOTEND_1, raw); return user_thermistor_to_deg_c(CTI_HOTEND_1, raw);
#elif HEATER_1_USES_MAX6675 #elif HEATER_1_USES_MAX6675
return ( return TERN(MAX6675_1_IS_MAX31865, max31865_1.temperature(MAX31865_SENSOR_OHMS_1, MAX31865_CALIBRATION_OHMS_1), raw * 0.25);
#if TEMP_SENSOR_1 == -5
max31865_1.temperature(MAX31865_SENSOR_OHMS_1, MAX31865_CALIBRATION_OHMS_1)
#else
raw * 0.25
#endif
);
#elif HEATER_1_USES_AD595 #elif HEATER_1_USES_AD595
return TEMP_AD595(raw); return TEMP_AD595(raw);
#elif HEATER_1_USES_AD8495 #elif HEATER_1_USES_AD8495
@ -1715,11 +1699,8 @@ void Temperature::updateTemperaturesFromRawValues() {
*/ */
void Temperature::init() { void Temperature::init() {
TERN_(MAX6675_IS_MAX31865, max31865_0.begin(MAX31865_2WIRE)); // MAX31865_2WIRE, MAX31865_3WIRE, MAX31865_4WIRE TERN_(MAX6675_0_IS_MAX31865, max31865_0.begin(MAX31865_2WIRE)); // MAX31865_2WIRE, MAX31865_3WIRE, MAX31865_4WIRE
TERN_(MAX6675_1_IS_MAX31865, max31865_1.begin(MAX31865_2WIRE)); // MAX31865_2WIRE, MAX31865_3WIRE, MAX31865_4WIRE
#if TEMP_SENSOR_1 == -5
TERN_(MAX6675_IS_MAX31865, max31865_1.begin(MAX31865_2WIRE)); // MAX31865_2WIRE, MAX31865_3WIRE, MAX31865_4WIRE
#endif
#if EARLY_WATCHDOG #if EARLY_WATCHDOG
// Flag that the thermalManager should be running // Flag that the thermalManager should be running
@ -2240,15 +2221,15 @@ void Temperature::disable_all_heaters() {
#define MAX6675_HEAT_INTERVAL 250UL #define MAX6675_HEAT_INTERVAL 250UL
#if MAX6675_IS_MAX31855 #if MAX6675_0_IS_MAX31855 || MAX6675_1_IS_MAX31855
static uint32_t max6675_temp = 2000; static uint32_t max6675_temp = 2000;
#define MAX6675_ERROR_MASK 7 #define MAX6675_ERROR_MASK 7
#define MAX6675_DISCARD_BITS 18 #define MAX6675_DISCARD_BITS 18
#define MAX6675_SPEED_BITS 3 // (_BV(SPR1)) // clock ÷ 64 #define MAX6675_SPEED_BITS 3 // (_BV(SPR1)) // clock ÷ 64
#elif MAX6675_IS_MAX31865 #elif MAX6675_0_IS_MAX31865 || MAX6675_1_IS_MAX31865
static uint16_t max6675_temp = 2000; //from datasheet 16 bits D15-D0 static uint16_t max6675_temp = 2000; // From datasheet 16 bits D15-D0
#define MAX6675_ERROR_MASK 1 // D0 Bit not used #define MAX6675_ERROR_MASK 1 // D0 Bit not used
#define MAX6675_DISCARD_BITS 1 //data is in D15-D1 #define MAX6675_DISCARD_BITS 1 // Data is in D15-D1
#define MAX6675_SPEED_BITS 3 // (_BV(SPR1)) // clock ÷ 64 #define MAX6675_SPEED_BITS 3 // (_BV(SPR1)) // clock ÷ 64
#else #else
static uint16_t max6675_temp = 2000; static uint16_t max6675_temp = 2000;
@ -2265,13 +2246,15 @@ void Temperature::disable_all_heaters() {
next_max6675_ms[hindex] = ms + MAX6675_HEAT_INTERVAL; next_max6675_ms[hindex] = ms + MAX6675_HEAT_INTERVAL;
#if MAX6675_IS_MAX31865 #if MAX6675_0_IS_MAX31865 || MAX6675_1_IS_MAX31865
max6675_temp = int( max6675_temp = int(
#if HAS_MULTI_6675 #if HAS_MULTI_6675
hindex ? max31865_1.temperature(MAX31865_SENSOR_OHMS_1, MAX31865_CALIBRATION_OHMS_1) hindex ? max31865_1.temperature(MAX31865_SENSOR_OHMS_1, MAX31865_CALIBRATION_OHMS_1)
: max31865_0.temperature(MAX31865_SENSOR_OHMS_0, MAX31865_CALIBRATION_OHMS_0) : max31865_0.temperature(MAX31865_SENSOR_OHMS_0, MAX31865_CALIBRATION_OHMS_0)
#else #elif MAX6675_0_IS_MAX31865
max31865_0.temperature(MAX31865_SENSOR_OHMS_0, MAX31865_CALIBRATION_OHMS_0) max31865_0.temperature(MAX31865_SENSOR_OHMS_0, MAX31865_CALIBRATION_OHMS_0)
#else
max31865_1.temperature(MAX31865_SENSOR_OHMS_1, MAX31865_CALIBRATION_OHMS_1)
#endif #endif
); );
#endif #endif
@ -2309,7 +2292,7 @@ void Temperature::disable_all_heaters() {
WRITE_MAX6675(HIGH); // disable TT_MAX6675 WRITE_MAX6675(HIGH); // disable TT_MAX6675
const uint8_t fault = TERN0(MAX6675_IS_MAX31865, TERN_(HAS_MULTI_6675, hindex ? max31865_1.readFault() :) max31865_0.readFault()); const uint8_t fault = TERN0(MAX6675_0_IS_MAX31865, TERN_(HAS_MULTI_6675, hindex ? max31865_1.readFault() :) max31865_0.readFault());
if (DISABLED(IGNORE_THERMOCOUPLE_ERRORS) && (max6675_temp & MAX6675_ERROR_MASK) && fault) { if (DISABLED(IGNORE_THERMOCOUPLE_ERRORS) && (max6675_temp & MAX6675_ERROR_MASK) && fault) {
max6675_errors[hindex] += 1; max6675_errors[hindex] += 1;
@ -2363,7 +2346,7 @@ void Temperature::disable_all_heaters() {
max6675_errors[hindex] = 0; max6675_errors[hindex] = 0;
} }
#if ENABLED(MAX6675_IS_MAX31855) #if MAX6675_0_IS_MAX31855
if (max6675_temp & 0x00002000) max6675_temp |= 0xFFFFC000; // Support negative temperature if (max6675_temp & 0x00002000) max6675_temp |= 0xFFFFC000; // Support negative temperature
#endif #endif

View file

@ -222,7 +222,7 @@ HAS_L64XX = Arduino-L6470@0.8.0
src_filter=+<src/libs/L64XX> +<src/module/stepper/L64xx.cpp> +<src/gcode/feature/L6470> src_filter=+<src/libs/L64XX> +<src/module/stepper/L64xx.cpp> +<src/gcode/feature/L6470>
NEOPIXEL_LED = Adafruit NeoPixel@1.5.0 NEOPIXEL_LED = Adafruit NeoPixel@1.5.0
src_filter=+<src/feature/leds/neopixel.cpp> src_filter=+<src/feature/leds/neopixel.cpp>
MAX6675_IS_MAX31865 = Adafruit MAX31865 library@~1.1.0 MAX6675_._IS_MAX31865 = Adafruit MAX31865 library@~1.1.0
USES_LIQUIDCRYSTAL = LiquidCrystal@1.5.0 USES_LIQUIDCRYSTAL = LiquidCrystal@1.5.0
USES_LIQUIDCRYSTAL_I2C = marcoschwartz/LiquidCrystal_I2C@1.1.4 USES_LIQUIDCRYSTAL_I2C = marcoschwartz/LiquidCrystal_I2C@1.1.4
USES_LIQUIDTWI2 = LiquidTWI2@1.2.7 USES_LIQUIDTWI2 = LiquidTWI2@1.2.7