From 32f88165d2f37b170b3abb8fbd7ea922d919a040 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Mon, 9 Nov 2020 01:55:59 -0600 Subject: [PATCH] Add MAX6675_*_IS_MAX318*5 --- Marlin/src/inc/Conditionals_post.h | 9 ++- Marlin/src/inc/SanityCheck.h | 8 +-- Marlin/src/module/temperature.cpp | 91 ++++++++++++------------------ platformio.ini | 2 +- 4 files changed, 49 insertions(+), 61 deletions(-) diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h index 9eeb39f9a8..9fb3e53c4e 100644 --- a/Marlin/src/inc/Conditionals_post.h +++ b/Marlin/src/inc/Conditionals_post.h @@ -445,9 +445,9 @@ #define HEATER_0_MAX6675_TMAX 1024 #endif #if TEMP_SENSOR_0 == -5 - #define MAX6675_IS_MAX31865 1 + #define MAX6675_0_IS_MAX31865 1 #elif TEMP_SENSOR_0 == -3 - #define MAX6675_IS_MAX31855 1 + #define MAX6675_0_IS_MAX31855 1 #endif #elif TEMP_SENSOR_0 == -4 #define HEATER_0_USES_AD8495 1 @@ -473,6 +473,11 @@ #define HEATER_1_MAX6675_TMIN 0 #define HEATER_1_MAX6675_TMAX 1024 #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 == -5 #error "If MAX31865 Thermocouple (-5) is used for TEMP_SENSOR_1 then TEMP_SENSOR_0 must match." diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h index 73fa6e7cfa..89b3811905 100644 --- a/Marlin/src/inc/SanityCheck.h +++ b/Marlin/src/inc/SanityCheck.h @@ -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." #endif -#if MAX6675_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." +#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 if TEMP_SENSOR_0 is MAX31865." #endif -#if MAX6675_IS_MAX31865 && !(defined(MAX31865_SENSOR_OHMS_1) && defined(MAX31865_CALIBRATION_OHMS_1)) && TEMP_SENSOR_1 == -5 - #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." +#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 if TEMP_SENSOR_1 is MAX31865." #endif /** diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp index 2481ab76bf..c35c5a6bc4 100644 --- a/Marlin/src/module/temperature.cpp +++ b/Marlin/src/module/temperature.cpp @@ -44,24 +44,22 @@ #include "../lcd/extui/ui_api.h" #endif -#if MAX6675_IS_MAX31865 +#if MAX6675_0_IS_MAX31865 || MAX6675_1_IS_MAX31865 #include - #ifndef MAX31865_CS_PIN - #define MAX31865_CS_PIN MAX6675_SS_PIN // HW:49 SW:65 for example + #if MAX6675_0_IS_MAX31865 && !defined(MAX31865_CS_PIN) + #define MAX31865_CS_PIN MAX6675_SS_PIN #endif - #if TEMP_SENSOR_1 == -5 - #ifndef MAX31865_CS2_PIN - #define MAX31865_CS2_PIN MAX6675_SS2_PIN - #endif + #if MAX6675_1_IS_MAX31865 && !defined(MAX31865_CS2_PIN) + #define MAX31865_CS2_PIN MAX6675_SS2_PIN #endif #ifndef MAX31865_MOSI_PIN - #define MAX31865_MOSI_PIN MOSI_PIN // 63 + #define MAX31865_MOSI_PIN MOSI_PIN #endif #ifndef MAX31865_MISO_PIN - #define MAX31865_MISO_PIN MAX6675_DO_PIN // 42 + #define MAX31865_MISO_PIN MAX6675_DO_PIN #endif #ifndef MAX31865_SCK_PIN - #define MAX31865_SCK_PIN MAX6675_SCK_PIN // 40 + #define MAX31865_SCK_PIN MAX6675_SCK_PIN #endif Adafruit_MAX31865 max31865_0 = Adafruit_MAX31865(MAX31865_CS_PIN #if MAX31865_CS_PIN != MAX6675_SS_PIN @@ -70,16 +68,14 @@ , MAX31865_SCK_PIN #endif ); - #if TEMP_SENSOR_1 == -5 - #if MAX31865_CS2_PIN - Adafruit_MAX31865 max31865_1 = Adafruit_MAX31865(MAX31865_CS2_PIN - #if MAX31865_CS2_PIN != MAX6675_SS2_PIN - , MAX31865_MOSI_PIN // For software SPI also set MOSI/MISO/SCK - , MAX31865_MISO_PIN - , MAX31865_SCK_PIN - #endif - ); - #endif + #if MAX6675_1_IS_MAX31865 && PIN_EXISTS(MAX31865_CS2) + Adafruit_MAX31865 max31865_1 = Adafruit_MAX31865(MAX31865_CS2_PIN + #if MAX31865_CS2_PIN != MAX6675_SS2_PIN + , MAX31865_MOSI_PIN // For software SPI also set MOSI/MISO/SCK + , MAX31865_MISO_PIN + , MAX31865_SCK_PIN + #endif + ); #endif #endif @@ -1489,13 +1485,7 @@ void Temperature::manage_heater() { #if HEATER_0_USER_THERMISTOR return user_thermistor_to_deg_c(CTI_HOTEND_0, raw); #elif HEATER_0_USES_MAX6675 - return ( - #if MAX6675_IS_MAX31865 - max31865_0.temperature(MAX31865_SENSOR_OHMS_0, MAX31865_CALIBRATION_OHMS_0) - #else - raw * 0.25 - #endif - ); + return TERN(MAX6675_0_IS_MAX31865, max31865_0.temperature(MAX31865_SENSOR_OHMS_0, MAX31865_CALIBRATION_OHMS_0), raw * 0.25); #elif HEATER_0_USES_AD595 return TEMP_AD595(raw); #elif HEATER_0_USES_AD8495 @@ -1507,13 +1497,7 @@ void Temperature::manage_heater() { #if HEATER_1_USER_THERMISTOR return user_thermistor_to_deg_c(CTI_HOTEND_1, raw); #elif HEATER_1_USES_MAX6675 - return ( - #if TEMP_SENSOR_1 == -5 - max31865_1.temperature(MAX31865_SENSOR_OHMS_1, MAX31865_CALIBRATION_OHMS_1) - #else - raw * 0.25 - #endif - ); + return TERN(MAX6675_1_IS_MAX31865, max31865_1.temperature(MAX31865_SENSOR_OHMS_1, MAX31865_CALIBRATION_OHMS_1), raw * 0.25); #elif HEATER_1_USES_AD595 return TEMP_AD595(raw); #elif HEATER_1_USES_AD8495 @@ -1715,11 +1699,8 @@ void Temperature::updateTemperaturesFromRawValues() { */ void Temperature::init() { - TERN_(MAX6675_IS_MAX31865, max31865_0.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 + 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 EARLY_WATCHDOG // Flag that the thermalManager should be running @@ -2240,21 +2221,21 @@ void Temperature::disable_all_heaters() { #define MAX6675_HEAT_INTERVAL 250UL - #if MAX6675_IS_MAX31855 + #if MAX6675_0_IS_MAX31855 || MAX6675_1_IS_MAX31855 static uint32_t max6675_temp = 2000; #define MAX6675_ERROR_MASK 7 #define MAX6675_DISCARD_BITS 18 - #define MAX6675_SPEED_BITS 3 // (_BV(SPR1)) // clock ÷ 64 - #elif MAX6675_IS_MAX31865 - static uint16_t max6675_temp = 2000; //from datasheet 16 bits D15-D0 - #define MAX6675_ERROR_MASK 1 //D0 Bit not used - #define MAX6675_DISCARD_BITS 1 //data is in D15-D1 #define MAX6675_SPEED_BITS 3 // (_BV(SPR1)) // clock ÷ 64 + #elif MAX6675_0_IS_MAX31865 || MAX6675_1_IS_MAX31865 + static uint16_t max6675_temp = 2000; // From datasheet 16 bits D15-D0 + #define MAX6675_ERROR_MASK 1 // D0 Bit not used + #define MAX6675_DISCARD_BITS 1 // Data is in D15-D1 + #define MAX6675_SPEED_BITS 3 // (_BV(SPR1)) // clock ÷ 64 #else static uint16_t max6675_temp = 2000; #define MAX6675_ERROR_MASK 4 #define MAX6675_DISCARD_BITS 3 - #define MAX6675_SPEED_BITS 2 // (_BV(SPR0)) // clock ÷ 16 + #define MAX6675_SPEED_BITS 2 // (_BV(SPR0)) // clock ÷ 16 #endif // Return last-read value between readings @@ -2265,13 +2246,15 @@ void Temperature::disable_all_heaters() { next_max6675_ms[hindex] = ms + MAX6675_HEAT_INTERVAL; - #if MAX6675_IS_MAX31865 + #if MAX6675_0_IS_MAX31865 || MAX6675_1_IS_MAX31865 max6675_temp = int( #if HAS_MULTI_6675 hindex ? max31865_1.temperature(MAX31865_SENSOR_OHMS_1, MAX31865_CALIBRATION_OHMS_1) : 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) + #else + max31865_1.temperature(MAX31865_SENSOR_OHMS_1, MAX31865_CALIBRATION_OHMS_1) #endif ); #endif @@ -2285,13 +2268,13 @@ void Temperature::disable_all_heaters() { #endif #if HAS_MULTI_6675 - #define WRITE_MAX6675(V) do{ switch (hindex) { case 1: WRITE(MAX6675_SS2_PIN, V); break; default: WRITE(MAX6675_SS_PIN, V); } }while(0) - #define SET_OUTPUT_MAX6675() do{ switch (hindex) { case 1: SET_OUTPUT(MAX6675_SS2_PIN); break; default: SET_OUTPUT(MAX6675_SS_PIN); } }while(0) + #define WRITE_MAX6675(V) do{ switch (hindex) { case 1: WRITE(MAX6675_SS2_PIN, V); break; default: WRITE(MAX6675_SS_PIN, V); } }while(0) + #define SET_OUTPUT_MAX6675() do{ switch (hindex) { case 1: SET_OUTPUT(MAX6675_SS2_PIN); break; default: SET_OUTPUT(MAX6675_SS_PIN); } }while(0) #elif HEATER_1_USES_MAX6675 - #define WRITE_MAX6675(V) WRITE(MAX6675_SS2_PIN, V) + #define WRITE_MAX6675(V) WRITE(MAX6675_SS2_PIN, V) #define SET_OUTPUT_MAX6675() SET_OUTPUT(MAX6675_SS2_PIN) #else - #define WRITE_MAX6675(V) WRITE(MAX6675_SS_PIN, V) + #define WRITE_MAX6675(V) WRITE(MAX6675_SS_PIN, V) #define SET_OUTPUT_MAX6675() SET_OUTPUT(MAX6675_SS_PIN) #endif @@ -2309,7 +2292,7 @@ void Temperature::disable_all_heaters() { 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) { max6675_errors[hindex] += 1; @@ -2363,7 +2346,7 @@ void Temperature::disable_all_heaters() { max6675_errors[hindex] = 0; } - #if ENABLED(MAX6675_IS_MAX31855) + #if MAX6675_0_IS_MAX31855 if (max6675_temp & 0x00002000) max6675_temp |= 0xFFFFC000; // Support negative temperature #endif diff --git a/platformio.ini b/platformio.ini index 15b8d4c23a..360a02f420 100644 --- a/platformio.ini +++ b/platformio.ini @@ -222,7 +222,7 @@ HAS_L64XX = Arduino-L6470@0.8.0 src_filter=+ + + NEOPIXEL_LED = Adafruit NeoPixel@1.5.0 src_filter=+ -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_I2C = marcoschwartz/LiquidCrystal_I2C@1.1.4 USES_LIQUIDTWI2 = LiquidTWI2@1.2.7