Bump to head, configure auto-calibate
This commit is contained in:
@@ -37,6 +37,7 @@
|
||||
//#define FilamentSensor // Standard older TM3D runout sensor
|
||||
//#define lerdgeFilSensor // Newer inverted logic TM3D Runout Sensor
|
||||
|
||||
//#define AUTO_CALIBRATE // Conductive block and grounding to heater block for automatic hotend calibration
|
||||
|
||||
//////////////////////////////////DO not edit below here unless you know what youre doing! //////////////////////////////////
|
||||
|
||||
@@ -1374,13 +1375,13 @@
|
||||
// Gradually reduce leveling correction until a set height is reached,
|
||||
// at which point movement will be level to the machine's XY plane.
|
||||
// The height can be set with M420 Z<height>
|
||||
#define ENABLE_LEVELING_FADE_HEIGHT
|
||||
//#define ENABLE_LEVELING_FADE_HEIGHT
|
||||
|
||||
// For Cartesian machines, instead of dividing moves on mesh boundaries,
|
||||
// split up moves into short segments like a Delta. This follows the
|
||||
// contours of the bed more closely than edge-to-edge straight moves.
|
||||
//#define SEGMENT_LEVELED_MOVES
|
||||
//#define LEVELED_SEGMENT_LENGTH 5.0 // (mm) Length of all segments (except the last one)
|
||||
#define SEGMENT_LEVELED_MOVES
|
||||
#define LEVELED_SEGMENT_LENGTH 5.0 // (mm) Length of all segments (except the last one)
|
||||
|
||||
/**
|
||||
* Enable the G26 Mesh Validation Pattern tool.
|
||||
|
||||
+12
-10
@@ -743,7 +743,7 @@
|
||||
// Backlash Compensation
|
||||
// Adds extra movement to axes on direction-changes to account for backlash.
|
||||
//
|
||||
//#define BACKLASH_COMPENSATION
|
||||
#define BACKLASH_COMPENSATION
|
||||
#if ENABLED(BACKLASH_COMPENSATION)
|
||||
// Define values for backlash distance and correction.
|
||||
// If BACKLASH_GCODE is enabled these values are the defaults.
|
||||
@@ -755,11 +755,11 @@
|
||||
//#define BACKLASH_SMOOTHING_MM 3 // (mm)
|
||||
|
||||
// Add runtime configuration and tuning of backlash values (M425)
|
||||
//#define BACKLASH_GCODE
|
||||
#define BACKLASH_GCODE
|
||||
|
||||
#if ENABLED(BACKLASH_GCODE)
|
||||
// Measure the Z backlash when probing (G29) and set with "M425 Z"
|
||||
#define MEASURE_BACKLASH_WHEN_PROBING
|
||||
//#define MEASURE_BACKLASH_WHEN_PROBING
|
||||
|
||||
#if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
|
||||
// When measuring, the probe will move up to BACKLASH_MEASUREMENT_LIMIT
|
||||
@@ -785,7 +785,9 @@
|
||||
* Note: HOTEND_OFFSET and CALIBRATION_OBJECT_CENTER must be set to within
|
||||
* ±5mm of true values for G425 to succeed.
|
||||
*/
|
||||
//#define CALIBRATION_GCODE
|
||||
#if ENABLED(AUTO_CALIBRATE)
|
||||
#define CALIBRATION_GCODE
|
||||
#endif
|
||||
#if ENABLED(CALIBRATION_GCODE)
|
||||
|
||||
#define CALIBRATION_MEASUREMENT_RESOLUTION 0.01 // mm
|
||||
@@ -799,11 +801,11 @@
|
||||
#define CALIBRATION_NOZZLE_OUTER_DIAMETER 2.0 // mm
|
||||
|
||||
// Uncomment to enable reporting (required for "G425 V", but consumes PROGMEM).
|
||||
//#define CALIBRATION_REPORTING
|
||||
#define CALIBRATION_REPORTING
|
||||
|
||||
// The true location and dimension the cube/bolt/washer on the bed.
|
||||
#define CALIBRATION_OBJECT_CENTER { 264.0, -22.0, -2.0 } // mm
|
||||
#define CALIBRATION_OBJECT_DIMENSIONS { 10.0, 10.0, 10.0 } // mm
|
||||
#define CALIBRATION_OBJECT_CENTER { 208.0, 28.0, 14.5 } // mm
|
||||
#define CALIBRATION_OBJECT_DIMENSIONS { 12.55, 12.55, 3.0 } // mm
|
||||
|
||||
// Comment out any sides which are unreachable by the probe. For best
|
||||
// auto-calibration results, all sides must be reachable.
|
||||
@@ -814,12 +816,12 @@
|
||||
|
||||
// Probing at the exact top center only works if the center is flat. If
|
||||
// probing on a screwhead or hollow washer, probe near the edges.
|
||||
//#define CALIBRATION_MEASURE_AT_TOP_EDGES
|
||||
#define CALIBRATION_MEASURE_AT_TOP_EDGES
|
||||
|
||||
// Define pin which is read during calibration
|
||||
#ifndef CALIBRATION_PIN
|
||||
#define CALIBRATION_PIN -1 // Override in pins.h or set to -1 to use your Z endstop
|
||||
#define CALIBRATION_PIN_INVERTING false // Set to true to invert the pin
|
||||
#define CALIBRATION_PIN 58 // Override in pins.h or set to -1 to use your Z endstop
|
||||
#define CALIBRATION_PIN_INVERTING true // Set to true to invert the pin
|
||||
//#define CALIBRATION_PIN_PULLDOWN
|
||||
#define CALIBRATION_PIN_PULLUP
|
||||
#endif
|
||||
|
||||
+2
-2
@@ -28,7 +28,7 @@
|
||||
/**
|
||||
* Marlin release version identifier
|
||||
*/
|
||||
#define SHORT_BUILD_VERSION "2.0.x_TR21"
|
||||
#define SHORT_BUILD_VERSION "2.0.2_TR22"
|
||||
|
||||
/**
|
||||
* Verbose version identifier which should contain a reference to the location
|
||||
@@ -41,7 +41,7 @@
|
||||
* here we define this default string as the date where the latest release
|
||||
* version was tagged.
|
||||
*/
|
||||
#define STRING_DISTRIBUTION_DATE "2019-11-19"
|
||||
#define STRING_DISTRIBUTION_DATE "2020-01-26"
|
||||
|
||||
/**
|
||||
* Defines a generic printer name to be output to the LCD after booting Marlin.
|
||||
|
||||
@@ -232,6 +232,22 @@ void setup_endstop_interrupts() {
|
||||
pciSetup(Z3_MIN_PIN);
|
||||
#endif
|
||||
#endif
|
||||
#if HAS_Z4_MAX
|
||||
#if (digitalPinToInterrupt(Z4_MAX_PIN) != NOT_AN_INTERRUPT)
|
||||
_ATTACH(Z4_MAX_PIN);
|
||||
#else
|
||||
static_assert(digitalPinHasPCICR(Z4_MAX_PIN), "Z4_MAX_PIN is not interrupt-capable");
|
||||
pciSetup(Z4_MAX_PIN);
|
||||
#endif
|
||||
#endif
|
||||
#if HAS_Z4_MIN
|
||||
#if (digitalPinToInterrupt(Z4_MIN_PIN) != NOT_AN_INTERRUPT)
|
||||
_ATTACH(Z4_MIN_PIN);
|
||||
#else
|
||||
static_assert(digitalPinHasPCICR(Z4_MIN_PIN), "Z4_MIN_PIN is not interrupt-capable");
|
||||
pciSetup(Z4_MIN_PIN);
|
||||
#endif
|
||||
#endif
|
||||
#if HAS_Z_MIN_PROBE_PIN
|
||||
#if (digitalPinToInterrupt(Z_MIN_PROBE_PIN) != NOT_AN_INTERRUPT)
|
||||
_ATTACH(Z_MIN_PROBE_PIN);
|
||||
|
||||
@@ -279,14 +279,25 @@ enum ClockSource2 : char {
|
||||
*/
|
||||
|
||||
// Determine which harware PWMs are already in use
|
||||
#define _PWM_CHK_FAN_B(P) (P == E0_AUTO_FAN_PIN || P == E1_AUTO_FAN_PIN || P == E2_AUTO_FAN_PIN || P == E3_AUTO_FAN_PIN || P == E4_AUTO_FAN_PIN || P == E5_AUTO_FAN_PIN || P == E6_AUTO_FAN_PIN || P == E7_AUTO_FAN_PIN || P == CHAMBER_AUTO_FAN_PIN)
|
||||
#if PIN_EXISTS(CONTROLLER_FAN)
|
||||
#define PWM_CHK_FAN_B(P) (P == CONTROLLER_FAN_PIN || P == E0_AUTO_FAN_PIN || P == E1_AUTO_FAN_PIN || P == E2_AUTO_FAN_PIN || P == E3_AUTO_FAN_PIN || P == E4_AUTO_FAN_PIN || P == E5_AUTO_FAN_PIN || P == CHAMBER_AUTO_FAN_PIN)
|
||||
#define PWM_CHK_FAN_B(P) (_PWM_CHK_FAN_B(P) || P == CONTROLLER_FAN_PIN)
|
||||
#else
|
||||
#define PWM_CHK_FAN_B(P) (P == E0_AUTO_FAN_PIN || P == E1_AUTO_FAN_PIN || P == E2_AUTO_FAN_PIN || P == E3_AUTO_FAN_PIN || P == E4_AUTO_FAN_PIN || P == E5_AUTO_FAN_PIN || P == CHAMBER_AUTO_FAN_PIN)
|
||||
#define PWM_CHK_FAN_B(P) _PWM_CHK_FAN_B(P)
|
||||
#endif
|
||||
|
||||
#if ANY_PIN(FAN, FAN1, FAN2)
|
||||
#if PIN_EXISTS(FAN2)
|
||||
#if ANY_PIN(FAN, FAN1, FAN2, FAN3, FAN4, FAN5, FAN6, FAN7)
|
||||
#if PIN_EXISTS(FAN7)
|
||||
#define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN || P == FAN3_PIN || P == FAN4_PIN || P == FAN5_PIN || P == FAN6_PIN || P == FAN7_PIN)
|
||||
#elif PIN_EXISTS(FAN6)
|
||||
#define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN || P == FAN3_PIN || P == FAN4_PIN || P == FAN5_PIN || P == FAN6_PIN)
|
||||
#elif PIN_EXISTS(FAN5)
|
||||
#define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN || P == FAN3_PIN || P == FAN4_PIN || P == FAN5_PIN)
|
||||
#elif PIN_EXISTS(FAN4)
|
||||
#define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN || P == FAN3_PIN || P == FAN4_PIN)
|
||||
#elif PIN_EXISTS(FAN3)
|
||||
#define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN || P == FAN3_PIN)
|
||||
#elif PIN_EXISTS(FAN2)
|
||||
#define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN || P == FAN2_PIN)
|
||||
#elif PIN_EXISTS(FAN1)
|
||||
#define PWM_CHK_FAN_A(P) (P == FAN0_PIN || P == FAN1_PIN)
|
||||
|
||||
@@ -59,3 +59,7 @@
|
||||
#if HAS_TRINAMIC && ENABLED(ENDSTOP_INTERRUPTS_FEATURE)
|
||||
#error "TMCStepper includes SoftwareSerial.h which is incompatible with ENDSTOP_INTERRUPTS_FEATURE. Disable ENDSTOP_INTERRUPTS_FEATURE to continue."
|
||||
#endif
|
||||
|
||||
#if TMC_HAS_SW_SERIAL && ENABLED(MONITOR_DRIVER_STATUS)
|
||||
#error "MONITOR_DRIVER_STATUS causes performance issues when used with SoftwareSerial-connected drivers. Disable MONITOR_DRIVER_STATUS or use hardware serial to continue."
|
||||
#endif
|
||||
|
||||
@@ -231,10 +231,10 @@ static void err_is_interrupt() { SERIAL_ECHOPGM(" compare interrupt enabled"
|
||||
static void err_prob_interrupt() { SERIAL_ECHOPGM(" overflow interrupt enabled"); }
|
||||
static void print_is_also_tied() { SERIAL_ECHOPGM(" is also tied to this pin"); SERIAL_ECHO_SP(14); }
|
||||
|
||||
void com_print(uint8_t N, uint8_t Z) {
|
||||
inline void com_print(const uint8_t N, const uint8_t Z) {
|
||||
const uint8_t *TCCRA = (uint8_t*)TCCR_A(N);
|
||||
SERIAL_ECHOPGM(" COM");
|
||||
SERIAL_CHAR('0' + N, 'A' + Z);
|
||||
SERIAL_CHAR('0' + N, Z);
|
||||
SERIAL_ECHOPAIR(": ", int((*TCCRA >> (6 - Z * 2)) & 0x03));
|
||||
}
|
||||
|
||||
|
||||
@@ -77,6 +77,12 @@ void setup_endstop_interrupts() {
|
||||
#if HAS_Z3_MIN
|
||||
_ATTACH(Z3_MIN_PIN);
|
||||
#endif
|
||||
#if HAS_Z4_MAX
|
||||
_ATTACH(Z4_MAX_PIN);
|
||||
#endif
|
||||
#if HAS_Z4_MIN
|
||||
_ATTACH(Z4_MIN_PIN);
|
||||
#endif
|
||||
#if HAS_Z_MIN_PROBE_PIN
|
||||
_ATTACH(Z_MIN_PROBE_PIN);
|
||||
#endif
|
||||
|
||||
@@ -111,6 +111,9 @@ void HAL_idletask() {
|
||||
#if BOTH(WIFISUPPORT, OTASUPPORT)
|
||||
OTA_handle();
|
||||
#endif
|
||||
#if ENABLED(ESP3D_WIFISUPPORT)
|
||||
esp3dlib.idletask();
|
||||
#endif
|
||||
}
|
||||
|
||||
void HAL_clear_reset_source() { }
|
||||
|
||||
@@ -72,6 +72,12 @@ void setup_endstop_interrupts() {
|
||||
#if HAS_Z3_MIN
|
||||
_ATTACH(Z3_MIN_PIN);
|
||||
#endif
|
||||
#if HAS_Z4_MAX
|
||||
_ATTACH(Z4_MAX_PIN);
|
||||
#endif
|
||||
#if HAS_Z4_MIN
|
||||
_ATTACH(Z4_MIN_PIN);
|
||||
#endif
|
||||
#if HAS_Z_MIN_PROBE_PIN
|
||||
_ATTACH(Z_MIN_PROBE_PIN);
|
||||
#endif
|
||||
|
||||
@@ -93,7 +93,7 @@ void setup_endstop_interrupts() {
|
||||
_ATTACH(Z2_MIN_PIN);
|
||||
#endif
|
||||
#if HAS_Z3_MAX
|
||||
#if !LPC1768_PIN_INTERRUPT_M(Z3_MIN_PIN)
|
||||
#if !LPC1768_PIN_INTERRUPT_M(Z3_MAX_PIN)
|
||||
#error "Z3_MIN_PIN is not INTERRUPT-capable."
|
||||
#endif
|
||||
_ATTACH(Z3_MAX_PIN);
|
||||
@@ -104,6 +104,18 @@ void setup_endstop_interrupts() {
|
||||
#endif
|
||||
_ATTACH(Z3_MIN_PIN);
|
||||
#endif
|
||||
#if HAS_Z4_MAX
|
||||
#if !LPC1768_PIN_INTERRUPT_M(Z4_MAX_PIN)
|
||||
#error "Z4_MIN_PIN is not INTERRUPT-capable."
|
||||
#endif
|
||||
_ATTACH(Z4_MAX_PIN);
|
||||
#endif
|
||||
#if HAS_Z4_MIN
|
||||
#if !LPC1768_PIN_INTERRUPT_M(Z4_MIN_PIN)
|
||||
#error "Z4_MIN_PIN is not INTERRUPT-capable."
|
||||
#endif
|
||||
_ATTACH(Z4_MIN_PIN);
|
||||
#endif
|
||||
#if HAS_Z_MIN_PROBE_PIN
|
||||
#if !LPC1768_PIN_INTERRUPT_M(Z_MIN_PROBE_PIN)
|
||||
#error "Z_MIN_PROBE_PIN is not INTERRUPT-capable."
|
||||
|
||||
@@ -46,6 +46,10 @@
|
||||
#error "TEMP_4_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
|
||||
#elif _OLD_TEMP_PIN(TEMP_5)
|
||||
#error "TEMP_5_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
|
||||
#elif _OLD_TEMP_PIN(TEMP_6)
|
||||
#error "TEMP_6_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
|
||||
#elif _OLD_TEMP_PIN(TEMP_7)
|
||||
#error "TEMP_7_PIN must be defined using the Pn_nn or Pn_nn_An format. (See the included pins files)."
|
||||
#endif
|
||||
#undef _OLD_TEMP_PIN
|
||||
|
||||
|
||||
@@ -20,8 +20,10 @@
|
||||
*
|
||||
*/
|
||||
|
||||
// adapted from I2C/master/master.c example
|
||||
// https://www-users.cs.york.ac.uk/~pcc/MCP/HAPR-Course-web/CMSIS/examples/html/master_8c_source.html
|
||||
/**
|
||||
* digipot_mcp4451_I2C_routines.c
|
||||
* Adapted from https://www-users.cs.york.ac.uk/~pcc/MCP/HAPR-Course-web/CMSIS/examples/html/master_8c_source.html
|
||||
*/
|
||||
|
||||
#ifdef TARGET_LPC1768
|
||||
|
||||
@@ -29,12 +31,12 @@
|
||||
|
||||
#if MB(MKS_SBASE)
|
||||
|
||||
#include "digipot_mcp4451_I2C_routines.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include "digipot_mcp4451_I2C_routines.h"
|
||||
|
||||
// These two routines are exact copies of the lpc17xx_i2c.c routines. Couldn't link to
|
||||
// to the lpc17xx_i2c.c routines so had to copy them into this file & rename them.
|
||||
|
||||
@@ -60,7 +62,6 @@ static void _I2C_Stop(LPC_I2C_TypeDef *I2Cx) {
|
||||
I2Cx->I2CONCLR = I2C_I2CONCLR_SIC;
|
||||
}
|
||||
|
||||
PINSEL_CFG_Type PinCfg;
|
||||
I2C_M_SETUP_Type transferMCfg;
|
||||
|
||||
#define I2C_status (LPC_I2C1->I2STAT & I2C_STAT_CODE_BITMASK)
|
||||
@@ -89,41 +90,6 @@ uint8_t digipot_mcp4451_start(uint8_t sla) { // send slave address and write bi
|
||||
return 1;
|
||||
}
|
||||
|
||||
void digipot_mcp4451_init() {
|
||||
/**
|
||||
* Init I2C pin connect
|
||||
*/
|
||||
PinCfg.OpenDrain = 0;
|
||||
PinCfg.Pinmode = 0;
|
||||
#if USEDI2CDEV_M == 0
|
||||
PinCfg.Funcnum = 1;
|
||||
PinCfg.Pinnum = 27;
|
||||
PinCfg.Portnum = 0;
|
||||
PINSEL_ConfigPin(&PinCfg); // SDA0 / D57 AUX-1
|
||||
PinCfg.Pinnum = 28;
|
||||
PINSEL_ConfigPin(&PinCfg); // SCL0 / D58 AUX-1
|
||||
#elif USEDI2CDEV_M == 1
|
||||
PinCfg.Funcnum = 3;
|
||||
PinCfg.Pinnum = 0;
|
||||
PinCfg.Portnum = 0;
|
||||
PINSEL_ConfigPin(&PinCfg); // SDA1 / D20 SCA
|
||||
PinCfg.Pinnum = 1;
|
||||
PINSEL_ConfigPin(&PinCfg); // SCL1 / D21 SCL
|
||||
#elif USEDI2CDEV_M == 2
|
||||
PinCfg.Funcnum = 2;
|
||||
PinCfg.Pinnum = 10;
|
||||
PinCfg.Portnum = 0;
|
||||
PINSEL_ConfigPin(&PinCfg); // SDA2 / D38 X_ENABLE_PIN
|
||||
PinCfg.Pinnum = 11;
|
||||
PINSEL_ConfigPin(&PinCfg); // SCL2 / D55 X_DIR_PIN
|
||||
#endif
|
||||
// Initialize I2C peripheral
|
||||
I2C_Init(I2CDEV_M, 400000); // hardwired to 400KHz bit rate, 100KHz is the other option
|
||||
|
||||
// Enable Master I2C operation
|
||||
I2C_Cmd(I2CDEV_M, I2C_MASTER_MODE, ENABLE);
|
||||
}
|
||||
|
||||
uint8_t digipot_mcp4451_send_byte(uint8_t data) {
|
||||
LPC_I2C1->I2DAT = data & I2C_I2DAT_BITMASK; // transmit data
|
||||
LPC_I2C1->I2CONSET = I2C_I2CONSET_AA;
|
||||
|
||||
@@ -21,20 +21,10 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
// adapted from I2C/master/master.c example
|
||||
// https://www-users.cs.york.ac.uk/~pcc/MCP/HAPR-Course-web/CMSIS/examples/html/master_8c_source.html
|
||||
|
||||
#define USEDI2CDEV_M 1 // use I2C1 controller
|
||||
|
||||
#if USEDI2CDEV_M == 0
|
||||
#define I2CDEV_M LPC_I2C0
|
||||
#elif USEDI2CDEV_M == 1
|
||||
#define I2CDEV_M LPC_I2C1
|
||||
#elif USEDI2CDEV_M == 2
|
||||
#define I2CDEV_M LPC_I2C2
|
||||
#else
|
||||
#error "Master I2C device not defined!"
|
||||
#endif
|
||||
/**
|
||||
* digipot_mcp4451_I2C_routines.h
|
||||
* Adapted from https://www-users.cs.york.ac.uk/~pcc/MCP/HAPR-Course-web/CMSIS/examples/html/master_8c_source.html
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -43,9 +33,9 @@
|
||||
#include <lpc17xx_i2c.h>
|
||||
#include <lpc17xx_pinsel.h>
|
||||
#include <lpc17xx_libcfg_default.h>
|
||||
#include "i2c_util.h"
|
||||
|
||||
uint8_t digipot_mcp4451_start(uint8_t sla);
|
||||
void digipot_mcp4451_init();
|
||||
uint8_t digipot_mcp4451_send_byte(uint8_t data);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
/**
|
||||
* Marlin 3D Printer Firmware
|
||||
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||
*
|
||||
* Based on Sprinter and grbl.
|
||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* HAL_LPC1768/include/i2c_util.c
|
||||
*/
|
||||
|
||||
#ifdef TARGET_LPC1768
|
||||
|
||||
#include "i2c_util.h"
|
||||
|
||||
#define U8G_I2C_OPT_FAST 16 // from u8g.h
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void configure_i2c(const uint8_t clock_option) {
|
||||
/**
|
||||
* Init I2C pin connect
|
||||
*/
|
||||
PINSEL_CFG_Type PinCfg;
|
||||
PinCfg.OpenDrain = 0;
|
||||
PinCfg.Pinmode = 0;
|
||||
PinCfg.Portnum = 0;
|
||||
#if I2C_MASTER_ID == 0
|
||||
PinCfg.Funcnum = 1;
|
||||
PinCfg.Pinnum = 27; // SDA0 / D57 AUX-1 ... SCL0 / D58 AUX-1
|
||||
#elif I2C_MASTER_ID == 1
|
||||
PinCfg.Funcnum = 3;
|
||||
PinCfg.Pinnum = 0; // SDA1 / D20 SCA ... SCL1 / D21 SCL
|
||||
#elif I2C_MASTER_ID == 2
|
||||
PinCfg.Funcnum = 2;
|
||||
PinCfg.Pinnum = 10; // SDA2 / D38 X_ENABLE_PIN ... SCL2 / D55 X_DIR_PIN
|
||||
#endif
|
||||
PINSEL_ConfigPin(&PinCfg);
|
||||
PinCfg.Pinnum += 1;
|
||||
PINSEL_ConfigPin(&PinCfg);
|
||||
|
||||
// Initialize I2C peripheral
|
||||
I2C_Init(I2CDEV_M, (clock_option & U8G_I2C_OPT_FAST) ? 400000: 100000); // LCD data rates
|
||||
|
||||
// Enable Master I2C operation
|
||||
I2C_Cmd(I2CDEV_M, I2C_MASTER_MODE, ENABLE);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // TARGET_LPC1768
|
||||
@@ -0,0 +1,56 @@
|
||||
/**
|
||||
* Marlin 3D Printer Firmware
|
||||
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||
*
|
||||
* Based on Sprinter and grbl.
|
||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
/**
|
||||
* HAL_LPC1768/include/i2c_util.h
|
||||
*/
|
||||
|
||||
#include "../../../inc/MarlinConfigPre.h"
|
||||
|
||||
#ifndef I2C_MASTER_ID
|
||||
#define I2C_MASTER_ID 1
|
||||
#endif
|
||||
|
||||
#if I2C_MASTER_ID == 0
|
||||
#define I2CDEV_M LPC_I2C0
|
||||
#elif I2C_MASTER_ID == 1
|
||||
#define I2CDEV_M LPC_I2C1
|
||||
#elif I2C_MASTER_ID == 2
|
||||
#define I2CDEV_M LPC_I2C2
|
||||
#else
|
||||
#error "Master I2C device not defined!"
|
||||
#endif
|
||||
|
||||
#include <lpc17xx_i2c.h>
|
||||
#include <lpc17xx_pinsel.h>
|
||||
#include <lpc17xx_libcfg_default.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void configure_i2c(const uint8_t clock_option);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
@@ -25,25 +25,21 @@
|
||||
|
||||
#ifdef TARGET_LPC1768
|
||||
|
||||
#include "../include/i2c_util.h"
|
||||
#include "../../../core/millis_t.h"
|
||||
|
||||
extern int millis();
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <lpc17xx_i2c.h>
|
||||
#include <lpc17xx_pinsel.h>
|
||||
#include <lpc17xx_libcfg_default.h>
|
||||
|
||||
#include "../../../core/millis_t.h"
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// These two routines are exact copies of the lpc17xx_i2c.c routines. Couldn't link to
|
||||
// to the lpc17xx_i2c.c routines so had to copy them into this file & rename them.
|
||||
|
||||
static uint32_t _I2C_Start (LPC_I2C_TypeDef *I2Cx) {
|
||||
static uint32_t _I2C_Start(LPC_I2C_TypeDef *I2Cx) {
|
||||
// Reset STA, STO, SI
|
||||
I2Cx->I2CONCLR = I2C_I2CONCLR_SIC|I2C_I2CONCLR_STOC|I2C_I2CONCLR_STAC;
|
||||
|
||||
@@ -67,30 +63,16 @@ static void _I2C_Stop (LPC_I2C_TypeDef *I2Cx) {
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define U8G_I2C_OPT_FAST 16 // from u8g.h
|
||||
|
||||
#define USEDI2CDEV_M 1
|
||||
|
||||
#define I2CDEV_S_ADDR 0x78 // from SSD1306 //actual address is 0x3C - shift left 1 with LSB set to 0 to indicate write
|
||||
|
||||
#define BUFFER_SIZE 0x1 // only do single byte transfers with LCDs
|
||||
|
||||
#if (USEDI2CDEV_M == 0)
|
||||
#define I2CDEV_M LPC_I2C0
|
||||
#elif (USEDI2CDEV_M == 1)
|
||||
#define I2CDEV_M LPC_I2C1
|
||||
#elif (USEDI2CDEV_M == 2)
|
||||
#define I2CDEV_M LPC_I2C2
|
||||
#else
|
||||
#error "Master I2C device not defined!"
|
||||
#endif
|
||||
|
||||
PINSEL_CFG_Type PinCfg;
|
||||
I2C_M_SETUP_Type transferMCfg;
|
||||
|
||||
#define I2C_status (LPC_I2C1->I2STAT & I2C_STAT_CODE_BITMASK)
|
||||
|
||||
uint8_t u8g_i2c_start(uint8_t sla) { // send slave address and write bit
|
||||
// Send slave address and write bit
|
||||
uint8_t u8g_i2c_start(const uint8_t sla) {
|
||||
// Sometimes TX data ACK or NAK status is returned. That mean the start state didn't
|
||||
// happen which means only the value of the slave address was send. Keep looping until
|
||||
// the slave address and write bit are actually sent.
|
||||
@@ -114,44 +96,9 @@ uint8_t u8g_i2c_start(uint8_t sla) { // send slave address and write bit
|
||||
return 1;
|
||||
}
|
||||
|
||||
void u8g_i2c_init(uint8_t clock_option) {
|
||||
|
||||
/**
|
||||
* Init I2C pin connect
|
||||
*/
|
||||
PinCfg.OpenDrain = 0;
|
||||
PinCfg.Pinmode = 0;
|
||||
#if ((USEDI2CDEV_M == 0))
|
||||
PinCfg.Funcnum = 1;
|
||||
PinCfg.Pinnum = 27;
|
||||
PinCfg.Portnum = 0;
|
||||
PINSEL_ConfigPin(&PinCfg); // SDA0 / D57 AUX-1
|
||||
PinCfg.Pinnum = 28;
|
||||
PINSEL_ConfigPin(&PinCfg); // SCL0 / D58 AUX-1
|
||||
#endif
|
||||
#if ((USEDI2CDEV_M == 1))
|
||||
PinCfg.Funcnum = 3;
|
||||
PinCfg.Pinnum = 0;
|
||||
PinCfg.Portnum = 0;
|
||||
PINSEL_ConfigPin(&PinCfg); // SDA1 / D20 SCA
|
||||
PinCfg.Pinnum = 1;
|
||||
PINSEL_ConfigPin(&PinCfg); // SCL1 / D21 SCL
|
||||
#endif
|
||||
#if ((USEDI2CDEV_M == 2))
|
||||
PinCfg.Funcnum = 2;
|
||||
PinCfg.Pinnum = 10;
|
||||
PinCfg.Portnum = 0;
|
||||
PINSEL_ConfigPin(&PinCfg); // SDA2 / D38 X_ENABLE_PIN
|
||||
PinCfg.Pinnum = 11;
|
||||
PINSEL_ConfigPin(&PinCfg); // SCL2 / D55 X_DIR_PIN
|
||||
#endif
|
||||
// Initialize I2C peripheral
|
||||
I2C_Init(I2CDEV_M, (clock_option & U8G_I2C_OPT_FAST) ? 400000: 100000); // LCD data rates
|
||||
|
||||
// Enable Master I2C operation
|
||||
I2C_Cmd(I2CDEV_M, I2C_MASTER_MODE, ENABLE);
|
||||
|
||||
u8g_i2c_start(0); // send slave address and write bit
|
||||
void u8g_i2c_init(const uint8_t clock_option) {
|
||||
configure_i2c(clock_option);
|
||||
u8g_i2c_start(0); // Send slave address and write bit
|
||||
}
|
||||
|
||||
uint8_t u8g_i2c_send_byte(uint8_t data) {
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
void u8g_i2c_init(uint8_t options);
|
||||
uint8_t u8g_i2c_wait(uint8_t mask, uint8_t pos);
|
||||
void u8g_i2c_init(const uint8_t clock_options);
|
||||
//uint8_t u8g_i2c_wait(uint8_t mask, uint8_t pos);
|
||||
uint8_t u8g_i2c_start(uint8_t sla);
|
||||
uint8_t u8g_i2c_send_byte(uint8_t data);
|
||||
void u8g_i2c_stop();
|
||||
|
||||
@@ -86,8 +86,6 @@
|
||||
#define I2C_CMD_MODE 0x000
|
||||
#define I2C_DATA_MODE 0x040
|
||||
|
||||
//#define U8G_I2C_OPT_FAST 16
|
||||
|
||||
uint8_t u8g_com_ssd_I2C_start_sequence(u8g_t *u8g) {
|
||||
/* are we requested to set the a0 state? */
|
||||
if (u8g->pin_list[U8G_PI_SET_A0] == 0) return 1;
|
||||
|
||||
@@ -1,254 +0,0 @@
|
||||
/**
|
||||
* Marlin 3D Printer Firmware
|
||||
* Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||
*
|
||||
* Based on Sprinter and grbl.
|
||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Based on U8G2 code - u8x8_byte.c
|
||||
*
|
||||
* Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/)
|
||||
*
|
||||
* Copyright (c) 2016, olikraus@gmail.com
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without modification,
|
||||
* are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice, this list
|
||||
* of conditions and the following disclaimer.
|
||||
*
|
||||
* * Redistributions in binary form must reproduce the above copyright notice, this
|
||||
* list of conditions and the following disclaimer in the documentation and/or other
|
||||
* materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Software i2c,
|
||||
* ignores ACK response (which is anyway not provided by some displays)
|
||||
* also does not allow reading from the device
|
||||
*/
|
||||
|
||||
#ifdef TARGET_LPC1768
|
||||
|
||||
#include "../../inc/MarlinConfigPre.h"
|
||||
|
||||
#if HAS_GRAPHICAL_LCD
|
||||
|
||||
#include <U8glib.h>
|
||||
|
||||
//void pinMode(int16_t pin, uint8_t mode);
|
||||
//void digitalWrite(int16_t pin, uint8_t pin_status);
|
||||
|
||||
|
||||
#define I2C_SLA (0x3C*2)
|
||||
//#define I2C_CMD_MODE 0x080
|
||||
#define I2C_CMD_MODE 0x000
|
||||
#define I2C_DATA_MODE 0x040
|
||||
|
||||
//static uint8_t I2C_speed; // 3 - 400KHz, 13 - 100KHz
|
||||
//#define SPEED_400KHz 3
|
||||
//#define SPEED_100KHz 13
|
||||
|
||||
// #define U8G_I2C_OPT_FAST 16
|
||||
|
||||
uint8_t SCL_pin_HAL_LPC1768_sw_I2C, SCL_port_HAL_LPC1768_sw_I2C, SDA_pin_HAL_LPC1768_sw_I2C, SDA_port_HAL_LPC1768_sw_I2C;
|
||||
|
||||
#define SPI_SPEED 2 //20: 200KHz 5:750KHz 2:3-4MHz
|
||||
|
||||
uint8_t u8g_i2c_send_byte_sw(uint8_t data) {
|
||||
for (uint8_t i = 0; i < 9; i++) { // 1 extra bit for the ack/nak
|
||||
|
||||
if (val & 0x80)
|
||||
for (uint8_t j = 0; j < SPI_SPEED; j++) {
|
||||
LPC_GPIO(SDA_port_HAL_LPC1768_sw_I2C)->FIOSET = LPC_PIN(SDA_pin_HAL_LPC1768_sw_I2C);
|
||||
LPC_GPIO(SDA_port_HAL_LPC1768_sw_I2C)->FIOSET = LPC_PIN(SDA_pin_HAL_LPC1768_sw_I2C);
|
||||
LPC_GPIO(SDA_port_HAL_LPC1768_sw_I2C)->FIOSET = LPC_PIN(SDA_pin_HAL_LPC1768_sw_I2C);
|
||||
}
|
||||
else
|
||||
for (uint8_t j = 0; j < SPI_SPEED; j++) {
|
||||
LPC_GPIO(SDA_port_HAL_LPC1768_sw_I2C)->FIOCLR = LPC_PIN(SDA_pin_HAL_LPC1768_sw_I2C);
|
||||
LPC_GPIO(SDA_port_HAL_LPC1768_sw_I2C)->FIOCLR = LPC_PIN(SDA_pin_HAL_LPC1768_sw_I2C);
|
||||
LPC_GPIO(SDA_port_HAL_LPC1768_sw_I2C)->FIOCLR = LPC_PIN(SDA_pin_HAL_LPC1768_sw_I2C);
|
||||
}
|
||||
|
||||
for (uint8_t j = 0; j < SPI_SPEED; j++) {
|
||||
LPC_GPIO(SCL_port_HAL_LPC1768_sw_I2C)->FIOSET = LPC_PIN(SCL_pin_HAL_LPC1768_sw_I2C);
|
||||
LPC_GPIO(SCL_port_HAL_LPC1768_sw_I2C)->FIOSET = LPC_PIN(SCL_pin_HAL_LPC1768_sw_I2C);
|
||||
LPC_GPIO(SCL_port_HAL_LPC1768_sw_I2C)->FIOSET = LPC_PIN(SCL_pin_HAL_LPC1768_sw_I2C);
|
||||
LPC_GPIO(SCL_port_HAL_LPC1768_sw_I2C)->FIOSET = LPC_PIN(SCL_pin_HAL_LPC1768_sw_I2C);
|
||||
LPC_GPIO(SCL_port_HAL_LPC1768_sw_I2C)->FIOSET = LPC_PIN(SCL_pin_HAL_LPC1768_sw_I2C);
|
||||
}
|
||||
|
||||
for (uint8_t j = 0; j < SPI_SPEED; j++) {
|
||||
LPC_GPIO(SCL_port_HAL_LPC1768_sw_I2C)->FIOCLR = LPC_PIN(SCL_pin_HAL_LPC1768_sw_I2C);
|
||||
LPC_GPIO(SCL_port_HAL_LPC1768_sw_I2C)->FIOCLR = LPC_PIN(SCL_pin_HAL_LPC1768_sw_I2C);
|
||||
}
|
||||
val <<= 1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
uint8_t u8g_i2c_start_sw(uint8_t sla) { // assert start condition and then send slave address with write bit
|
||||
/* send the start condition, both lines go from 1 to 0 */
|
||||
|
||||
LPC_GPIO(SDA_port_HAL_LPC1768_sw_I2C)->FIOCLR = LPC_PIN(SDA_pin_HAL_LPC1768_sw_I2C);
|
||||
LPC_GPIO(SCL_port_HAL_LPC1768_sw_I2C)->FIOCLR = LPC_PIN(SCL_pin_HAL_LPC1768_sw_I2C);
|
||||
DELAY_US(2);
|
||||
LPC_GPIO(SCL_port_HAL_LPC1768_sw_I2C)->FIOSET = LPC_PIN(SCL_pin_HAL_LPC1768_sw_I2C);
|
||||
DELAY_US(2);
|
||||
LPC_GPIO(SDA_port_HAL_LPC1768_sw_I2C)->FIOSET = LPC_PIN(SDA_pin_HAL_LPC1768_sw_I2C);
|
||||
DELAY_US(2);
|
||||
LPC_GPIO(SDA_port_HAL_LPC1768_sw_I2C)->FIOCLR = LPC_PIN(SDA_pin_HAL_LPC1768_sw_I2C);
|
||||
DELAY_US(2);
|
||||
LPC_GPIO(SCL_port_HAL_LPC1768_sw_I2C)->FIOCLR = LPC_PIN(SCL_pin_HAL_LPC1768_sw_I2C);
|
||||
|
||||
u8g_i2c_send_byte_sw(I2C_SLA); // send slave address with write bit
|
||||
}
|
||||
|
||||
|
||||
void u8g_i2c_stop_sw() { }
|
||||
|
||||
void u8g_i2c_init_sw(uint8_t clock_option) { u8g_i2c_start(0); } // send slave address and write bit
|
||||
|
||||
uint8_t u8g_com_ssd_I2C_start_sequence_sw(u8g_t *u8g) {
|
||||
/* are we requested to set the a0 state? */
|
||||
if (u8g->pin_list[U8G_PI_SET_A0] == 0) return 1;
|
||||
|
||||
/* setup bus, might be a repeated start */
|
||||
if (u8g_i2c_start(I2C_SLA) == 0) return 0;
|
||||
if (u8g->pin_list[U8G_PI_A0_STATE] == 0) {
|
||||
if (u8g_i2c_send_byte(I2C_CMD_MODE) == 0) return 0;
|
||||
}
|
||||
else if (u8g_i2c_send_byte(I2C_DATA_MODE) == 0) return 0;
|
||||
|
||||
u8g->pin_list[U8G_PI_SET_A0] = 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint8_t u8g_com_HAL_LPC1768_ssd_sw_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr) {
|
||||
switch (msg) {
|
||||
case U8G_COM_MSG_INIT:
|
||||
|
||||
#define LPC1768_PIN_PORT(pin) ((uint8_t)((pin >> 5) & 0b111))
|
||||
#define LPC1768_PIN_PIN(pin) ((uint8_t)(pin & 0b11111))
|
||||
SCL_pin_HAL_LPC1768_sw_I2C = LPC1768_PIN_PIN(u8g->pin_list[U8G_PI_SCL]);
|
||||
SCL_port_HAL_LPC1768_sw_I2C = LPC1768_PIN_PORT(u8g->pin_list[U8G_PI_SCL]);
|
||||
SDA_pin_HAL_LPC1768_sw_I2C = LPC1768_PIN_PIN(u8g->pin_list[U8G_PI_SDA]);
|
||||
SDA_port_HAL_LPC1768_sw_I2C = LPC1768_PIN_PORT(u8g->pin_list[U8G_PI_SDA]);
|
||||
// As defined by Arduino INPUT(0x0), OUTPUT(0x1), INPUT_PULLUP(0x2)
|
||||
#define OUTPUT 0x1
|
||||
u8g_SetPIOutput(u8g, U8G_PI_SCL);
|
||||
u8g_SetPIOutput(u8g, U8G_PI_SDA);
|
||||
if (U8G_PIN_NONE != u8g->pin_list[U8G_PI_CS]) u8g_SetPIOutput(u8g, U8G_PI_CS);
|
||||
if (U8G_PIN_NONE != u8g->pin_list[U8G_PI_A0]) u8g_SetPIOutput(u8g, U8G_PI_A0);
|
||||
if (U8G_PIN_NONE != u8g->pin_list[U8G_PI_RESET]) u8g_SetPIOutput(u8g, U8G_PI_RESET);
|
||||
|
||||
//u8g_com_arduino_digital_write(u8g, U8G_PI_SCL, HIGH);
|
||||
//u8g_com_arduino_digital_write(u8g, U8G_PI_SDA, HIGH);
|
||||
//u8g->pin_list[U8G_PI_A0_STATE] = 0; /* initial RS state: unknown mode */
|
||||
|
||||
u8g_i2c_init_sw(u8g->pin_list[U8G_PI_I2C_OPTION]);
|
||||
u8g_com_ssd_I2C_start_sequence_sw(u8g);
|
||||
break;
|
||||
|
||||
case U8G_COM_MSG_STOP: break;
|
||||
|
||||
case U8G_COM_MSG_RESET: break;
|
||||
|
||||
case U8G_COM_MSG_CHIP_SELECT:
|
||||
u8g->pin_list[U8G_PI_A0_STATE] = 0;
|
||||
u8g->pin_list[U8G_PI_SET_A0] = 1; /* force a0 to set again, also forces start condition */
|
||||
if (arg_val == 0) {
|
||||
/* disable chip, send stop condition */
|
||||
u8g_i2c_stop_sw();
|
||||
}
|
||||
else {
|
||||
/* enable, do nothing: any byte writing will trigger the i2c start */
|
||||
}
|
||||
break;
|
||||
|
||||
case U8G_COM_MSG_WRITE_BYTE:
|
||||
//u8g->pin_list[U8G_PI_SET_A0] = 1;
|
||||
//if (u8g_com_arduino_ssd_start_sequence(u8g) == 0)
|
||||
// return u8g_i2c_stop(), 0;
|
||||
if (u8g_i2c_send_byte_sw(arg_val) == 0)
|
||||
return u8g_i2c_stop_sw(), 0;
|
||||
// u8g_i2c_stop();
|
||||
break;
|
||||
|
||||
case U8G_COM_MSG_WRITE_SEQ: {
|
||||
//u8g->pin_list[U8G_PI_SET_A0] = 1;
|
||||
if (u8g_com_ssd_I2C_start_sequence_sw(u8g) == 0)
|
||||
return u8g_i2c_stop_sw(), 0;
|
||||
|
||||
uint8_t *ptr = (uint8_t *)arg_ptr;
|
||||
while (arg_val > 0) {
|
||||
if (u8g_i2c_send_byte_sw(*ptr++) == 0)
|
||||
return u8g_i2c_stop_sw(), 0;
|
||||
arg_val--;
|
||||
}
|
||||
}
|
||||
// u8g_i2c_stop();
|
||||
break;
|
||||
|
||||
case U8G_COM_MSG_WRITE_SEQ_P: {
|
||||
//u8g->pin_list[U8G_PI_SET_A0] = 1;
|
||||
if (u8g_com_ssd_I2C_start_sequence_sw(u8g) == 0)
|
||||
return u8g_i2c_stop_sw(), 0;
|
||||
|
||||
uint8_t *ptr = (uint8_t *)arg_ptr;
|
||||
while (arg_val > 0) {
|
||||
if (u8g_i2c_send_byte_sw(u8g_pgm_read(ptr)) == 0) return 0;
|
||||
ptr++;
|
||||
arg_val--;
|
||||
}
|
||||
}
|
||||
// u8g_i2c_stop();
|
||||
break;
|
||||
|
||||
case U8G_COM_MSG_ADDRESS: /* define cmd (arg_val = 0) or data mode (arg_val = 1) */
|
||||
u8g->pin_list[U8G_PI_A0_STATE] = arg_val;
|
||||
u8g->pin_list[U8G_PI_SET_A0] = 1; /* force a0 to set again */
|
||||
u8g_i2c_start_sw(0); // send slave address and write bit
|
||||
u8g_i2c_send_byte_sw(arg_val ? 0x40 : 0x80); // Write to ? Graphics DRAM mode : Command mode
|
||||
break;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif // HAS_GRAPHICAL_LCD
|
||||
|
||||
#endif // TARGET_LPC1768
|
||||
@@ -68,5 +68,4 @@ bool watchdog_timed_out() { return TEST(WDT_ReadTimeOutFlag(), 0); }
|
||||
void watchdog_clear_timeout_flag() { WDT_ClrTimeOutFlag(); }
|
||||
|
||||
#endif // USE_WATCHDOG
|
||||
|
||||
#endif // TARGET_LPC1768
|
||||
|
||||
@@ -59,6 +59,21 @@
|
||||
#else
|
||||
#define GET_TEMP_5_ADC() -1
|
||||
#endif
|
||||
#if HAS_TEMP_ADC_6
|
||||
#define GET_TEMP_6_ADC() PIN_TO_ADC(TEMP_6_PIN)
|
||||
#else
|
||||
#define GET_TEMP_6_ADC() -1
|
||||
#endif
|
||||
#if HAS_TEMP_ADC_7
|
||||
#define GET_TEMP_7_ADC() PIN_TO_ADC(TEMP_7_PIN)
|
||||
#else
|
||||
#define GET_TEMP_7_ADC() -1
|
||||
#endif
|
||||
#if HAS_TEMP_PROBE
|
||||
#define GET_PROBE_ADC() PIN_TO_ADC(TEMP_PROBE_PIN)
|
||||
#else
|
||||
#define GET_PROBE_ADC() -1
|
||||
#endif
|
||||
#if HAS_TEMP_ADC_BED
|
||||
#define GET_BED_ADC() PIN_TO_ADC(TEMP_BED_PIN)
|
||||
#else
|
||||
@@ -80,12 +95,15 @@
|
||||
#define GET_BUTTONS_ADC() -1
|
||||
#endif
|
||||
|
||||
#define IS_ADC_REQUIRED(n) (GET_TEMP_0_ADC() == n || GET_TEMP_1_ADC() == n || GET_TEMP_2_ADC() == n \
|
||||
|| GET_TEMP_3_ADC() == n || GET_TEMP_4_ADC() == n || GET_TEMP_5_ADC() == n \
|
||||
|| GET_BED_ADC() == n \
|
||||
|| GET_CHAMBER_ADC() == n \
|
||||
|| GET_FILAMENT_WIDTH_ADC() == n \
|
||||
|| GET_BUTTONS_ADC() == n)
|
||||
#define IS_ADC_REQUIRED(n) ( \
|
||||
GET_TEMP_0_ADC() == n || GET_TEMP_1_ADC() == n || GET_TEMP_2_ADC() == n || GET_TEMP_3_ADC() == n \
|
||||
|| GET_TEMP_4_ADC() == n || GET_TEMP_5_ADC() == n || GET_TEMP_6_ADC() == n || GET_TEMP_7_ADC() == n \
|
||||
|| GET_PROBE_ADC() == n \
|
||||
|| GET_BED_ADC() == n \
|
||||
|| GET_CHAMBER_ADC() == n \
|
||||
|| GET_FILAMENT_WIDTH_ADC() == n \
|
||||
|| GET_BUTTONS_ADC() == n \
|
||||
)
|
||||
|
||||
#define ADC0_IS_REQUIRED IS_ADC_REQUIRED(0)
|
||||
#define ADC1_IS_REQUIRED IS_ADC_REQUIRED(1)
|
||||
@@ -145,6 +163,15 @@ uint16_t HAL_adc_result;
|
||||
#if GET_TEMP_5_ADC() == 0
|
||||
TEMP_5_PIN,
|
||||
#endif
|
||||
#if GET_TEMP_6_ADC() == 0
|
||||
TEMP_6_PIN,
|
||||
#endif
|
||||
#if GET_TEMP_7_ADC() == 0
|
||||
TEMP_7_PIN,
|
||||
#endif
|
||||
#if GET_PROBE_ADC() == 0
|
||||
TEMP_PROBE_PIN,
|
||||
#endif
|
||||
#if GET_BED_ADC() == 0
|
||||
TEMP_BED_PIN,
|
||||
#endif
|
||||
@@ -176,6 +203,15 @@ uint16_t HAL_adc_result;
|
||||
#if GET_TEMP_5_ADC() == 1
|
||||
TEMP_5_PIN,
|
||||
#endif
|
||||
#if GET_TEMP_6_ADC() == 1
|
||||
TEMP_6_PIN,
|
||||
#endif
|
||||
#if GET_TEMP_7_ADC() == 1
|
||||
TEMP_7_PIN,
|
||||
#endif
|
||||
#if GET_PROBE_ADC() == 1
|
||||
TEMP_PROBE_PIN,
|
||||
#endif
|
||||
#if GET_BED_ADC() == 1
|
||||
TEMP_BED_PIN,
|
||||
#endif
|
||||
@@ -215,6 +251,15 @@ uint16_t HAL_adc_result;
|
||||
#if GET_TEMP_5_ADC() == 0
|
||||
{ PIN_TO_INPUTCTRL(TEMP_5_PIN) },
|
||||
#endif
|
||||
#if GET_TEMP_6_ADC() == 0
|
||||
{ PIN_TO_INPUTCTRL(TEMP_6_PIN) },
|
||||
#endif
|
||||
#if GET_TEMP_7_ADC() == 0
|
||||
{ PIN_TO_INPUTCTRL(TEMP_7_PIN) },
|
||||
#endif
|
||||
#if GET_PROBE_ADC() == 0
|
||||
{ PIN_TO_INPUTCTRL(TEMP_PROBE_PIN) },
|
||||
#endif
|
||||
#if GET_BED_ADC() == 0
|
||||
{ PIN_TO_INPUTCTRL(TEMP_BED_PIN) },
|
||||
#endif
|
||||
@@ -255,6 +300,15 @@ uint16_t HAL_adc_result;
|
||||
#if GET_TEMP_5_ADC() == 1
|
||||
{ PIN_TO_INPUTCTRL(TEMP_5_PIN) },
|
||||
#endif
|
||||
#if GET_TEMP_6_ADC() == 1
|
||||
{ PIN_TO_INPUTCTRL(TEMP_6_PIN) },
|
||||
#endif
|
||||
#if GET_TEMP_7_ADC() == 1
|
||||
{ PIN_TO_INPUTCTRL(TEMP_7_PIN) },
|
||||
#endif
|
||||
#if GET_PROBE_ADC() == 1
|
||||
{ PIN_TO_INPUTCTRL(TEMP_PROBE_PIN) },
|
||||
#endif
|
||||
#if GET_BED_ADC() == 1
|
||||
{ PIN_TO_INPUTCTRL(TEMP_BED_PIN) },
|
||||
#endif
|
||||
|
||||
@@ -98,6 +98,16 @@
|
||||
#else
|
||||
#define MATCH_Z3_MIN_EILINE(P) false
|
||||
#endif
|
||||
#if HAS_Z4_MAX
|
||||
#define MATCH_Z4_MAX_EILINE(P) MATCH_EILINE(P, Z4_MAX_PIN)
|
||||
#else
|
||||
#define MATCH_Z4_MAX_EILINE(P) false
|
||||
#endif
|
||||
#if HAS_Z4_MIN
|
||||
#define MATCH_Z4_MIN_EILINE(P) MATCH_EILINE(P, Z4_MIN_PIN)
|
||||
#else
|
||||
#define MATCH_Z4_MIN_EILINE(P) false
|
||||
#endif
|
||||
#if HAS_Z_MIN_PROBE_PIN
|
||||
#define MATCH_Z_MIN_PROBE_EILINE(P) MATCH_EILINE(P, Z_MIN_PROBE_PIN)
|
||||
#else
|
||||
@@ -109,6 +119,7 @@
|
||||
&& !MATCH_Z_MAX_EILINE(P) && !MATCH_Z_MIN_EILINE(P) \
|
||||
&& !MATCH_Z2_MAX_EILINE(P) && !MATCH_Z2_MIN_EILINE(P) \
|
||||
&& !MATCH_Z3_MAX_EILINE(P) && !MATCH_Z3_MIN_EILINE(P) \
|
||||
&& !MATCH_Z4_MAX_EILINE(P) && !MATCH_Z4_MIN_EILINE(P) \
|
||||
&& !MATCH_Z_MIN_PROBE_EILINE(P))
|
||||
|
||||
// One ISR for all EXT-Interrupts
|
||||
@@ -117,67 +128,79 @@ void endstop_ISR() { endstops.update(); }
|
||||
void setup_endstop_interrupts() {
|
||||
#if HAS_X_MAX
|
||||
#if !AVAILABLE_EILINE(X_MAX_PIN)
|
||||
static_assert(false, "X_MAX_PIN has no EXTINT line available.");
|
||||
#error "X_MAX_PIN has no EXTINT line available."
|
||||
#endif
|
||||
attachInterrupt(X_MAX_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_X_MIN
|
||||
#if !AVAILABLE_EILINE(X_MIN_PIN)
|
||||
static_assert(false, "X_MIN_PIN has no EXTINT line available.");
|
||||
#error "X_MIN_PIN has no EXTINT line available."
|
||||
#endif
|
||||
attachInterrupt(X_MIN_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Y_MAX
|
||||
#if !AVAILABLE_EILINE(Y_MAX_PIN)
|
||||
static_assert(false, "Y_MAX_PIN has no EXTINT line available.");
|
||||
#error "Y_MAX_PIN has no EXTINT line available."
|
||||
#endif
|
||||
attachInterrupt(Y_MAX_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Y_MIN
|
||||
#if !AVAILABLE_EILINE(Y_MIN_PIN)
|
||||
static_assert(false, "Y_MIN_PIN has no EXTINT line available.");
|
||||
#error "Y_MIN_PIN has no EXTINT line available."
|
||||
#endif
|
||||
attachInterrupt(Y_MIN_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z_MAX
|
||||
#if !AVAILABLE_EILINE(Z_MAX_PIN)
|
||||
static_assert(false, "Z_MAX_PIN has no EXTINT line available.");
|
||||
#error "Z_MAX_PIN has no EXTINT line available."
|
||||
#endif
|
||||
attachInterrupt(Z_MAX_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z_MIN
|
||||
#if !AVAILABLE_EILINE(Z_MIN_PIN)
|
||||
static_assert(false, "Z_MIN_PIN has no EXTINT line available.");
|
||||
#error "Z_MIN_PIN has no EXTINT line available."
|
||||
#endif
|
||||
attachInterrupt(Z_MIN_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z2_MAX
|
||||
#if !AVAILABLE_EILINE(Z2_MAX_PIN)
|
||||
static_assert(false, "Z2_MAX_PIN has no EXTINT line available.");
|
||||
#error "Z2_MAX_PIN has no EXTINT line available."
|
||||
#endif
|
||||
attachInterrupt(Z2_MAX_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z2_MIN
|
||||
#if !AVAILABLE_EILINE(Z2_MIN_PIN)
|
||||
static_assert(false, "Z2_MIN_PIN has no EXTINT line available.");
|
||||
#error "Z2_MIN_PIN has no EXTINT line available."
|
||||
#endif
|
||||
attachInterrupt(Z2_MIN_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z3_MAX
|
||||
#if !AVAILABLE_EILINE(Z3_MAX_PIN)
|
||||
static_assert(false, "Z3_MAX_PIN has no EXTINT line available.");
|
||||
#error "Z3_MAX_PIN has no EXTINT line available."
|
||||
#endif
|
||||
attachInterrupt(Z3_MAX_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z3_MIN
|
||||
#if !AVAILABLE_EILINE(Z3_MIN_PIN)
|
||||
static_assert(false, "Z3_MIN_PIN has no EXTINT line available.");
|
||||
#error "Z3_MIN_PIN has no EXTINT line available."
|
||||
#endif
|
||||
attachInterrupt(Z3_MIN_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z4_MAX
|
||||
#if !AVAILABLE_EILINE(Z4_MAX_PIN)
|
||||
#error "Z4_MAX_PIN has no EXTINT line available."
|
||||
#endif
|
||||
attachInterrupt(Z4_MAX_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z4_MIN
|
||||
#if !AVAILABLE_EILINE(Z4_MIN_PIN)
|
||||
#error "Z4_MIN_PIN has no EXTINT line available."
|
||||
#endif
|
||||
attachInterrupt(Z4_MIN_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z_MIN_PROBE_PIN
|
||||
#if !AVAILABLE_EILINE(Z_MIN_PROBE_PIN)
|
||||
static_assert(false, "Z_MIN_PROBE_PIN has no EXTINT line available.");
|
||||
#error "Z_MIN_PROBE_PIN has no EXTINT line available."
|
||||
#endif
|
||||
attachInterrupt(Z_MIN_PROBE_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
|
||||
@@ -58,6 +58,12 @@ void setup_endstop_interrupts() {
|
||||
#if HAS_Z3_MIN
|
||||
attachInterrupt(Z3_MIN_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z4_MAX
|
||||
attachInterrupt(Z4_MAX_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z4_MIN
|
||||
attachInterrupt(Z4_MIN_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z_MIN_PROBE_PIN
|
||||
attachInterrupt(Z_MIN_PROBE_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
|
||||
@@ -57,9 +57,9 @@
|
||||
#define TEMP_TIMER 2
|
||||
#endif
|
||||
|
||||
#elif defined(STM32F4xx) || defined(STM32F7xx)
|
||||
#elif defined(STM32F401xC) || defined(STM32F401xE)
|
||||
|
||||
#define HAL_TIMER_RATE (F_CPU/2) // frequency of timer peripherals
|
||||
#define HAL_TIMER_RATE (F_CPU / 2) // frequency of timer peripherals
|
||||
|
||||
// STM32F401 only has timers 1-5 & 9-11 with timers 4 & 5 usually assigned to TIMER_SERVO and TIMER_TONE
|
||||
|
||||
@@ -71,6 +71,30 @@
|
||||
#define TEMP_TIMER 10
|
||||
#endif
|
||||
|
||||
#elif defined(STM32F4xx)
|
||||
|
||||
#define HAL_TIMER_RATE (F_CPU / 2) // frequency of timer peripherals
|
||||
|
||||
#ifndef STEP_TIMER
|
||||
#define STEP_TIMER 6
|
||||
#endif
|
||||
|
||||
#ifndef TEMP_TIMER
|
||||
#define TEMP_TIMER 14
|
||||
#endif
|
||||
|
||||
#elif defined(STM32F7xx)
|
||||
|
||||
#define HAL_TIMER_RATE (F_CPU/2) // frequency of timer peripherals
|
||||
|
||||
#ifndef STEP_TIMER
|
||||
#define STEP_TIMER 6
|
||||
#endif
|
||||
|
||||
#ifndef TEMP_TIMER
|
||||
#define TEMP_TIMER 14
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef SWSERIAL_TIMER_IRQ_PRIO
|
||||
@@ -82,16 +106,16 @@
|
||||
#endif
|
||||
|
||||
#ifndef TEMP_TIMER_IRQ_PRIO
|
||||
#define TEMP_TIMER_IRQ_PRIO 14 //14 = after hardware ISRs
|
||||
#define TEMP_TIMER_IRQ_PRIO 14 // 14 = after hardware ISRs
|
||||
#endif
|
||||
|
||||
#define STEP_TIMER_NUM 0 // index of timer to use for stepper
|
||||
#define TEMP_TIMER_NUM 1 // index of timer to use for temperature
|
||||
#define PULSE_TIMER_NUM STEP_TIMER_NUM
|
||||
|
||||
#define TEMP_TIMER_FREQUENCY 1000 //Temperature::isr() is expected to be called at around 1kHz
|
||||
#define TEMP_TIMER_FREQUENCY 1000 // Temperature::isr() is expected to be called at around 1kHz
|
||||
|
||||
//TODO: get rid of manual rate/prescale/ticks/cycles taken for procedures in stepper.cpp
|
||||
// TODO: get rid of manual rate/prescale/ticks/cycles taken for procedures in stepper.cpp
|
||||
#define STEPPER_TIMER_RATE 2000000 // 2 Mhz
|
||||
#define STEPPER_TIMER_PRESCALE ((HAL_TIMER_RATE)/(STEPPER_TIMER_RATE))
|
||||
#define STEPPER_TIMER_TICKS_PER_US ((STEPPER_TIMER_RATE) / 1000000) // stepper timer ticks per µs
|
||||
|
||||
@@ -118,6 +118,12 @@ const uint8_t adc_pins[] = {
|
||||
#if HAS_TEMP_ADC_5
|
||||
TEMP_5_PIN,
|
||||
#endif
|
||||
#if HAS_TEMP_ADC_6
|
||||
TEMP_6_PIN,
|
||||
#endif
|
||||
#if HAS_TEMP_ADC_7
|
||||
TEMP_7_PIN,
|
||||
#endif
|
||||
#if ENABLED(FILAMENT_WIDTH_SENSOR)
|
||||
FILWIDTH_PIN,
|
||||
#endif
|
||||
@@ -160,6 +166,12 @@ enum TEMP_PINS : char {
|
||||
#if HAS_TEMP_ADC_5
|
||||
TEMP_5,
|
||||
#endif
|
||||
#if HAS_TEMP_ADC_6
|
||||
TEMP_6,
|
||||
#endif
|
||||
#if HAS_TEMP_ADC_7
|
||||
TEMP_7,
|
||||
#endif
|
||||
#if ENABLED(FILAMENT_WIDTH_SENSOR)
|
||||
FILWIDTH,
|
||||
#endif
|
||||
@@ -346,6 +358,12 @@ void HAL_adc_start_conversion(const uint8_t adc_pin) {
|
||||
#if HAS_TEMP_ADC_5
|
||||
case TEMP_5_PIN: pin_index = TEMP_5; break;
|
||||
#endif
|
||||
#if HAS_TEMP_ADC_6
|
||||
case TEMP_6_PIN: pin_index = TEMP_6; break;
|
||||
#endif
|
||||
#if HAS_TEMP_ADC_7
|
||||
case TEMP_7_PIN: pin_index = TEMP_7; break;
|
||||
#endif
|
||||
#if HAS_JOY_ADC_X
|
||||
case JOY_X_PIN: pin_index = JOY_X; break;
|
||||
#endif
|
||||
|
||||
@@ -82,6 +82,12 @@ void setup_endstop_interrupts() {
|
||||
#endif
|
||||
#if HAS_Z3_MIN
|
||||
attachInterrupt(Z3_MIN_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z4_MAX
|
||||
attachInterrupt(Z4_MAX_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z4_MIN
|
||||
attachInterrupt(Z4_MIN_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z_MIN_PROBE_PIN
|
||||
attachInterrupt(Z_MIN_PROBE_PIN, endstop_ISR, CHANGE);
|
||||
|
||||
@@ -58,6 +58,12 @@ void setup_endstop_interrupts() {
|
||||
#if HAS_Z3_MIN
|
||||
attachInterrupt(Z3_MIN_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z4_MAX
|
||||
attachInterrupt(Z4_MAX_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z4_MIN
|
||||
attachInterrupt(Z4_MIN_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
#if HAS_Z_MIN_PROBE_PIN
|
||||
attachInterrupt(Z_MIN_PROBE_PIN, endstop_ISR, CHANGE);
|
||||
#endif
|
||||
|
||||
@@ -76,6 +76,12 @@ void setup_endstop_interrupts() {
|
||||
#if HAS_Z3_MIN
|
||||
_ATTACH(Z3_MIN_PIN);
|
||||
#endif
|
||||
#if HAS_Z4_MAX
|
||||
_ATTACH(Z4_MAX_PIN);
|
||||
#endif
|
||||
#if HAS_Z4_MIN
|
||||
_ATTACH(Z4_MIN_PIN);
|
||||
#endif
|
||||
#if HAS_Z_MIN_PROBE_PIN
|
||||
_ATTACH(Z_MIN_PROBE_PIN);
|
||||
#endif
|
||||
|
||||
@@ -182,6 +182,7 @@
|
||||
#endif
|
||||
|
||||
const char NUL_STR[] PROGMEM = "",
|
||||
M112_KILL_STR[] PROGMEM = "M112 Shutdown",
|
||||
G28_STR[] PROGMEM = "G28",
|
||||
M21_STR[] PROGMEM = "M21",
|
||||
M23_STR[] PROGMEM = "M23 %s",
|
||||
@@ -826,6 +827,10 @@ void setup() {
|
||||
L64xxManager.init(); // Set up SPI, init drivers
|
||||
#endif
|
||||
|
||||
#if ENABLED(SMART_EFFECTOR) && PIN_EXISTS(SMART_EFFECTOR_MOD)
|
||||
OUT_WRITE(SMART_EFFECTOR_MOD_PIN, LOW); // Put Smart Effector into NORMAL mode
|
||||
#endif
|
||||
|
||||
#if ENABLED(MAX7219_DEBUG)
|
||||
max7219.init();
|
||||
#endif
|
||||
|
||||
@@ -120,5 +120,5 @@ void protected_pin_err();
|
||||
void event_probe_failure();
|
||||
#endif
|
||||
|
||||
extern const char NUL_STR[], G28_STR[], M21_STR[], M23_STR[], M24_STR[],
|
||||
extern const char NUL_STR[], M112_KILL_STR[], G28_STR[], M21_STR[], M23_STR[], M24_STR[],
|
||||
SP_X_STR[], SP_Y_STR[], SP_Z_STR[], SP_E_STR[];
|
||||
|
||||
@@ -256,6 +256,7 @@
|
||||
#define BOARD_ARCHIM1 3023 // UltiMachine Archim1 (with DRV8825 drivers)
|
||||
#define BOARD_ARCHIM2 3024 // UltiMachine Archim2 (with TMC2130 drivers)
|
||||
#define BOARD_ALLIGATOR 3025 // Alligator Board R2
|
||||
#define BOARD_CNCONTROLS_15D 3026 // Cartesio CN Controls V15 on DUE
|
||||
|
||||
//
|
||||
// SAM3X8C ARM Cortex M3
|
||||
|
||||
@@ -57,26 +57,35 @@
|
||||
#define AXIS_DRIVER_TYPE_X(T) _AXIS_DRIVER_TYPE(X,T)
|
||||
#define AXIS_DRIVER_TYPE_Y(T) _AXIS_DRIVER_TYPE(Y,T)
|
||||
#define AXIS_DRIVER_TYPE_Z(T) _AXIS_DRIVER_TYPE(Z,T)
|
||||
#define AXIS_DRIVER_TYPE_X2(T) (EITHER(X_DUAL_STEPPER_DRIVERS, DUAL_X_CARRIAGE) && _AXIS_DRIVER_TYPE(X2,T))
|
||||
#if EITHER(X_DUAL_STEPPER_DRIVERS, DUAL_X_CARRIAGE)
|
||||
#define AXIS_DRIVER_TYPE_X2(T) _AXIS_DRIVER_TYPE(X2,T)
|
||||
#else
|
||||
#define AXIS_DRIVER_TYPE_X2(T) false
|
||||
#endif
|
||||
#define AXIS_DRIVER_TYPE_Y2(T) (ENABLED(Y_DUAL_STEPPER_DRIVERS) && _AXIS_DRIVER_TYPE(Y2,T))
|
||||
#define AXIS_DRIVER_TYPE_Z2(T) (Z_MULTI_STEPPER_DRIVERS && _AXIS_DRIVER_TYPE(Z2,T))
|
||||
#define AXIS_DRIVER_TYPE_Z3(T) (ENABLED(Z_TRIPLE_STEPPER_DRIVERS) && _AXIS_DRIVER_TYPE(Z3,T))
|
||||
#define AXIS_DRIVER_TYPE_Z2(T) (NUM_Z_STEPPER_DRIVERS >= 2 && _AXIS_DRIVER_TYPE(Z2,T))
|
||||
#define AXIS_DRIVER_TYPE_Z3(T) (NUM_Z_STEPPER_DRIVERS >= 3 && _AXIS_DRIVER_TYPE(Z3,T))
|
||||
#define AXIS_DRIVER_TYPE_Z4(T) (NUM_Z_STEPPER_DRIVERS >= 4 && _AXIS_DRIVER_TYPE(Z4,T))
|
||||
#define AXIS_DRIVER_TYPE_E0(T) (E_STEPPERS > 0 && _AXIS_DRIVER_TYPE(E0,T))
|
||||
#define AXIS_DRIVER_TYPE_E1(T) (E_STEPPERS > 1 && _AXIS_DRIVER_TYPE(E1,T))
|
||||
#define AXIS_DRIVER_TYPE_E2(T) (E_STEPPERS > 2 && _AXIS_DRIVER_TYPE(E2,T))
|
||||
#define AXIS_DRIVER_TYPE_E3(T) (E_STEPPERS > 3 && _AXIS_DRIVER_TYPE(E3,T))
|
||||
#define AXIS_DRIVER_TYPE_E4(T) (E_STEPPERS > 4 && _AXIS_DRIVER_TYPE(E4,T))
|
||||
#define AXIS_DRIVER_TYPE_E5(T) (E_STEPPERS > 5 && _AXIS_DRIVER_TYPE(E5,T))
|
||||
#define AXIS_DRIVER_TYPE_E6(T) (E_STEPPERS > 6 && _AXIS_DRIVER_TYPE(E6,T))
|
||||
#define AXIS_DRIVER_TYPE_E7(T) (E_STEPPERS > 7 && _AXIS_DRIVER_TYPE(E7,T))
|
||||
|
||||
#define AXIS_DRIVER_TYPE(A,T) AXIS_DRIVER_TYPE_##A(T)
|
||||
|
||||
#define HAS_E_DRIVER(T) ( AXIS_DRIVER_TYPE_E0(T) || AXIS_DRIVER_TYPE_E1(T) \
|
||||
|| AXIS_DRIVER_TYPE_E2(T) || AXIS_DRIVER_TYPE_E3(T) \
|
||||
|| AXIS_DRIVER_TYPE_E4(T) || AXIS_DRIVER_TYPE_E5(T) )
|
||||
|| AXIS_DRIVER_TYPE_E4(T) || AXIS_DRIVER_TYPE_E5(T) \
|
||||
|| AXIS_DRIVER_TYPE_E6(T) || AXIS_DRIVER_TYPE_E7(T) )
|
||||
|
||||
#define HAS_DRIVER(T) ( AXIS_DRIVER_TYPE_X(T) || AXIS_DRIVER_TYPE_X2(T) \
|
||||
|| AXIS_DRIVER_TYPE_Y(T) || AXIS_DRIVER_TYPE_Y2(T) \
|
||||
|| AXIS_DRIVER_TYPE_Z(T) || AXIS_DRIVER_TYPE_Z2(T) || AXIS_DRIVER_TYPE_Z3(T) \
|
||||
|| AXIS_DRIVER_TYPE_Z(T) || AXIS_DRIVER_TYPE_Z2(T) \
|
||||
|| AXIS_DRIVER_TYPE_Z3(T) || AXIS_DRIVER_TYPE_Z4(T) \
|
||||
|| HAS_E_DRIVER(T) )
|
||||
|
||||
// Test for supported TMC drivers that require advanced configuration
|
||||
@@ -144,7 +153,8 @@
|
||||
|| AXIS_HAS_##T(Z3) \
|
||||
|| AXIS_HAS_##T(E0) || AXIS_HAS_##T(E1) \
|
||||
|| AXIS_HAS_##T(E2) || AXIS_HAS_##T(E3) \
|
||||
|| AXIS_HAS_##T(E4) || AXIS_HAS_##T(E5) )
|
||||
|| AXIS_HAS_##T(E4) || AXIS_HAS_##T(E5) \
|
||||
|| AXIS_HAS_##T(E6) || AXIS_HAS_##T(E7) )
|
||||
|
||||
#define HAS_STEALTHCHOP ANY_AXIS_HAS(STEALTHCHOP)
|
||||
#define HAS_STALLGUARD ANY_AXIS_HAS(STALLGUARD)
|
||||
|
||||
@@ -195,6 +195,8 @@
|
||||
#define MSG_Z2_MAX "z2_max"
|
||||
#define MSG_Z3_MIN "z3_min"
|
||||
#define MSG_Z3_MAX "z3_max"
|
||||
#define MSG_Z4_MIN "z4_min"
|
||||
#define MSG_Z4_MAX "z4_max"
|
||||
#define MSG_Z_PROBE "z_probe"
|
||||
#define MSG_FILAMENT_RUNOUT_SENSOR "filament"
|
||||
#define MSG_PROBE_OFFSET "Probe Offset"
|
||||
@@ -333,6 +335,7 @@
|
||||
#define MSG_Y2 "Y2"
|
||||
#define MSG_Z2 "Z2"
|
||||
#define MSG_Z3 "Z3"
|
||||
#define MSG_Z4 "Z4"
|
||||
|
||||
#define LCD_STR_A MSG_A
|
||||
#define LCD_STR_B MSG_B
|
||||
@@ -356,6 +359,8 @@
|
||||
#define LCD_STR_N3 "3"
|
||||
#define LCD_STR_N4 "4"
|
||||
#define LCD_STR_N5 "5"
|
||||
#define LCD_STR_N6 "6"
|
||||
#define LCD_STR_N7 "7"
|
||||
#else
|
||||
#define LCD_FIRST_TOOL '1'
|
||||
#define LCD_STR_N0 "1"
|
||||
@@ -364,6 +369,8 @@
|
||||
#define LCD_STR_N3 "4"
|
||||
#define LCD_STR_N4 "5"
|
||||
#define LCD_STR_N5 "6"
|
||||
#define LCD_STR_N6 "7"
|
||||
#define LCD_STR_N7 "8"
|
||||
#endif
|
||||
|
||||
#define LCD_STR_E0 "E" LCD_STR_N0
|
||||
@@ -372,6 +379,8 @@
|
||||
#define LCD_STR_E3 "E" LCD_STR_N3
|
||||
#define LCD_STR_E4 "E" LCD_STR_N4
|
||||
#define LCD_STR_E5 "E" LCD_STR_N5
|
||||
#define LCD_STR_E6 "E" LCD_STR_N6
|
||||
#define LCD_STR_E7 "E" LCD_STR_N7
|
||||
|
||||
#include "multi_language.h" // Allow multiple languages
|
||||
|
||||
|
||||
@@ -43,11 +43,7 @@ enum AxisEnum : uint8_t {
|
||||
E_AXIS = 3,
|
||||
X_HEAD = 4, Y_HEAD = 5, Z_HEAD = 6,
|
||||
E0_AXIS = 3,
|
||||
E1_AXIS = 4,
|
||||
E2_AXIS = 5,
|
||||
E3_AXIS = 6,
|
||||
E4_AXIS = 7,
|
||||
E5_AXIS = 8,
|
||||
E1_AXIS, E2_AXIS, E3_AXIS, E4_AXIS, E5_AXIS, E6_AXIS, E7_AXIS,
|
||||
ALL_AXES = 0xFE, NO_AXIS = 0xFF
|
||||
};
|
||||
|
||||
|
||||
@@ -86,14 +86,18 @@ void set_bed_leveling_enabled(const bool enable/*=true*/) {
|
||||
#endif
|
||||
|
||||
if (planner.leveling_active) { // leveling from on to off
|
||||
if (DEBUGGING(LEVELING)) DEBUG_POS("Leveling ON", current_position);
|
||||
// change unleveled current_position to physical current_position without moving steppers.
|
||||
planner.apply_leveling(current_position);
|
||||
planner.leveling_active = false; // disable only AFTER calling apply_leveling
|
||||
if (DEBUGGING(LEVELING)) DEBUG_POS("...Now OFF", current_position);
|
||||
}
|
||||
else { // leveling from off to on
|
||||
if (DEBUGGING(LEVELING)) DEBUG_POS("Leveling OFF", current_position);
|
||||
planner.leveling_active = true; // enable BEFORE calling unapply_leveling, otherwise ignored
|
||||
// change physical current_position to unleveled current_position without moving steppers.
|
||||
planner.unapply_leveling(current_position);
|
||||
if (DEBUGGING(LEVELING)) DEBUG_POS("...Now ON", current_position);
|
||||
}
|
||||
|
||||
sync_plan_position();
|
||||
@@ -180,7 +184,7 @@ void reset_bed_level() {
|
||||
#endif
|
||||
for (uint8_t y = 0; y < sy; y++) {
|
||||
#ifdef SCAD_MESH_OUTPUT
|
||||
SERIAL_ECHOPGM(" ["); // open sub-array
|
||||
SERIAL_ECHOPGM(" ["); // open sub-array
|
||||
#else
|
||||
if (y < 10) SERIAL_CHAR(' ');
|
||||
SERIAL_ECHO(int(y));
|
||||
@@ -207,13 +211,13 @@ void reset_bed_level() {
|
||||
#endif
|
||||
}
|
||||
#ifdef SCAD_MESH_OUTPUT
|
||||
SERIAL_CHAR(' ', ']'); // close sub-array
|
||||
SERIAL_CHAR(' ', ']'); // close sub-array
|
||||
if (y < sy - 1) SERIAL_CHAR(',');
|
||||
#endif
|
||||
SERIAL_EOL();
|
||||
}
|
||||
#ifdef SCAD_MESH_OUTPUT
|
||||
SERIAL_ECHOPGM("];"); // close 2D array
|
||||
SERIAL_ECHOPGM("];"); // close 2D array
|
||||
#endif
|
||||
SERIAL_EOL();
|
||||
}
|
||||
@@ -243,7 +247,7 @@ void reset_bed_level() {
|
||||
current_position = pos;
|
||||
|
||||
#if ENABLED(LCD_BED_LEVELING)
|
||||
ui.wait_for_bl_move = false;
|
||||
ui.wait_for_move = false;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -36,29 +36,32 @@ void controllerfan_update() {
|
||||
if (ELAPSED(ms, nextMotorCheck)) {
|
||||
nextMotorCheck = ms + 2500UL; // Not a time critical function, so only check every 2.5s
|
||||
|
||||
const bool xory = X_ENABLE_READ() == X_ENABLE_ON || Y_ENABLE_READ() == Y_ENABLE_ON;
|
||||
const bool xory = X_ENABLE_READ() == bool(X_ENABLE_ON) || Y_ENABLE_READ() == bool(Y_ENABLE_ON);
|
||||
|
||||
// If any of the drivers or the bed are enabled...
|
||||
if (xory || Z_ENABLE_READ() == Z_ENABLE_ON
|
||||
if (xory || Z_ENABLE_READ() == bool(Z_ENABLE_ON)
|
||||
#if HAS_HEATED_BED
|
||||
|| thermalManager.temp_bed.soft_pwm_amount > 0
|
||||
#endif
|
||||
#if HAS_X2_ENABLE
|
||||
|| X2_ENABLE_READ() == X_ENABLE_ON
|
||||
#endif
|
||||
#if HAS_Y2_ENABLE
|
||||
|| Y2_ENABLE_READ() == Y_ENABLE_ON
|
||||
#endif
|
||||
#if HAS_Z2_ENABLE
|
||||
|| Z2_ENABLE_READ() == Z_ENABLE_ON
|
||||
#endif
|
||||
#if HAS_Z3_ENABLE
|
||||
|| Z3_ENABLE_READ() == Z_ENABLE_ON
|
||||
#endif
|
||||
#if E_STEPPERS
|
||||
#define _OR_ENABLED_E(N) || E##N##_ENABLE_READ() == E_ENABLE_ON
|
||||
REPEAT(E_STEPPERS, _OR_ENABLED_E)
|
||||
#endif
|
||||
#if HAS_X2_ENABLE
|
||||
|| X2_ENABLE_READ() == bool(X_ENABLE_ON)
|
||||
#endif
|
||||
#if HAS_Y2_ENABLE
|
||||
|| Y2_ENABLE_READ() == bool(Y_ENABLE_ON)
|
||||
#endif
|
||||
#if HAS_Z2_ENABLE
|
||||
|| Z2_ENABLE_READ() == bool(Z_ENABLE_ON)
|
||||
#endif
|
||||
#if HAS_Z3_ENABLE
|
||||
|| Z3_ENABLE_READ() == bool(Z_ENABLE_ON)
|
||||
#endif
|
||||
#if HAS_Z4_ENABLE
|
||||
|| Z4_ENABLE_READ() == bool(Z_ENABLE_ON)
|
||||
#endif
|
||||
#if E_STEPPERS
|
||||
#define _OR_ENABLED_E(N) || E##N##_ENABLE_READ() == bool(E_ENABLE_ON)
|
||||
REPEAT(E_STEPPERS, _OR_ENABLED_E)
|
||||
#endif
|
||||
) {
|
||||
lastMotorOn = ms; //... set time to NOW so the fan will turn on
|
||||
}
|
||||
|
||||
@@ -47,7 +47,7 @@ static byte current_to_wiper(const float current) {
|
||||
return byte(CEIL(float((DIGIPOT_I2C_FACTOR * current))));
|
||||
}
|
||||
|
||||
static void i2c_send(const byte addr, const byte a, const byte b) {
|
||||
static void digipot_i2c_send(const byte addr, const byte a, const byte b) {
|
||||
#if MB(MKS_SBASE)
|
||||
digipot_mcp4451_start(addr);
|
||||
digipot_mcp4451_send_byte(a);
|
||||
@@ -67,17 +67,17 @@ void digipot_i2c_set_current(const uint8_t channel, const float current) {
|
||||
const byte addr = channel < 4 ? DIGIPOT_I2C_ADDRESS_A : DIGIPOT_I2C_ADDRESS_B; // channel 0-3 vs 4-7
|
||||
|
||||
// Initial setup
|
||||
i2c_send(addr, 0x40, 0xFF);
|
||||
i2c_send(addr, 0xA0, 0xFF);
|
||||
digipot_i2c_send(addr, 0x40, 0xFF);
|
||||
digipot_i2c_send(addr, 0xA0, 0xFF);
|
||||
|
||||
// Set actual wiper value
|
||||
byte addresses[4] = { 0x00, 0x10, 0x60, 0x70 };
|
||||
i2c_send(addr, addresses[channel & 0x3], current_to_wiper(_MIN(float(_MAX(current, 0)), DIGIPOT_I2C_MAX_CURRENT)));
|
||||
digipot_i2c_send(addr, addresses[channel & 0x3], current_to_wiper(_MIN(float(_MAX(current, 0)), DIGIPOT_I2C_MAX_CURRENT)));
|
||||
}
|
||||
|
||||
void digipot_i2c_init() {
|
||||
#if MB(MKS_SBASE)
|
||||
digipot_mcp4451_init();
|
||||
configure_i2c(16); // Setting clock_option to 16 ensure the I2C bus is initialized at 400kHz
|
||||
#else
|
||||
Wire.begin();
|
||||
#endif
|
||||
|
||||
@@ -346,64 +346,79 @@
|
||||
#endif
|
||||
|
||||
if (need_update_error_counters || need_debug_reporting) {
|
||||
#if AXIS_IS_TMC(X)
|
||||
if (monitor_tmc_driver(stepperX, need_update_error_counters, need_debug_reporting)) {
|
||||
|
||||
#if AXIS_IS_TMC(X) || AXIS_IS_TMC(X2)
|
||||
{
|
||||
bool result = false;
|
||||
#if AXIS_IS_TMC(X)
|
||||
if (monitor_tmc_driver(stepperX, need_update_error_counters, need_debug_reporting)) result = true;
|
||||
#endif
|
||||
#if AXIS_IS_TMC(X2)
|
||||
if (monitor_tmc_driver(stepperX2, need_update_error_counters, need_debug_reporting)) result = true;
|
||||
#endif
|
||||
if (result) {
|
||||
#if AXIS_IS_TMC(X)
|
||||
step_current_down(stepperX);
|
||||
#endif
|
||||
#if AXIS_IS_TMC(X2)
|
||||
step_current_down(stepperX2);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#if AXIS_IS_TMC(X2)
|
||||
if (monitor_tmc_driver(stepperX2, need_update_error_counters, need_debug_reporting)) {
|
||||
#if AXIS_IS_TMC(X)
|
||||
step_current_down(stepperX);
|
||||
|
||||
#if AXIS_IS_TMC(Y) || AXIS_IS_TMC(Y2)
|
||||
{
|
||||
bool result = false;
|
||||
#if AXIS_IS_TMC(Y)
|
||||
if (monitor_tmc_driver(stepperY, need_update_error_counters, need_debug_reporting)) result = true;
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Y2)
|
||||
if (monitor_tmc_driver(stepperY2, need_update_error_counters, need_debug_reporting)) result = true;
|
||||
#endif
|
||||
if (result) {
|
||||
#if AXIS_IS_TMC(Y)
|
||||
step_current_down(stepperY);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Y)
|
||||
if (monitor_tmc_driver(stepperY, need_update_error_counters, need_debug_reporting)) {
|
||||
#if AXIS_IS_TMC(Y2)
|
||||
step_current_down(stepperY2);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Y2)
|
||||
if (monitor_tmc_driver(stepperY2, need_update_error_counters, need_debug_reporting)) {
|
||||
#if AXIS_IS_TMC(Y)
|
||||
step_current_down(stepperY);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z)
|
||||
if (monitor_tmc_driver(stepperZ, need_update_error_counters, need_debug_reporting)) {
|
||||
#if AXIS_IS_TMC(Z2)
|
||||
step_current_down(stepperZ2);
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z3)
|
||||
step_current_down(stepperZ3);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z2)
|
||||
if (monitor_tmc_driver(stepperZ2, need_update_error_counters, need_debug_reporting)) {
|
||||
#if AXIS_IS_TMC(Z)
|
||||
step_current_down(stepperZ);
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z3)
|
||||
step_current_down(stepperZ3);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z3)
|
||||
if (monitor_tmc_driver(stepperZ3, need_update_error_counters, need_debug_reporting)) {
|
||||
|
||||
#if AXIS_IS_TMC(Z) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3) || AXIS_IS_TMC(Z4)
|
||||
{
|
||||
bool result = false;
|
||||
#if AXIS_IS_TMC(Z)
|
||||
if (monitor_tmc_driver(stepperZ, need_update_error_counters, need_debug_reporting)) result = true;
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z2)
|
||||
if (monitor_tmc_driver(stepperZ2, need_update_error_counters, need_debug_reporting)) result = true;
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z3)
|
||||
if (monitor_tmc_driver(stepperZ3, need_update_error_counters, need_debug_reporting)) result = true;
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z4)
|
||||
if (monitor_tmc_driver(stepperZ4, need_update_error_counters, need_debug_reporting)) result = true;
|
||||
#endif
|
||||
if (result) {
|
||||
#if AXIS_IS_TMC(Z)
|
||||
step_current_down(stepperZ);
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z2)
|
||||
step_current_down(stepperZ2);
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z3)
|
||||
step_current_down(stepperZ3);
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z4)
|
||||
step_current_down(stepperZ4);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if AXIS_IS_TMC(E0)
|
||||
(void)monitor_tmc_driver(stepperE0, need_update_error_counters, need_debug_reporting);
|
||||
#endif
|
||||
@@ -741,6 +756,9 @@
|
||||
#if AXIS_IS_TMC(Z3)
|
||||
tmc_status(stepperZ3, i);
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z4)
|
||||
tmc_status(stepperZ4, i);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (print_e) {
|
||||
@@ -796,6 +814,9 @@
|
||||
#if AXIS_IS_TMC(Z3)
|
||||
tmc_parse_drv_status(stepperZ3, i);
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z4)
|
||||
tmc_parse_drv_status(stepperZ4, i);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (print_e) {
|
||||
@@ -971,6 +992,9 @@
|
||||
#if AXIS_IS_TMC(Z3)
|
||||
tmc_get_registers(stepperZ3, i);
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z4)
|
||||
tmc_get_registers(stepperZ4, i);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (print_e) {
|
||||
@@ -1077,6 +1101,9 @@
|
||||
#if AXIS_HAS_SPI(Z3)
|
||||
SET_CS_PIN(Z3);
|
||||
#endif
|
||||
#if AXIS_HAS_SPI(Z4)
|
||||
SET_CS_PIN(Z4);
|
||||
#endif
|
||||
#if AXIS_HAS_SPI(E0)
|
||||
SET_CS_PIN(E0);
|
||||
#endif
|
||||
@@ -1151,6 +1178,9 @@ void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z
|
||||
#if AXIS_IS_TMC(Z3)
|
||||
axis_connection += test_connection(stepperZ3);
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z4)
|
||||
axis_connection += test_connection(stepperZ4);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (test_e) {
|
||||
|
||||
@@ -350,7 +350,7 @@ void test_tmc_connection(const bool test_x, const bool test_y, const bool test_z
|
||||
#if USE_SENSORLESS
|
||||
|
||||
// Track enabled status of stealthChop and only re-enable where applicable
|
||||
struct sensorless_t { bool x, y, z, x2, y2, z2, z3; };
|
||||
struct sensorless_t { bool x, y, z, x2, y2, z2, z3, z4; };
|
||||
|
||||
#if ENABLED(IMPROVE_HOMING_RELIABILITY)
|
||||
extern millis_t sg_guard_period;
|
||||
|
||||
@@ -418,15 +418,13 @@ inline bool turn_on_heaters() {
|
||||
inline bool prime_nozzle() {
|
||||
|
||||
const feedRate_t fr_slow_e = planner.settings.max_feedrate_mm_s[E_AXIS] / 15.0f;
|
||||
#if HAS_LCD_MENU
|
||||
#if HAS_LCD_MENU && DISABLED(TOUCH_BUTTONS) // ui.button_pressed issue with touchscreen
|
||||
#if ENABLED(PREVENT_LENGTHY_EXTRUDE)
|
||||
float Total_Prime = 0.0;
|
||||
#endif
|
||||
|
||||
if (g26_prime_flag == -1) { // The user wants to control how much filament gets purged
|
||||
#if HAS_LCD_MENU
|
||||
ui.capture();
|
||||
#endif
|
||||
ui.capture();
|
||||
ui.set_status_P(GET_TEXT(MSG_G26_MANUAL_PRIME), 99);
|
||||
ui.chirp();
|
||||
|
||||
@@ -439,7 +437,10 @@ inline bool prime_nozzle() {
|
||||
destination.e += 0.25;
|
||||
#if ENABLED(PREVENT_LENGTHY_EXTRUDE)
|
||||
Total_Prime += 0.25;
|
||||
if (Total_Prime >= EXTRUDE_MAXLENGTH) return G26_ERR;
|
||||
if (Total_Prime >= EXTRUDE_MAXLENGTH) {
|
||||
ui.release();
|
||||
return G26_ERR;
|
||||
}
|
||||
#endif
|
||||
prepare_internal_move_to_destination(fr_slow_e);
|
||||
destination = current_position;
|
||||
|
||||
@@ -508,7 +508,7 @@ G29_TYPE GcodeSuite::G29() {
|
||||
set_bed_leveling_enabled(abl_should_enable);
|
||||
g29_in_progress = false;
|
||||
#if ENABLED(LCD_BED_LEVELING)
|
||||
ui.wait_for_bl_move = false;
|
||||
ui.wait_for_move = false;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -810,7 +810,7 @@ G29_TYPE GcodeSuite::G29() {
|
||||
#if ENABLED(PROBE_MANUALLY)
|
||||
g29_in_progress = false;
|
||||
#if ENABLED(LCD_BED_LEVELING)
|
||||
ui.wait_for_bl_move = false;
|
||||
ui.wait_for_move = false;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ void GcodeSuite::G29() {
|
||||
case MeshStart:
|
||||
mbl.reset();
|
||||
mbl_probe_index = 0;
|
||||
if (!ui.wait_for_bl_move) {
|
||||
if (!ui.wait_for_move) {
|
||||
queue.inject_P(PSTR("G28\nG29 S2"));
|
||||
return;
|
||||
}
|
||||
@@ -148,7 +148,7 @@ void GcodeSuite::G29() {
|
||||
#endif
|
||||
|
||||
#if ENABLED(LCD_BED_LEVELING)
|
||||
ui.wait_for_bl_move = false;
|
||||
ui.wait_for_move = false;
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -530,14 +530,14 @@ void GcodeSuite::G28(const bool always_home_all) {
|
||||
// Set L6470 absolute position registers to counts
|
||||
// constexpr *might* move this to PROGMEM.
|
||||
// If not, this will need a PROGMEM directive and an accessor.
|
||||
static constexpr AxisEnum L6470_axis_xref[MAX_L6470] = {
|
||||
static constexpr AxisEnum L64XX_axis_xref[MAX_L64XX] = {
|
||||
X_AXIS, Y_AXIS, Z_AXIS,
|
||||
X_AXIS, Y_AXIS, Z_AXIS, Z_AXIS,
|
||||
E_AXIS, E_AXIS, E_AXIS, E_AXIS, E_AXIS, E_AXIS
|
||||
};
|
||||
for (uint8_t j = 1; j <= L64XX::chain[0]; j++) {
|
||||
const uint8_t cv = L64XX::chain[j];
|
||||
L64xxManager.set_param((L64XX_axis_t)cv, L6470_ABS_POS, stepper.position(L6470_axis_xref[cv]));
|
||||
L64xxManager.set_param((L64XX_axis_t)cv, L6470_ABS_POS, stepper.position(L64XX_axis_xref[cv]));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -52,20 +52,22 @@ constexpr xy_pos_t test_z_stepper_align_xy[] = Z_STEPPER_ALIGN_XY;
|
||||
|
||||
#if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
|
||||
|
||||
static_assert(COUNT(test_z_stepper_align_xy) >= Z_STEPPER_COUNT,
|
||||
static_assert(COUNT(test_z_stepper_align_xy) >= NUM_Z_STEPPER_DRIVERS,
|
||||
"Z_STEPPER_ALIGN_XY requires at least three {X,Y} entries (Z, Z2, Z3, ...)."
|
||||
);
|
||||
|
||||
constexpr float test_z_stepper_align_stepper_xy[][XY] = Z_STEPPER_ALIGN_STEPPER_XY;
|
||||
static_assert(
|
||||
COUNT(test_z_stepper_align_stepper_xy) == Z_STEPPER_COUNT,
|
||||
COUNT(test_z_stepper_align_stepper_xy) == NUM_Z_STEPPER_DRIVERS,
|
||||
"Z_STEPPER_ALIGN_STEPPER_XY requires three {X,Y} entries (one per Z stepper)."
|
||||
);
|
||||
|
||||
#else
|
||||
|
||||
static_assert(COUNT(test_z_stepper_align_xy) == Z_STEPPER_COUNT,
|
||||
#if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
|
||||
static_assert(COUNT(test_z_stepper_align_xy) == NUM_Z_STEPPER_DRIVERS,
|
||||
#if NUM_Z_STEPPER_DRIVERS == 4
|
||||
"Z_STEPPER_ALIGN_XY requires four {X,Y} entries (Z, Z2, Z3, and Z4)."
|
||||
#elif NUM_Z_STEPPER_DRIVERS == 3
|
||||
"Z_STEPPER_ALIGN_XY requires three {X,Y} entries (Z, Z2, and Z3)."
|
||||
#else
|
||||
"Z_STEPPER_ALIGN_XY requires two {X,Y} entries (Z and Z2)."
|
||||
@@ -85,10 +87,13 @@ static_assert(LTEST(0) && RTEST(0), "The 1st Z_STEPPER_ALIGN_XY X is unreachable
|
||||
static_assert(FTEST(0) && BTEST(0), "The 1st Z_STEPPER_ALIGN_XY Y is unreachable with the default probe Y offset.");
|
||||
static_assert(LTEST(1) && RTEST(1), "The 2nd Z_STEPPER_ALIGN_XY X is unreachable with the default probe X offset.");
|
||||
static_assert(FTEST(1) && BTEST(1), "The 2nd Z_STEPPER_ALIGN_XY Y is unreachable with the default probe Y offset.");
|
||||
|
||||
#if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
|
||||
#if NUM_Z_STEPPER_DRIVERS >= 3
|
||||
static_assert(LTEST(2) && RTEST(2), "The 3rd Z_STEPPER_ALIGN_XY X is unreachable with the default probe X offset.");
|
||||
static_assert(FTEST(2) && BTEST(2), "The 3rd Z_STEPPER_ALIGN_XY Y is unreachable with the default probe Y offset.");
|
||||
#if NUM_Z_STEPPER_DRIVERS >= 4
|
||||
static_assert(LTEST(3) && RTEST(3), "The 4th Z_STEPPER_ALIGN_XY X is unreachable with the default probe X offset.");
|
||||
static_assert(FTEST(3) && BTEST(3), "The 4th Z_STEPPER_ALIGN_XY Y is unreachable with the default probe Y offset.");
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//
|
||||
@@ -105,8 +110,11 @@ static xy_pos_t z_stepper_align_pos[] = Z_STEPPER_ALIGN_XY;
|
||||
inline void set_all_z_lock(const bool lock) {
|
||||
stepper.set_z_lock(lock);
|
||||
stepper.set_z2_lock(lock);
|
||||
#if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
|
||||
#if NUM_Z_STEPPER_DRIVERS >= 3
|
||||
stepper.set_z3_lock(lock);
|
||||
#if NUM_Z_STEPPER_DRIVERS >= 4
|
||||
stepper.set_z4_lock(lock);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -125,6 +133,11 @@ void GcodeSuite::G34() {
|
||||
|
||||
do { // break out on error
|
||||
|
||||
#if NUM_Z_STEPPER_DRIVERS == 4
|
||||
SERIAL_ECHOLNPGM("Quad Z Stepper Leveling not Yet Supported");
|
||||
break;
|
||||
#endif
|
||||
|
||||
const int8_t z_auto_align_iterations = parser.intval('I', Z_STEPPER_ALIGN_ITERATIONS);
|
||||
if (!WITHIN(z_auto_align_iterations, 1, 30)) {
|
||||
SERIAL_ECHOLNPGM("?(I)teration out of bounds (1-30).");
|
||||
@@ -187,7 +200,7 @@ void GcodeSuite::G34() {
|
||||
// Compute a worst-case clearance height to probe from. After the first
|
||||
// iteration this will be re-calculated based on the actual bed position
|
||||
float z_probe = Z_BASIC_CLEARANCE + (G34_MAX_GRADE) * 0.01f * (
|
||||
#if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
|
||||
#if NUM_Z_STEPPER_DRIVERS == 3
|
||||
SQRT(_MAX(HYPOT2(z_stepper_align_pos[0].x - z_stepper_align_pos[0].y, z_stepper_align_pos[1].x - z_stepper_align_pos[1].y),
|
||||
HYPOT2(z_stepper_align_pos[1].x - z_stepper_align_pos[1].y, z_stepper_align_pos[2].x - z_stepper_align_pos[2].y),
|
||||
HYPOT2(z_stepper_align_pos[2].x - z_stepper_align_pos[2].y, z_stepper_align_pos[0].x - z_stepper_align_pos[0].y)))
|
||||
@@ -202,7 +215,7 @@ void GcodeSuite::G34() {
|
||||
// Move the Z coordinate realm towards the positive - dirty trick
|
||||
current_position.z -= z_probe * 0.5f;
|
||||
|
||||
float last_z_align_move[Z_STEPPER_COUNT] = ARRAY_N(Z_STEPPER_COUNT, 10000.0f, 10000.0f, 10000.0f),
|
||||
float last_z_align_move[NUM_Z_STEPPER_DRIVERS] = ARRAY_N(NUM_Z_STEPPER_DRIVERS, 10000.0f, 10000.0f, 10000.0f),
|
||||
z_measured[G34_PROBE_COUNT] = { 0 },
|
||||
z_maxdiff = 0.0f,
|
||||
amplification = z_auto_align_amplification;
|
||||
@@ -273,7 +286,7 @@ void GcodeSuite::G34() {
|
||||
finish_incremental_LSF(&lfd);
|
||||
|
||||
z_measured_min = 100000.0f;
|
||||
for (uint8_t i = 0; i < Z_STEPPER_COUNT; ++i) {
|
||||
for (uint8_t i = 0; i < NUM_Z_STEPPER_DRIVERS; ++i) {
|
||||
z_measured[i] = -(lfd.A * z_stepper_align_stepper_pos[i].x + lfd.B * z_stepper_align_stepper_pos[i].y);
|
||||
z_measured_min = _MIN(z_measured_min, z_measured[i]);
|
||||
}
|
||||
@@ -283,7 +296,7 @@ void GcodeSuite::G34() {
|
||||
|
||||
SERIAL_ECHOLNPAIR("\n"
|
||||
"DIFFERENCE Z1-Z2=", ABS(z_measured[0] - z_measured[1])
|
||||
#if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
|
||||
#if NUM_Z_STEPPER_DRIVERS == 3
|
||||
, " Z2-Z3=", ABS(z_measured[1] - z_measured[2])
|
||||
, " Z3-Z1=", ABS(z_measured[2] - z_measured[0])
|
||||
#endif
|
||||
@@ -294,7 +307,7 @@ void GcodeSuite::G34() {
|
||||
|
||||
bool success_break = true;
|
||||
// Correct the individual stepper offsets
|
||||
for (uint8_t zstepper = 0; zstepper < Z_STEPPER_COUNT; ++zstepper) {
|
||||
for (uint8_t zstepper = 0; zstepper < NUM_Z_STEPPER_DRIVERS; ++zstepper) {
|
||||
// Calculate current stepper move
|
||||
const float z_align_move = z_measured[zstepper] - z_measured_min,
|
||||
z_align_abs = ABS(z_align_move);
|
||||
@@ -324,7 +337,7 @@ void GcodeSuite::G34() {
|
||||
switch (zstepper) {
|
||||
case 0: stepper.set_z_lock(false); break;
|
||||
case 1: stepper.set_z2_lock(false); break;
|
||||
#if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
|
||||
#if NUM_Z_STEPPER_DRIVERS == 3
|
||||
case 2: stepper.set_z3_lock(false); break;
|
||||
#endif
|
||||
}
|
||||
@@ -397,7 +410,7 @@ void GcodeSuite::M422() {
|
||||
for (uint8_t i = 0; i < G34_PROBE_COUNT; ++i)
|
||||
SERIAL_ECHOLNPAIR_P(PSTR("M422 S"), i + 1, SP_X_STR, z_stepper_align_pos[i].x, SP_Y_STR, z_stepper_align_pos[i].y);
|
||||
#if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
|
||||
for (uint8_t i = 0; i < Z_STEPPER_COUNT; ++i)
|
||||
for (uint8_t i = 0; i < NUM_Z_STEPPER_DRIVERS; ++i)
|
||||
SERIAL_ECHOLNPAIR_P(PSTR("M422 W"), i + 1, SP_X_STR, z_stepper_align_stepper_pos[i].x, SP_Y_STR, z_stepper_align_stepper_pos[i].y);
|
||||
#endif
|
||||
return;
|
||||
@@ -446,7 +459,7 @@ void GcodeSuite::M422() {
|
||||
else {
|
||||
#if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
|
||||
position_index = parser.intval('W') - 1;
|
||||
if (!WITHIN(position_index, 0, Z_STEPPER_COUNT - 1)) {
|
||||
if (!WITHIN(position_index, 0, NUM_Z_STEPPER_DRIVERS - 1)) {
|
||||
SERIAL_ECHOLNPGM("?(W) Z-Stepper index invalid.");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -57,10 +57,11 @@
|
||||
* M666: Set Dual Endstops offsets for X, Y, and/or Z.
|
||||
* With no parameters report current offsets.
|
||||
*
|
||||
* For Triple Z Endstops:
|
||||
* For Triple / Quad Z Endstops:
|
||||
* Set Z2 Only: M666 S2 Z<offset>
|
||||
* Set Z3 Only: M666 S3 Z<offset>
|
||||
* Set Both: M666 Z<offset>
|
||||
* Set Z4 Only: M666 S4 Z<offset>
|
||||
* Set All: M666 Z<offset>
|
||||
*/
|
||||
void GcodeSuite::M666() {
|
||||
#if ENABLED(X_DUAL_ENDSTOPS)
|
||||
@@ -69,15 +70,20 @@
|
||||
#if ENABLED(Y_DUAL_ENDSTOPS)
|
||||
if (parser.seenval('Y')) endstops.y2_endstop_adj = parser.value_linear_units();
|
||||
#endif
|
||||
#if ENABLED(Z_TRIPLE_ENDSTOPS)
|
||||
#if ENABLED(Z_MULTI_ENDSTOPS)
|
||||
if (parser.seenval('Z')) {
|
||||
const float z_adj = parser.value_linear_units();
|
||||
const int ind = parser.intval('S');
|
||||
if (!ind || ind == 2) endstops.z2_endstop_adj = z_adj;
|
||||
if (!ind || ind == 3) endstops.z3_endstop_adj = z_adj;
|
||||
#if NUM_Z_STEPPER_DRIVERS >= 3
|
||||
const float z_adj = parser.value_linear_units();
|
||||
const int ind = parser.intval('S');
|
||||
if (!ind || ind == 2) endstops.z2_endstop_adj = z_adj;
|
||||
if (!ind || ind == 3) endstops.z3_endstop_adj = z_adj;
|
||||
#if NUM_Z_STEPPER_DRIVERS >= 4
|
||||
if (!ind || ind == 4) endstops.z4_endstop_adj = z_adj;
|
||||
#endif
|
||||
#else
|
||||
endstops.z2_endstop_adj = parser.value_linear_units();
|
||||
#endif
|
||||
}
|
||||
#elif Z_MULTI_ENDSTOPS
|
||||
if (parser.seen('Z')) endstops.z2_endstop_adj = parser.value_linear_units();
|
||||
#endif
|
||||
if (!parser.seen("XYZ")) {
|
||||
SERIAL_ECHOPGM("Dual Endstop Adjustment (mm): ");
|
||||
@@ -87,11 +93,14 @@
|
||||
#if ENABLED(Y_DUAL_ENDSTOPS)
|
||||
SERIAL_ECHOPAIR(" Y2:", endstops.y2_endstop_adj);
|
||||
#endif
|
||||
#if Z_MULTI_ENDSTOPS
|
||||
#if ENABLED(Z_MULTI_ENDSTOPS)
|
||||
SERIAL_ECHOPAIR(" Z2:", endstops.z2_endstop_adj);
|
||||
#endif
|
||||
#if ENABLED(Z_TRIPLE_ENDSTOPS)
|
||||
SERIAL_ECHOPAIR(" Z3:", endstops.z3_endstop_adj);
|
||||
#if NUM_Z_STEPPER_DRIVERS >= 3
|
||||
SERIAL_ECHOPAIR(" Z3:", endstops.z3_endstop_adj);
|
||||
#if NUM_Z_STEPPER_DRIVERS >= 4
|
||||
SERIAL_ECHOPAIR(" Z4:", endstops.z4_endstop_adj);
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
SERIAL_EOL();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
/**
|
||||
* Marlin 3D Printer Firmware
|
||||
* Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
||||
*
|
||||
* Based on Sprinter and grbl.
|
||||
* Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "../../inc/MarlinConfig.h"
|
||||
|
||||
#if ENABLED(SMART_EFFECTOR) && PIN_EXISTS(SMART_EFFECTOR_MOD)
|
||||
|
||||
#include "../gcode.h"
|
||||
#include "../../HAL/shared/Delay.h"
|
||||
#include "../parser.h"
|
||||
|
||||
/**
|
||||
* M672 - Set/reset Duet Smart Effector sensitivity
|
||||
*
|
||||
* One of these is required:
|
||||
* S<sensitivity> - 0-255
|
||||
* R - Flag to reset sensitivity to default
|
||||
*/
|
||||
|
||||
/**
|
||||
* The Marlin format for the M672 command is different than shown in the Duet Smart Effector
|
||||
* documentation https://duet3d.dozuki.com/Wiki/Smart_effector_and_carriage_adapters_for_delta_printer
|
||||
*
|
||||
* To set custom sensitivity:
|
||||
* Duet: M672 S105:aaa:bbb
|
||||
* Marlin: M672 Saaa
|
||||
*
|
||||
* (where aaa is the desired sensitivity and bbb is 255 - aaa).
|
||||
*
|
||||
* Revert sensitivity to factory settings:
|
||||
* Duet: M672 S105:131:131
|
||||
* Marlin: M672 R
|
||||
*/
|
||||
|
||||
#define M672_PROGBYTE 105 // magic byte to start programming custom sensitivity
|
||||
#define M672_ERASEBYTE 131 // magic byte to clear custom sensitivity
|
||||
|
||||
//
|
||||
// Smart Effector byte send protocol:
|
||||
//
|
||||
// 0 0 1 0 ... always 0010
|
||||
// b7 b6 b5 b4 ~b4 ... hi bits, NOT last bit
|
||||
// b3 b2 b1 b0 ~b0 ... lo bits, NOT last bit
|
||||
//
|
||||
void M672_send(uint8_t b) { // bit rate requirement: 1KHz +/- 30%
|
||||
for (uint8_t bits = 0; bits < 14; bits++) {
|
||||
switch (bits) {
|
||||
default: { OUT_WRITE(SMART_EFFECTOR_MOD_PIN, !!(b & 0x80)); b <<= 1; break; } // send bit, shift next into place
|
||||
case 7:
|
||||
case 12: { OUT_WRITE(SMART_EFFECTOR_MOD_PIN, !!(b & 0x80)); break; } // send bit. no shift
|
||||
case 8:
|
||||
case 13: { OUT_WRITE(SMART_EFFECTOR_MOD_PIN, !(b & 0x80)); b <<= 1; break; } // send inverted previous bit
|
||||
case 0: case 1: // 00
|
||||
case 3: { OUT_WRITE(SMART_EFFECTOR_MOD_PIN, LOW); break; } // 0010
|
||||
case 2: { OUT_WRITE(SMART_EFFECTOR_MOD_PIN, HIGH); break; } // 001
|
||||
}
|
||||
DELAY_US(1000);
|
||||
}
|
||||
}
|
||||
|
||||
void GcodeSuite::M672() {
|
||||
if (parser.seen('R')) {
|
||||
M672_send(M672_ERASEBYTE);
|
||||
M672_send(M672_ERASEBYTE);
|
||||
}
|
||||
else if (parser.seenval('S')) {
|
||||
const int8_t M672_sensitivity = parser.value_byte();
|
||||
M672_send(M672_PROGBYTE);
|
||||
M672_send(M672_sensitivity);
|
||||
M672_send(255 - M672_sensitivity);
|
||||
}
|
||||
else {
|
||||
SERIAL_ECHO_MSG("!'S' or 'R' parameter required.");
|
||||
return;
|
||||
}
|
||||
|
||||
OUT_WRITE(SMART_EFFECTOR_MOD_PIN, LOW); // Keep Smart Effector in NORMAL mode
|
||||
}
|
||||
|
||||
#endif // SMART_EFFECTOR && SMART_EFFECTOR_MOD_PIN
|
||||
@@ -41,7 +41,7 @@ void GcodeSuite::M108() {
|
||||
* M112: Full Shutdown
|
||||
*/
|
||||
void GcodeSuite::M112() {
|
||||
kill(PSTR("M112 Shutdown"), nullptr, true);
|
||||
kill(M112_KILL_STR, nullptr, true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -47,23 +47,38 @@ void GcodeSuite::M42() {
|
||||
|
||||
const pin_t pin = GET_PIN_MAP_PIN(pin_index);
|
||||
|
||||
#if FAN_COUNT > 0
|
||||
switch (pin) {
|
||||
#if HAS_FAN0
|
||||
case FAN0_PIN: thermalManager.fan_speed[0] = pin_status; return;
|
||||
#endif
|
||||
#if HAS_FAN1
|
||||
case FAN1_PIN: thermalManager.fan_speed[1] = pin_status; return;
|
||||
#endif
|
||||
#if HAS_FAN2
|
||||
case FAN2_PIN: thermalManager.fan_speed[2] = pin_status; return;
|
||||
#endif
|
||||
#if HAS_FAN3
|
||||
case FAN3_PIN: thermalManager.fan_speed[3] = pin_status; return;
|
||||
#endif
|
||||
#if HAS_FAN4
|
||||
case FAN4_PIN: thermalManager.fan_speed[4] = pin_status; return;
|
||||
#endif
|
||||
#if HAS_FAN5
|
||||
case FAN5_PIN: thermalManager.fan_speed[5] = pin_status; return;
|
||||
#endif
|
||||
#if HAS_FAN6
|
||||
case FAN6_PIN: thermalManager.fan_speed[6] = pin_status; return;
|
||||
#endif
|
||||
#if HAS_FAN7
|
||||
case FAN7_PIN: thermalManager.fan_speed[7] = pin_status; return;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!parser.boolval('I') && pin_is_protected(pin)) return protected_pin_err();
|
||||
|
||||
pinMode(pin, OUTPUT);
|
||||
extDigitalWrite(pin, pin_status);
|
||||
analogWrite(pin, pin_status);
|
||||
|
||||
#if FAN_COUNT > 0
|
||||
switch (pin) {
|
||||
#if HAS_FAN0
|
||||
case FAN0_PIN: thermalManager.fan_speed[0] = pin_status; break;
|
||||
#endif
|
||||
#if HAS_FAN1
|
||||
case FAN1_PIN: thermalManager.fan_speed[1] = pin_status; break;
|
||||
#endif
|
||||
#if HAS_FAN2
|
||||
case FAN2_PIN: thermalManager.fan_speed[2] = pin_status; break;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -28,6 +28,9 @@
|
||||
*/
|
||||
void GcodeSuite::M85() {
|
||||
|
||||
if (parser.seen('S')) max_inactive_time = parser.value_millis_from_seconds();
|
||||
if (parser.seen('S')) {
|
||||
reset_stepper_timeout();
|
||||
max_inactive_time = parser.value_millis_from_seconds();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -115,6 +115,9 @@ void GcodeSuite::M122() {
|
||||
#if AXIS_IS_L64XX(Z3)
|
||||
L6470_say_status(Z3);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(Z4)
|
||||
L6470_say_status(Z4);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(E0)
|
||||
L6470_say_status(E0);
|
||||
#endif
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
* 1 - monitor only X, Y, Z or E1
|
||||
* 2 - monitor only X2, Y2, Z2 or E2
|
||||
* 3 - monitor only Z3 or E3
|
||||
* 4 - monitor only E4
|
||||
* 4 - monitor only Z4 or E4
|
||||
* 5 - monitor only E5
|
||||
* Xxxx, Yxxx, Zxxx, Exxx - axis to change (optional)
|
||||
* L6474 - current in mA (4A max)
|
||||
@@ -77,7 +77,7 @@
|
||||
* KVAL_DEC
|
||||
* Vs compensation (if enabled)
|
||||
*/
|
||||
void L6470_report_current(L64XX &motor, const L64XX_axis_t axis) {
|
||||
void L64XX_report_current(L64XX &motor, const L64XX_axis_t axis) {
|
||||
|
||||
if (L64xxManager.spi_abort) return; // don't do anything if set_directions() has occurred
|
||||
|
||||
@@ -110,7 +110,7 @@ void L6470_report_current(L64XX &motor, const L64XX_axis_t axis) {
|
||||
const float comp_coef = 1600.0f / L6470_ADC_out_limited;
|
||||
const uint16_t MicroSteps = _BV(motor.GetParam(L6470_STEP_MODE) & 0x07);
|
||||
|
||||
say_axis_status(axis, status);
|
||||
say_axis_status(axis, sh.STATUS_AXIS_RAW);
|
||||
|
||||
SERIAL_ECHOPGM("...OverCurrent Threshold: ");
|
||||
sprintf_P(temp_buf, PSTR("%2d ("), OverCurrent_Threshold);
|
||||
@@ -181,7 +181,7 @@ void L6470_report_current(L64XX &motor, const L64XX_axis_t axis) {
|
||||
const uint16_t L6470_ADC_out = motor.GetParam(L6470_ADC_OUT) & 0x1F,
|
||||
L6474_TVAL_val = motor.GetParam(L6474_TVAL) & 0x7F;
|
||||
|
||||
say_axis_status(axis, status);
|
||||
say_axis_status(axis, sh.STATUS_AXIS_RAW);
|
||||
|
||||
SERIAL_ECHOPGM("...OverCurrent Threshold: ");
|
||||
sprintf_P(temp_buf, PSTR("%2d ("), OverCurrent_Threshold);
|
||||
@@ -192,15 +192,13 @@ void L6470_report_current(L64XX &motor, const L64XX_axis_t axis) {
|
||||
sprintf_P(temp_buf, PSTR("%2d ("), L6474_TVAL_val);
|
||||
SERIAL_ECHO(temp_buf);
|
||||
SERIAL_ECHO((L6474_TVAL_val + 1) * motor.STALL_CURRENT_CONSTANT_INV);
|
||||
SERIAL_ECHOLNPGM(" mA Motor Status: NA)");
|
||||
SERIAL_ECHOLNPGM(" mA) Motor Status: NA");
|
||||
|
||||
const uint16_t MicroSteps = _BV(motor.GetParam(L6470_STEP_MODE) & 0x07); //NOMORE(MicroSteps, 16);
|
||||
SERIAL_ECHOLNPAIR("...MicroSteps: ", MicroSteps,
|
||||
" ADC_OUT: ", L6470_ADC_out,
|
||||
" Vs_compensation: NA");
|
||||
|
||||
SERIAL_EOL();
|
||||
SERIAL_ECHOPAIR("...MicroSteps: ", MicroSteps,
|
||||
" ADC_OUT: ", L6470_ADC_out);
|
||||
|
||||
SERIAL_ECHOLNPGM(" Vs_compensation: NA\n");
|
||||
SERIAL_ECHOLNPGM("...KVAL_HOLD: NA"
|
||||
" KVAL_RUN : NA"
|
||||
" KVAL_ACC: NA"
|
||||
@@ -274,6 +272,9 @@ void GcodeSuite::M906() {
|
||||
#if AXIS_IS_L64XX(Z3)
|
||||
if (index == 2) L6470_SET_KVAL_HOLD(Z3);
|
||||
#endif
|
||||
#if AXIS_DRIVER_TYPE_Z4(L6470)
|
||||
if (index == 3) L6470_SET_KVAL_HOLD(Z4);
|
||||
#endif
|
||||
break;
|
||||
case E_AXIS: {
|
||||
const int8_t target_extruder = get_target_extruder_from_command();
|
||||
@@ -303,48 +304,51 @@ void GcodeSuite::M906() {
|
||||
}
|
||||
|
||||
if (report_current) {
|
||||
#define L6470_REPORT_CURRENT(Q) L6470_report_current(stepper##Q, Q)
|
||||
#define L64XX_REPORT_CURRENT(Q) L64XX_report_current(stepper##Q, Q)
|
||||
|
||||
L64xxManager.spi_active = true; // Tell set_directions() a series of SPI transfers is underway
|
||||
|
||||
#if AXIS_IS_L64XX(X)
|
||||
L6470_REPORT_CURRENT(X);
|
||||
L64XX_REPORT_CURRENT(X);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(X2)
|
||||
L6470_REPORT_CURRENT(X2);
|
||||
L64XX_REPORT_CURRENT(X2);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(Y)
|
||||
L6470_REPORT_CURRENT(Y);
|
||||
L64XX_REPORT_CURRENT(Y);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(Y2)
|
||||
L6470_REPORT_CURRENT(Y2);
|
||||
L64XX_REPORT_CURRENT(Y2);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(Z)
|
||||
L6470_REPORT_CURRENT(Z);
|
||||
L64XX_REPORT_CURRENT(Z);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(Z2)
|
||||
L6470_REPORT_CURRENT(Z2);
|
||||
L64XX_REPORT_CURRENT(Z2);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(Z3)
|
||||
L6470_REPORT_CURRENT(Z3);
|
||||
L64XX_REPORT_CURRENT(Z3);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(Z4)
|
||||
L64XX_REPORT_CURRENT(Z4);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(E0)
|
||||
L6470_REPORT_CURRENT(E0);
|
||||
L64XX_REPORT_CURRENT(E0);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(E1)
|
||||
L6470_REPORT_CURRENT(E1);
|
||||
L64XX_REPORT_CURRENT(E1);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(E2)
|
||||
L6470_REPORT_CURRENT(E2);
|
||||
L64XX_REPORT_CURRENT(E2);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(E3)
|
||||
L6470_REPORT_CURRENT(E3);
|
||||
L64XX_REPORT_CURRENT(E3);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(E4)
|
||||
L6470_REPORT_CURRENT(E4);
|
||||
L64XX_REPORT_CURRENT(E4);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(E5)
|
||||
L6470_REPORT_CURRENT(E5);
|
||||
L64XX_REPORT_CURRENT(E5);
|
||||
#endif
|
||||
|
||||
L64xxManager.spi_active = false; // done with all SPI transfers - clear handshake flags
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
* 1 - monitor only X, Y, Z, E1
|
||||
* 2 - monitor only X2, Y2, Z2, E2
|
||||
* 3 - monitor only Z3, E3
|
||||
* 4 - monitor only Z4, E4
|
||||
*
|
||||
* Xxxx, Yxxx, Zxxx, Exxx - axis to be monitored with displacement
|
||||
* xxx (1-255) is distance moved on either side of current position
|
||||
|
||||
@@ -44,9 +44,10 @@ void tmc_set_stealthChop(TMC &st, const bool enable) {
|
||||
static void set_stealth_status(const bool enable, const int8_t target_extruder) {
|
||||
#define TMC_SET_STEALTH(Q) tmc_set_stealthChop(stepper##Q, enable)
|
||||
|
||||
#if AXIS_HAS_STEALTHCHOP(X) || AXIS_HAS_STEALTHCHOP(X2) \
|
||||
|| AXIS_HAS_STEALTHCHOP(Y) || AXIS_HAS_STEALTHCHOP(Y2) \
|
||||
|| AXIS_HAS_STEALTHCHOP(Z) || AXIS_HAS_STEALTHCHOP(Z2) || AXIS_HAS_STEALTHCHOP(Z3)
|
||||
#if AXIS_HAS_STEALTHCHOP(X) || AXIS_HAS_STEALTHCHOP(X2) \
|
||||
|| AXIS_HAS_STEALTHCHOP(Y) || AXIS_HAS_STEALTHCHOP(Y2) \
|
||||
|| AXIS_HAS_STEALTHCHOP(Z) || AXIS_HAS_STEALTHCHOP(Z2) \
|
||||
|| AXIS_HAS_STEALTHCHOP(Z3) || AXIS_HAS_STEALTHCHOP(Z4)
|
||||
const uint8_t index = parser.byteval('I');
|
||||
#endif
|
||||
|
||||
@@ -78,6 +79,9 @@ static void set_stealth_status(const bool enable, const int8_t target_extruder)
|
||||
#if AXIS_HAS_STEALTHCHOP(Z3)
|
||||
if (index == 2) TMC_SET_STEALTH(Z3);
|
||||
#endif
|
||||
#if AXIS_HAS_STEALTHCHOP(Z4)
|
||||
if (index == 3) TMC_SET_STEALTH(Z4);
|
||||
#endif
|
||||
break;
|
||||
case E_AXIS: {
|
||||
if (target_extruder < 0) return;
|
||||
@@ -130,6 +134,9 @@ static void say_stealth_status() {
|
||||
#if AXIS_HAS_STEALTHCHOP(Z3)
|
||||
TMC_SAY_STEALTH_STATUS(Z3);
|
||||
#endif
|
||||
#if AXIS_HAS_STEALTHCHOP(Z4)
|
||||
TMC_SAY_STEALTH_STATUS(Z4);
|
||||
#endif
|
||||
#if AXIS_HAS_STEALTHCHOP(E0)
|
||||
TMC_SAY_STEALTH_STATUS(E0);
|
||||
#endif
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
* Z[current] - Set mA current for Z driver(s)
|
||||
* E[current] - Set mA current for E driver(s)
|
||||
*
|
||||
* I[index] - Axis sub-index (Omit or 0 for X, Y, Z; 1 for X2, Y2, Z2; 2 for Z3.)
|
||||
* I[index] - Axis sub-index (Omit or 0 for X, Y, Z; 1 for X2, Y2, Z2; 2 for Z3; 3 for Z4.)
|
||||
* T[index] - Extruder index (Zero-based. Omit for E0 only.)
|
||||
*
|
||||
* With no parameters report driver currents.
|
||||
@@ -48,7 +48,7 @@ void GcodeSuite::M906() {
|
||||
|
||||
bool report = true;
|
||||
|
||||
#if AXIS_IS_TMC(X) || AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3)
|
||||
#if AXIS_IS_TMC(X) || AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3) || AXIS_IS_TMC(Z4)
|
||||
const uint8_t index = parser.byteval('I');
|
||||
#endif
|
||||
|
||||
@@ -81,6 +81,9 @@ void GcodeSuite::M906() {
|
||||
#if AXIS_IS_TMC(Z3)
|
||||
if (index == 2) TMC_SET_CURRENT(Z3);
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z4)
|
||||
if (index == 3) TMC_SET_CURRENT(Z4);
|
||||
#endif
|
||||
break;
|
||||
case E_AXIS: {
|
||||
const int8_t target_extruder = get_target_extruder_from_command();
|
||||
@@ -131,6 +134,9 @@ void GcodeSuite::M906() {
|
||||
#if AXIS_IS_TMC(Z3)
|
||||
TMC_SAY_CURRENT(Z3);
|
||||
#endif
|
||||
#if AXIS_IS_TMC(Z4)
|
||||
TMC_SAY_CURRENT(Z4);
|
||||
#endif
|
||||
#if AXIS_IS_TMC(E0)
|
||||
TMC_SAY_CURRENT(E0);
|
||||
#endif
|
||||
|
||||
@@ -37,8 +37,8 @@
|
||||
|
||||
#define M91x_SOME_X (M91x_USE(X) || M91x_USE(X2))
|
||||
#define M91x_SOME_Y (M91x_USE(Y) || M91x_USE(Y2))
|
||||
#define M91x_SOME_Z (M91x_USE(Z) || M91x_USE(Z2) || M91x_USE(Z3))
|
||||
#define M91x_SOME_E (M91x_USE_E(0) || M91x_USE_E(1) || M91x_USE_E(2) || M91x_USE_E(3) || M91x_USE_E(4) || M91x_USE_E(5))
|
||||
#define M91x_SOME_Z (M91x_USE(Z) || M91x_USE(Z2) || M91x_USE(Z3) || M91x_USE(Z4))
|
||||
#define M91x_SOME_E (M91x_USE_E(0) || M91x_USE_E(1) || M91x_USE_E(2) || M91x_USE_E(3) || M91x_USE_E(4) || M91x_USE_E(5) || M91x_USE_E(6) || M91x_USE_E(7))
|
||||
|
||||
#if !M91x_SOME_X && !M91x_SOME_Y && !M91x_SOME_Z && !M91x_SOME_E
|
||||
#error "MONITOR_DRIVER_STATUS requires at least one TMC2130, 2160, 2208, 2209, 2660, 5130, or 5160."
|
||||
@@ -70,6 +70,9 @@
|
||||
#if M91x_USE(Z3)
|
||||
tmc_report_otpw(stepperZ3);
|
||||
#endif
|
||||
#if M91x_USE(Z4)
|
||||
tmc_report_otpw(stepperZ4);
|
||||
#endif
|
||||
#if M91x_USE_E(0)
|
||||
tmc_report_otpw(stepperE0);
|
||||
#endif
|
||||
@@ -88,11 +91,17 @@
|
||||
#if M91x_USE_E(5)
|
||||
tmc_report_otpw(stepperE5);
|
||||
#endif
|
||||
#if M91x_USE_E(6)
|
||||
tmc_report_otpw(stepperE6);
|
||||
#endif
|
||||
#if M91x_USE_E(7)
|
||||
tmc_report_otpw(stepperE7);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* M912: Clear TMC stepper driver overtemperature pre-warn flag held by the library
|
||||
* Specify one or more axes with X, Y, Z, X1, Y1, Z1, X2, Y2, Z2, Z3 and E[index].
|
||||
* Specify one or more axes with X, Y, Z, X1, Y1, Z1, X2, Y2, Z2, Z3, Z4 and E[index].
|
||||
* If no axes are given, clear all.
|
||||
*
|
||||
* Examples:
|
||||
@@ -160,6 +169,9 @@
|
||||
#if M91x_USE(Z3)
|
||||
if (hasNone || zval == 3 || (hasZ && zval < 0)) tmc_clear_otpw(stepperZ3);
|
||||
#endif
|
||||
#if M91x_USE(Z4)
|
||||
if (hasNone || zval == 4 || (hasZ && zval < 0)) tmc_clear_otpw(stepperZ4);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if M91x_SOME_E
|
||||
@@ -182,6 +194,12 @@
|
||||
#if M91x_USE_E(5)
|
||||
if (hasNone || eval == 5 || (hasE && eval < 0)) tmc_clear_otpw(stepperE5);
|
||||
#endif
|
||||
#if M91x_USE_E(6)
|
||||
if (hasNone || eval == 6 || (hasE && eval < 0)) tmc_clear_otpw(stepperE6);
|
||||
#endif
|
||||
#if M91x_USE_E(7)
|
||||
if (hasNone || eval == 7 || (hasE && eval < 0)) tmc_clear_otpw(stepperE7);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -198,7 +216,7 @@
|
||||
#define TMC_SET_PWMTHRS_E(E) stepperE##E.set_pwm_thrs(value)
|
||||
|
||||
bool report = true;
|
||||
#if AXIS_IS_TMC(X) || AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3)
|
||||
#if AXIS_IS_TMC(X) || AXIS_IS_TMC(X2) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Y2) || AXIS_IS_TMC(Z) || AXIS_IS_TMC(Z2) || AXIS_IS_TMC(Z3) || AXIS_IS_TMC(Z4)
|
||||
const uint8_t index = parser.byteval('I');
|
||||
#endif
|
||||
LOOP_XYZE(i) if (int32_t value = parser.longval(axis_codes[i])) {
|
||||
@@ -230,6 +248,9 @@
|
||||
#if AXIS_HAS_STEALTHCHOP(Z3)
|
||||
if (index == 0 || index == 3) TMC_SET_PWMTHRS(Z,Z3);
|
||||
#endif
|
||||
#if AXIS_HAS_STEALTHCHOP(Z4)
|
||||
if (index == 0 || index == 4) TMC_SET_PWMTHRS(Z,Z4);
|
||||
#endif
|
||||
break;
|
||||
case E_AXIS: {
|
||||
#if E_STEPPERS
|
||||
@@ -254,6 +275,12 @@
|
||||
#if E_STEPPERS > 5 && AXIS_HAS_STEALTHCHOP(E5)
|
||||
case 5: TMC_SET_PWMTHRS_E(5); break;
|
||||
#endif
|
||||
#if E_STEPPERS > 6 && AXIS_HAS_STEALTHCHOP(E6)
|
||||
case 6: TMC_SET_PWMTHRS_E(6); break;
|
||||
#endif
|
||||
#if E_STEPPERS > 7 && AXIS_HAS_STEALTHCHOP(E7)
|
||||
case 7: TMC_SET_PWMTHRS_E(7); break;
|
||||
#endif
|
||||
}
|
||||
#endif // E_STEPPERS
|
||||
} break;
|
||||
@@ -282,6 +309,9 @@
|
||||
#if AXIS_HAS_STEALTHCHOP(Z3)
|
||||
TMC_SAY_PWMTHRS(Z,Z3);
|
||||
#endif
|
||||
#if AXIS_HAS_STEALTHCHOP(Z4)
|
||||
TMC_SAY_PWMTHRS(Z,Z4);
|
||||
#endif
|
||||
#if E_STEPPERS && AXIS_HAS_STEALTHCHOP(E0)
|
||||
TMC_SAY_PWMTHRS_E(0);
|
||||
#endif
|
||||
@@ -300,6 +330,12 @@
|
||||
#if E_STEPPERS > 5 && AXIS_HAS_STEALTHCHOP(E5)
|
||||
TMC_SAY_PWMTHRS_E(5);
|
||||
#endif
|
||||
#if E_STEPPERS > 6 && AXIS_HAS_STEALTHCHOP(E6)
|
||||
TMC_SAY_PWMTHRS_E(6);
|
||||
#endif
|
||||
#if E_STEPPERS > 7 && AXIS_HAS_STEALTHCHOP(E7)
|
||||
TMC_SAY_PWMTHRS_E(7);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif // HYBRID_THRESHOLD
|
||||
@@ -347,6 +383,9 @@
|
||||
#if AXIS_HAS_STALLGUARD(Z3)
|
||||
if (index == 0 || index == 3) stepperZ3.homing_threshold(value);
|
||||
#endif
|
||||
#if AXIS_HAS_STALLGUARD(Z4)
|
||||
if (index == 0 || index == 4) stepperZ4.homing_threshold(value);
|
||||
#endif
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
@@ -379,6 +418,9 @@
|
||||
#if AXIS_HAS_STALLGUARD(Z3)
|
||||
tmc_print_sgt(stepperZ3);
|
||||
#endif
|
||||
#if AXIS_HAS_STALLGUARD(Z4)
|
||||
tmc_print_sgt(stepperZ4);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
+25
-21
@@ -562,14 +562,6 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
|
||||
case 206: M206(); break; // M206: Set home offsets
|
||||
#endif
|
||||
|
||||
#if ENABLED(DELTA)
|
||||
case 665: M665(); break; // M665: Set delta configurations
|
||||
#endif
|
||||
|
||||
#if ANY(DELTA, X_DUAL_ENDSTOPS, Y_DUAL_ENDSTOPS, Z_DUAL_ENDSTOPS)
|
||||
case 666: M666(); break; // M666: Set delta or dual endstop adjustment
|
||||
#endif
|
||||
|
||||
#if ENABLED(FWRETRACT)
|
||||
case 207: M207(); break; // M207: Set Retract Length, Feedrate, and Z lift
|
||||
case 208: M208(); break; // M208: Set Recover (unretract) Additional Length and Feedrate
|
||||
@@ -714,7 +706,7 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
|
||||
#endif
|
||||
|
||||
#if ENABLED(SDSUPPORT)
|
||||
case 524: M524(); break; // M524: Abort the current SD print job
|
||||
case 524: M524(); break; // M524: Abort the current SD print job
|
||||
#endif
|
||||
|
||||
#if ENABLED(SD_ABORT_ON_ENDSTOP_HIT)
|
||||
@@ -725,14 +717,6 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
|
||||
case 575: M575(); break; // M575: Set serial baudrate
|
||||
#endif
|
||||
|
||||
#if HAS_BED_PROBE
|
||||
case 851: M851(); break; // M851: Set Z Probe Z Offset
|
||||
#endif
|
||||
|
||||
#if ENABLED(SKEW_CORRECTION_GCODE)
|
||||
case 852: M852(); break; // M852: Set Skew factors
|
||||
#endif
|
||||
|
||||
#if ENABLED(ADVANCED_PAUSE_FEATURE)
|
||||
case 600: M600(); break; // M600: Pause for Filament Change
|
||||
case 603: M603(); break; // M603: Configure Filament Change
|
||||
@@ -742,21 +726,37 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
|
||||
case 605: M605(); break; // M605: Set Dual X Carriage movement mode
|
||||
#endif
|
||||
|
||||
#if ENABLED(DELTA)
|
||||
case 665: M665(); break; // M665: Set delta configurations
|
||||
#endif
|
||||
|
||||
#if ENABLED(DELTA) || HAS_EXTRA_ENDSTOPS
|
||||
case 666: M666(); break; // M666: Set delta or multiple endstop adjustment
|
||||
#endif
|
||||
|
||||
#if ENABLED(SMART_EFFECTOR) && PIN_EXISTS(SMART_EFFECTOR_MOD)
|
||||
case 672: M672(); break; // M672: Set/clear Duet Smart Effector sensitivity
|
||||
#endif
|
||||
|
||||
#if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
|
||||
case 701: M701(); break; // M701: Load Filament
|
||||
case 702: M702(); break; // M702: Unload Filament
|
||||
#endif
|
||||
|
||||
#if ENABLED(MAX7219_GCODE)
|
||||
case 7219: M7219(); break; // M7219: Set LEDs, columns, and rows
|
||||
#endif
|
||||
|
||||
#if ENABLED(GCODE_MACROS)
|
||||
case 810: case 811: case 812: case 813: case 814:
|
||||
case 815: case 816: case 817: case 818: case 819:
|
||||
M810_819(); break; // M810-M819: Define/execute G-code macro
|
||||
#endif
|
||||
|
||||
#if HAS_BED_PROBE
|
||||
case 851: M851(); break; // M851: Set Z Probe Z Offset
|
||||
#endif
|
||||
|
||||
#if ENABLED(SKEW_CORRECTION_GCODE)
|
||||
case 852: M852(); break; // M852: Set Skew factors
|
||||
#endif
|
||||
|
||||
#if ENABLED(PROBE_TEMP_COMPENSATION)
|
||||
case 871: M871(); break; // M871: Print/reset/clear first layer temperature offset values
|
||||
#endif
|
||||
@@ -847,6 +847,10 @@ void GcodeSuite::process_parsed_command(const bool no_ok/*=false*/) {
|
||||
case 1000: M1000(); break; // M1000: Resume from power-loss
|
||||
#endif
|
||||
|
||||
#if ENABLED(MAX7219_GCODE)
|
||||
case 7219: M7219(); break; // M7219: Set LEDs, columns, and rows
|
||||
#endif
|
||||
|
||||
default: parser.unknown_command_error(); break;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -228,7 +228,8 @@
|
||||
* M603 - Configure filament change: "M603 T<tool> U<unload_length> L<load_length>". (Requires ADVANCED_PAUSE_FEATURE)
|
||||
* M605 - Set Dual X-Carriage movement mode: "M605 S<mode> [X<x_offset>] [R<temp_offset>]". (Requires DUAL_X_CARRIAGE)
|
||||
* M665 - Set delta configurations: "M665 H<delta height> L<diagonal rod> R<delta radius> S<segments/s> B<calibration radius> X<Alpha angle trim> Y<Beta angle trim> Z<Gamma angle trim> (Requires DELTA)
|
||||
* M666 - Set/get offsets for delta (Requires DELTA) or dual endstops (Requires [XYZ]_DUAL_ENDSTOPS).
|
||||
* M666 - Set/get offsets for delta (Requires DELTA) or dual endstops. (Requires [XYZ]_DUAL_ENDSTOPS)
|
||||
* M672 - Set/Reset Duet Smart Effector's sensitivity. (Requires SMART_EFFECTOR and SMART_EFFECTOR_MOD_PIN)
|
||||
* M701 - Load filament (Requires FILAMENT_LOAD_UNLOAD_GCODES)
|
||||
* M702 - Unload filament (Requires FILAMENT_LOAD_UNLOAD_GCODES)
|
||||
* M810-M819 - Define/execute a G-code macro (Requires GCODE_MACROS)
|
||||
@@ -850,6 +851,10 @@ private:
|
||||
static void M666();
|
||||
#endif
|
||||
|
||||
#if ENABLED(SMART_EFFECTOR) && PIN_EXISTS(SMART_EFFECTOR_MOD)
|
||||
static void M672();
|
||||
#endif
|
||||
|
||||
#if ENABLED(FILAMENT_LOAD_UNLOAD_GCODES)
|
||||
static void M701();
|
||||
static void M702();
|
||||
|
||||
@@ -121,6 +121,9 @@
|
||||
#if AXIS_IS_L64XX(Z3)
|
||||
REPORT_ABSOLUTE_POS(Z3);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(Z4)
|
||||
REPORT_ABSOLUTE_POS(Z4);
|
||||
#endif
|
||||
#if AXIS_IS_L64XX(E0)
|
||||
REPORT_ABSOLUTE_POS(E0);
|
||||
#endif
|
||||
|
||||
@@ -105,7 +105,10 @@ void plan_arc(
|
||||
|
||||
const feedRate_t scaled_fr_mm_s = MMS_SCALED(feedrate_mm_s);
|
||||
|
||||
#ifdef ARC_SEGMENTS_PER_SEC
|
||||
#ifdef ARC_SEGMENTS_PER_R
|
||||
float seg_length = MM_PER_ARC_SEGMENT * radius;
|
||||
LIMIT(seg_length, MM_PER_ARC_SEGMENT, ARC_SEGMENTS_PER_R);
|
||||
#elif ARC_SEGMENTS_PER_SEC
|
||||
float seg_length = scaled_fr_mm_s * RECIPROCAL(ARC_SEGMENTS_PER_SEC);
|
||||
NOLESS(seg_length, MM_PER_ARC_SEGMENT);
|
||||
#else
|
||||
|
||||
@@ -440,7 +440,7 @@ void GCodeQueue::get_serial_commands() {
|
||||
wait_for_user = false;
|
||||
#endif
|
||||
}
|
||||
if (strcmp(command, "M112") == 0) kill();
|
||||
if (strcmp(command, "M112") == 0) kill(M112_KILL_STR, nullptr, true);
|
||||
if (strcmp(command, "M410") == 0) quickstop_stepper();
|
||||
#endif
|
||||
|
||||
|
||||
@@ -526,6 +526,7 @@
|
||||
#define GRID_MAX_POINTS ((GRID_MAX_POINTS_X) * (GRID_MAX_POINTS_Y))
|
||||
#endif
|
||||
|
||||
#define HAS_EXTRA_ENDSTOPS ANY(X_DUAL_ENDSTOPS, Y_DUAL_ENDSTOPS, Z_MULTI_ENDSTOPS)
|
||||
#define HAS_SOFTWARE_ENDSTOPS EITHER(MIN_SOFTWARE_ENDSTOPS, MAX_SOFTWARE_ENDSTOPS)
|
||||
#define HAS_RESUME_CONTINUE ANY(EXTENSIBLE_UI, NEWPANEL, EMERGENCY_PARSER)
|
||||
#define HAS_COLOR_LEDS ANY(BLINKM, RGB_LED, RGBW_LED, PCA9632, PCA9533, NEOPIXEL_LED)
|
||||
@@ -535,10 +536,6 @@
|
||||
#define HAS_SERVICE_INTERVALS (ENABLED(PRINTCOUNTER) && (SERVICE_INTERVAL_1 > 0 || SERVICE_INTERVAL_2 > 0 || SERVICE_INTERVAL_3 > 0))
|
||||
#define HAS_FILAMENT_SENSOR ENABLED(FILAMENT_RUNOUT_SENSOR)
|
||||
|
||||
#define Z_MULTI_STEPPER_DRIVERS EITHER(Z_DUAL_STEPPER_DRIVERS, Z_TRIPLE_STEPPER_DRIVERS)
|
||||
#define Z_MULTI_ENDSTOPS EITHER(Z_DUAL_ENDSTOPS, Z_TRIPLE_ENDSTOPS)
|
||||
#define HAS_EXTRA_ENDSTOPS (EITHER(X_DUAL_ENDSTOPS, Y_DUAL_ENDSTOPS) || Z_MULTI_ENDSTOPS)
|
||||
|
||||
#define HAS_GAMES ANY(MARLIN_BRICKOUT, MARLIN_INVADERS, MARLIN_SNAKE, MARLIN_MAZE)
|
||||
#define HAS_GAME_MENU (1 < ENABLED(MARLIN_BRICKOUT) + ENABLED(MARLIN_INVADERS) + ENABLED(MARLIN_SNAKE) + ENABLED(MARLIN_MAZE))
|
||||
|
||||
|
||||
@@ -34,6 +34,8 @@
|
||||
#undef TEMP_SENSOR_3
|
||||
#undef TEMP_SENSOR_4
|
||||
#undef TEMP_SENSOR_5
|
||||
#undef TEMP_SENSOR_6
|
||||
#undef TEMP_SENSOR_7
|
||||
#undef FWRETRACT
|
||||
#undef PIDTEMP
|
||||
#undef AUTOTEMP
|
||||
@@ -54,6 +56,11 @@
|
||||
#undef SHOW_TEMP_ADC_VALUES
|
||||
#endif
|
||||
|
||||
// Multiple Z steppers
|
||||
#ifndef NUM_Z_STEPPER_DRIVERS
|
||||
#define NUM_Z_STEPPER_DRIVERS 1
|
||||
#endif
|
||||
|
||||
#define HAS_CUTTER EITHER(SPINDLE_FEATURE, LASER_FEATURE)
|
||||
|
||||
#if !defined(__AVR__) || !defined(USBCON)
|
||||
|
||||
@@ -341,7 +341,7 @@
|
||||
* Temp Sensor defines
|
||||
*/
|
||||
|
||||
#define ANY_TEMP_SENSOR_IS(n) (TEMP_SENSOR_0 == (n) || TEMP_SENSOR_1 == (n) || TEMP_SENSOR_2 == (n) || TEMP_SENSOR_3 == (n) || TEMP_SENSOR_4 == (n) || TEMP_SENSOR_5 == (n) || TEMP_SENSOR_BED == (n) || TEMP_SENSOR_PROBE == (n) || TEMP_SENSOR_CHAMBER == (n))
|
||||
#define ANY_TEMP_SENSOR_IS(n) (TEMP_SENSOR_0 == (n) || TEMP_SENSOR_1 == (n) || TEMP_SENSOR_2 == (n) || TEMP_SENSOR_3 == (n) || TEMP_SENSOR_4 == (n) || TEMP_SENSOR_5 == (n) || TEMP_SENSOR_6 == (n) || TEMP_SENSOR_7 == (n) || TEMP_SENSOR_BED == (n) || TEMP_SENSOR_PROBE == (n) || TEMP_SENSOR_CHAMBER == (n))
|
||||
|
||||
#define HAS_USER_THERMISTORS ANY_TEMP_SENSOR_IS(1000)
|
||||
|
||||
@@ -483,6 +483,44 @@
|
||||
#undef HEATER_5_MAXTEMP
|
||||
#endif
|
||||
|
||||
#if TEMP_SENSOR_6 == -4
|
||||
#define HEATER_6_USES_AD8495
|
||||
#elif TEMP_SENSOR_6 == -3
|
||||
#error "MAX31855 Thermocouples (-3) not supported for TEMP_SENSOR_6."
|
||||
#elif TEMP_SENSOR_6 == -2
|
||||
#error "MAX6675 Thermocouples (-2) not supported for TEMP_SENSOR_6."
|
||||
#elif TEMP_SENSOR_6 == -1
|
||||
#define HEATER_6_USES_AD595
|
||||
#elif TEMP_SENSOR_6 > 0
|
||||
#define THERMISTOR_HEATER_6 TEMP_SENSOR_6
|
||||
#define HEATER_6_USES_THERMISTOR
|
||||
#if TEMP_SENSOR_6 == 1000
|
||||
#define HEATER_6_USER_THERMISTOR
|
||||
#endif
|
||||
#else
|
||||
#undef HEATER_6_MINTEMP
|
||||
#undef HEATER_6_MAXTEMP
|
||||
#endif
|
||||
|
||||
#if TEMP_SENSOR_7 == -4
|
||||
#define HEATER_7_USES_AD8495
|
||||
#elif TEMP_SENSOR_7 == -3
|
||||
#error "MAX31855 Thermocouples (-3) not supported for TEMP_SENSOR_7."
|
||||
#elif TEMP_SENSOR_7 == -2
|
||||
#error "MAX7775 Thermocouples (-2) not supported for TEMP_SENSOR_7."
|
||||
#elif TEMP_SENSOR_7 == -1
|
||||
#define HEATER_7_USES_AD595
|
||||
#elif TEMP_SENSOR_7 > 0
|
||||
#define THERMISTOR_HEATER_7 TEMP_SENSOR_7
|
||||
#define HEATER_7_USES_THERMISTOR
|
||||
#if TEMP_SENSOR_7 == 1000
|
||||
#define HEATER_7_USER_THERMISTOR
|
||||
#endif
|
||||
#else
|
||||
#undef HEATER_7_MINTEMP
|
||||
#undef HEATER_7_MAXTEMP
|
||||
#endif
|
||||
|
||||
#if TEMP_SENSOR_BED == -4
|
||||
#define HEATER_BED_USES_AD8495
|
||||
#elif TEMP_SENSOR_BED == -3
|
||||
@@ -538,8 +576,8 @@
|
||||
#endif
|
||||
|
||||
#define HOTEND_USES_THERMISTOR ANY( \
|
||||
HEATER_0_USES_THERMISTOR, HEATER_1_USES_THERMISTOR, HEATER_2_USES_THERMISTOR, \
|
||||
HEATER_3_USES_THERMISTOR, HEATER_4_USES_THERMISTOR, HEATER_5_USES_THERMISTOR)
|
||||
HEATER_0_USES_THERMISTOR, HEATER_1_USES_THERMISTOR, HEATER_2_USES_THERMISTOR, HEATER_3_USES_THERMISTOR, \
|
||||
HEATER_4_USES_THERMISTOR, HEATER_5_USES_THERMISTOR, HEATER_6_USES_THERMISTOR, HEATER_7_USES_THERMISTOR )
|
||||
|
||||
/**
|
||||
* Default hotend offsets, if not defined
|
||||
@@ -687,9 +725,6 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Is an endstop plug used for the X2 endstop?
|
||||
#define IS_X2_ENDSTOP(A,M) (ENABLED(X_DUAL_ENDSTOPS) && X2_USE_ENDSTOP == _##A##M##_)
|
||||
|
||||
/**
|
||||
* Y_DUAL_ENDSTOPS endstop reassignment
|
||||
*/
|
||||
@@ -743,13 +778,11 @@
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Is an endstop plug used for the Y2 endstop or the bed probe?
|
||||
#define IS_Y2_ENDSTOP(A,M) (ENABLED(Y_DUAL_ENDSTOPS) && Y2_USE_ENDSTOP == _##A##M##_)
|
||||
|
||||
/**
|
||||
* Z_DUAL_ENDSTOPS endstop reassignment
|
||||
* Z_MULTI_ENDSTOPS endstop reassignment
|
||||
*/
|
||||
#if Z_MULTI_ENDSTOPS
|
||||
#if ENABLED(Z_MULTI_ENDSTOPS)
|
||||
|
||||
#if Z_HOME_DIR > 0
|
||||
#if Z2_USE_ENDSTOP == _XMIN_
|
||||
#define Z2_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
|
||||
@@ -797,67 +830,108 @@
|
||||
#endif
|
||||
#define Z2_MAX_ENDSTOP_INVERTING false
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if ENABLED(Z_TRIPLE_ENDSTOPS)
|
||||
#if Z_HOME_DIR > 0
|
||||
#if Z3_USE_ENDSTOP == _XMIN_
|
||||
#define Z3_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
|
||||
#define Z3_MAX_PIN X_MIN_PIN
|
||||
#elif Z3_USE_ENDSTOP == _XMAX_
|
||||
#define Z3_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING
|
||||
#define Z3_MAX_PIN X_MAX_PIN
|
||||
#elif Z3_USE_ENDSTOP == _YMIN_
|
||||
#define Z3_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING
|
||||
#define Z3_MAX_PIN Y_MIN_PIN
|
||||
#elif Z3_USE_ENDSTOP == _YMAX_
|
||||
#define Z3_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING
|
||||
#define Z3_MAX_PIN Y_MAX_PIN
|
||||
#elif Z3_USE_ENDSTOP == _ZMIN_
|
||||
#define Z3_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING
|
||||
#define Z3_MAX_PIN Z_MIN_PIN
|
||||
#elif Z3_USE_ENDSTOP == _ZMAX_
|
||||
#define Z3_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING
|
||||
#define Z3_MAX_PIN Z_MAX_PIN
|
||||
#if NUM_Z_STEPPER_DRIVERS >= 3
|
||||
#if Z_HOME_DIR > 0
|
||||
#if Z3_USE_ENDSTOP == _XMIN_
|
||||
#define Z3_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
|
||||
#define Z3_MAX_PIN X_MIN_PIN
|
||||
#elif Z3_USE_ENDSTOP == _XMAX_
|
||||
#define Z3_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING
|
||||
#define Z3_MAX_PIN X_MAX_PIN
|
||||
#elif Z3_USE_ENDSTOP == _YMIN_
|
||||
#define Z3_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING
|
||||
#define Z3_MAX_PIN Y_MIN_PIN
|
||||
#elif Z3_USE_ENDSTOP == _YMAX_
|
||||
#define Z3_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING
|
||||
#define Z3_MAX_PIN Y_MAX_PIN
|
||||
#elif Z3_USE_ENDSTOP == _ZMIN_
|
||||
#define Z3_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING
|
||||
#define Z3_MAX_PIN Z_MIN_PIN
|
||||
#elif Z3_USE_ENDSTOP == _ZMAX_
|
||||
#define Z3_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING
|
||||
#define Z3_MAX_PIN Z_MAX_PIN
|
||||
#else
|
||||
#define Z3_MAX_ENDSTOP_INVERTING false
|
||||
#endif
|
||||
#define Z3_MIN_ENDSTOP_INVERTING false
|
||||
#else
|
||||
#if Z3_USE_ENDSTOP == _XMIN_
|
||||
#define Z3_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
|
||||
#define Z3_MIN_PIN X_MIN_PIN
|
||||
#elif Z3_USE_ENDSTOP == _XMAX_
|
||||
#define Z3_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING
|
||||
#define Z3_MIN_PIN X_MAX_PIN
|
||||
#elif Z3_USE_ENDSTOP == _YMIN_
|
||||
#define Z3_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING
|
||||
#define Z3_MIN_PIN Y_MIN_PIN
|
||||
#elif Z3_USE_ENDSTOP == _YMAX_
|
||||
#define Z3_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING
|
||||
#define Z3_MIN_PIN Y_MAX_PIN
|
||||
#elif Z3_USE_ENDSTOP == _ZMIN_
|
||||
#define Z3_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING
|
||||
#define Z3_MIN_PIN Z_MIN_PIN
|
||||
#elif Z3_USE_ENDSTOP == _ZMAX_
|
||||
#define Z3_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING
|
||||
#define Z3_MIN_PIN Z_MAX_PIN
|
||||
#else
|
||||
#define Z3_MIN_ENDSTOP_INVERTING false
|
||||
#endif
|
||||
#define Z3_MAX_ENDSTOP_INVERTING false
|
||||
#endif
|
||||
#define Z3_MIN_ENDSTOP_INVERTING false
|
||||
#else
|
||||
#if Z3_USE_ENDSTOP == _XMIN_
|
||||
#define Z3_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
|
||||
#define Z3_MIN_PIN X_MIN_PIN
|
||||
#elif Z3_USE_ENDSTOP == _XMAX_
|
||||
#define Z3_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING
|
||||
#define Z3_MIN_PIN X_MAX_PIN
|
||||
#elif Z3_USE_ENDSTOP == _YMIN_
|
||||
#define Z3_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING
|
||||
#define Z3_MIN_PIN Y_MIN_PIN
|
||||
#elif Z3_USE_ENDSTOP == _YMAX_
|
||||
#define Z3_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING
|
||||
#define Z3_MIN_PIN Y_MAX_PIN
|
||||
#elif Z3_USE_ENDSTOP == _ZMIN_
|
||||
#define Z3_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING
|
||||
#define Z3_MIN_PIN Z_MIN_PIN
|
||||
#elif Z3_USE_ENDSTOP == _ZMAX_
|
||||
#define Z3_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING
|
||||
#define Z3_MIN_PIN Z_MAX_PIN
|
||||
#else
|
||||
#define Z3_MIN_ENDSTOP_INVERTING false
|
||||
#endif
|
||||
#define Z3_MAX_ENDSTOP_INVERTING false
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Is an endstop plug used for the Z2 endstop or the bed probe?
|
||||
#define IS_Z2_OR_PROBE(A,M) ( \
|
||||
(Z_MULTI_ENDSTOPS && Z2_USE_ENDSTOP == _##A##M##_) \
|
||||
|| (HAS_CUSTOM_PROBE_PIN && Z_MIN_PROBE_PIN == A##_##M##_PIN ) )
|
||||
#if NUM_Z_STEPPER_DRIVERS >= 4
|
||||
#if Z_HOME_DIR > 0
|
||||
#if Z4_USE_ENDSTOP == _XMIN_
|
||||
#define Z4_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
|
||||
#define Z4_MAX_PIN X_MIN_PIN
|
||||
#elif Z4_USE_ENDSTOP == _XMAX_
|
||||
#define Z4_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING
|
||||
#define Z4_MAX_PIN X_MAX_PIN
|
||||
#elif Z4_USE_ENDSTOP == _YMIN_
|
||||
#define Z4_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING
|
||||
#define Z4_MAX_PIN Y_MIN_PIN
|
||||
#elif Z4_USE_ENDSTOP == _YMAX_
|
||||
#define Z4_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING
|
||||
#define Z4_MAX_PIN Y_MAX_PIN
|
||||
#elif Z4_USE_ENDSTOP == _ZMIN_
|
||||
#define Z4_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING
|
||||
#define Z4_MAX_PIN Z_MIN_PIN
|
||||
#elif Z4_USE_ENDSTOP == _ZMAX_
|
||||
#define Z4_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING
|
||||
#define Z4_MAX_PIN Z_MAX_PIN
|
||||
#else
|
||||
#define Z4_MAX_ENDSTOP_INVERTING false
|
||||
#endif
|
||||
#define Z4_MIN_ENDSTOP_INVERTING false
|
||||
#else
|
||||
#if Z4_USE_ENDSTOP == _XMIN_
|
||||
#define Z4_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
|
||||
#define Z4_MIN_PIN X_MIN_PIN
|
||||
#elif Z4_USE_ENDSTOP == _XMAX_
|
||||
#define Z4_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING
|
||||
#define Z4_MIN_PIN X_MAX_PIN
|
||||
#elif Z4_USE_ENDSTOP == _YMIN_
|
||||
#define Z4_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING
|
||||
#define Z4_MIN_PIN Y_MIN_PIN
|
||||
#elif Z4_USE_ENDSTOP == _YMAX_
|
||||
#define Z4_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING
|
||||
#define Z4_MIN_PIN Y_MAX_PIN
|
||||
#elif Z4_USE_ENDSTOP == _ZMIN_
|
||||
#define Z4_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING
|
||||
#define Z4_MIN_PIN Z_MIN_PIN
|
||||
#elif Z4_USE_ENDSTOP == _ZMAX_
|
||||
#define Z4_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING
|
||||
#define Z4_MIN_PIN Z_MAX_PIN
|
||||
#else
|
||||
#define Z4_MIN_ENDSTOP_INVERTING false
|
||||
#endif
|
||||
#define Z4_MAX_ENDSTOP_INVERTING false
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Is an endstop plug used for the Z3 endstop or the bed probe?
|
||||
#define IS_Z3_OR_PROBE(A,M) ( \
|
||||
(ENABLED(Z_TRIPLE_ENDSTOPS) && Z3_USE_ENDSTOP == _##A##M##_) \
|
||||
|| (HAS_CUSTOM_PROBE_PIN && Z_MIN_PROBE_PIN == A##_##M##_PIN ) )
|
||||
#endif // Z_MULTI_ENDSTOPS
|
||||
|
||||
/**
|
||||
* Set ENDSTOPPULLUPS for active endstop switches
|
||||
@@ -947,6 +1021,11 @@
|
||||
#define HAS_Z3_STEP (PIN_EXISTS(Z3_STEP))
|
||||
#define HAS_Z3_MICROSTEPS (PIN_EXISTS(Z3_MS1))
|
||||
|
||||
#define HAS_Z4_ENABLE (PIN_EXISTS(Z4_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(Z4)))
|
||||
#define HAS_Z4_DIR (PIN_EXISTS(Z4_DIR))
|
||||
#define HAS_Z4_STEP (PIN_EXISTS(Z4_STEP))
|
||||
#define HAS_Z4_MICROSTEPS (PIN_EXISTS(Z4_MS1))
|
||||
|
||||
// Extruder steppers and solenoids
|
||||
#define HAS_E0_ENABLE (PIN_EXISTS(E0_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E0)))
|
||||
#define HAS_E0_DIR (PIN_EXISTS(E0_DIR))
|
||||
@@ -984,6 +1063,18 @@
|
||||
#define HAS_E5_MICROSTEPS (PIN_EXISTS(E5_MS1))
|
||||
#define HAS_SOLENOID_5 (PIN_EXISTS(SOL5))
|
||||
|
||||
#define HAS_E6_ENABLE (PIN_EXISTS(E6_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E6)))
|
||||
#define HAS_E6_DIR (PIN_EXISTS(E6_DIR))
|
||||
#define HAS_E6_STEP (PIN_EXISTS(E6_STEP))
|
||||
#define HAS_E6_MICROSTEPS (PIN_EXISTS(E6_MS1))
|
||||
#define HAS_SOLENOID_6 (PIN_EXISTS(SOL6))
|
||||
|
||||
#define HAS_E7_ENABLE (PIN_EXISTS(E7_ENABLE) || (ENABLED(SOFTWARE_DRIVER_ENABLE) && AXIS_IS_TMC(E7)))
|
||||
#define HAS_E7_DIR (PIN_EXISTS(E7_DIR))
|
||||
#define HAS_E7_STEP (PIN_EXISTS(E7_STEP))
|
||||
#define HAS_E7_MICROSTEPS (PIN_EXISTS(E7_MS1))
|
||||
#define HAS_SOLENOID_7 (PIN_EXISTS(SOL7))
|
||||
|
||||
// Trinamic Stepper Drivers
|
||||
#if HAS_TRINAMIC
|
||||
#define STEALTHCHOP_ENABLED ANY(STEALTHCHOP_XY, STEALTHCHOP_Z, STEALTHCHOP_E)
|
||||
@@ -999,6 +1090,7 @@
|
||||
#define Z_SENSORLESS (AXIS_HAS_STALLGUARD(Z) && defined(Z_STALL_SENSITIVITY))
|
||||
#define Z2_SENSORLESS (AXIS_HAS_STALLGUARD(Z2) && defined(Z2_STALL_SENSITIVITY))
|
||||
#define Z3_SENSORLESS (AXIS_HAS_STALLGUARD(Z3) && defined(Z3_STALL_SENSITIVITY))
|
||||
#define Z4_SENSORLESS (AXIS_HAS_STALLGUARD(Z4) && defined(Z4_STALL_SENSITIVITY))
|
||||
#if ENABLED(SPI_ENDSTOPS)
|
||||
#define X_SPI_SENSORLESS X_SENSORLESS
|
||||
#define Y_SPI_SENSORLESS Y_SENSORLESS
|
||||
@@ -1011,8 +1103,19 @@
|
||||
&& E0_ENABLE_PIN != Y_ENABLE_PIN && E1_ENABLE_PIN != Y_ENABLE_PIN ) \
|
||||
)
|
||||
|
||||
//
|
||||
// Endstops and bed probe
|
||||
#define _HAS_STOP(A,M) (PIN_EXISTS(A##_##M) && !IS_X2_ENDSTOP(A,M) && !IS_Y2_ENDSTOP(A,M) && !IS_Z2_OR_PROBE(A,M))
|
||||
//
|
||||
|
||||
// Is an endstop plug used for extra Z endstops or the probe?
|
||||
#define IS_PROBE_PIN(A,M) (HAS_CUSTOM_PROBE_PIN && Z_MIN_PROBE_PIN == P)
|
||||
#define IS_X2_ENDSTOP(A,M) (ENABLED(X_DUAL_ENDSTOPS) && X2_USE_ENDSTOP == _##A##M##_)
|
||||
#define IS_Y2_ENDSTOP(A,M) (ENABLED(Y_DUAL_ENDSTOPS) && Y2_USE_ENDSTOP == _##A##M##_)
|
||||
#define IS_Z2_ENDSTOP(A,M) (ENABLED(Z_MULTI_ENDSTOPS) && Z2_USE_ENDSTOP == _##A##M##_)
|
||||
#define IS_Z3_ENDSTOP(A,M) (ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 3 && Z3_USE_ENDSTOP == _##A##M##_)
|
||||
#define IS_Z4_ENDSTOP(A,M) (ENABLED(Z_MULTI_ENDSTOPS) && NUM_Z_STEPPER_DRIVERS >= 4 && Z4_USE_ENDSTOP == _##A##M##_)
|
||||
|
||||
#define _HAS_STOP(A,M) (PIN_EXISTS(A##_##M) && !IS_PROBE_PIN(A,M) && !IS_X2_ENDSTOP(A,M) && !IS_Y2_ENDSTOP(A,M) && !IS_Z2_ENDSTOP(A,M) && !IS_Z3_ENDSTOP(A,M) && !IS_Z4_ENDSTOP(A,M))
|
||||
#define HAS_X_MIN _HAS_STOP(X,MIN)
|
||||
#define HAS_X_MAX _HAS_STOP(X,MAX)
|
||||
#define HAS_Y_MIN _HAS_STOP(Y,MIN)
|
||||
@@ -1027,10 +1130,14 @@
|
||||
#define HAS_Z2_MAX (PIN_EXISTS(Z2_MAX))
|
||||
#define HAS_Z3_MIN (PIN_EXISTS(Z3_MIN))
|
||||
#define HAS_Z3_MAX (PIN_EXISTS(Z3_MAX))
|
||||
#define HAS_Z4_MIN (PIN_EXISTS(Z4_MIN))
|
||||
#define HAS_Z4_MAX (PIN_EXISTS(Z4_MAX))
|
||||
#define HAS_Z_MIN_PROBE_PIN (HAS_CUSTOM_PROBE_PIN && PIN_EXISTS(Z_MIN_PROBE))
|
||||
#define HAS_CALIBRATION_PIN (PIN_EXISTS(CALIBRATION))
|
||||
|
||||
//
|
||||
// ADC Temp Sensors (Thermistor or Thermocouple with amplifier ADC interface)
|
||||
//
|
||||
#define HAS_ADC_TEST(P) (PIN_EXISTS(TEMP_##P) && TEMP_SENSOR_##P != 0 && DISABLED(HEATER_##P##_USES_MAX6675))
|
||||
#define HAS_TEMP_ADC_0 HAS_ADC_TEST(0)
|
||||
#define HAS_TEMP_ADC_1 HAS_ADC_TEST(1)
|
||||
@@ -1038,6 +1145,8 @@
|
||||
#define HAS_TEMP_ADC_3 HAS_ADC_TEST(3)
|
||||
#define HAS_TEMP_ADC_4 HAS_ADC_TEST(4)
|
||||
#define HAS_TEMP_ADC_5 HAS_ADC_TEST(5)
|
||||
#define HAS_TEMP_ADC_6 HAS_ADC_TEST(6)
|
||||
#define HAS_TEMP_ADC_7 HAS_ADC_TEST(7)
|
||||
#define HAS_TEMP_ADC_BED HAS_ADC_TEST(BED)
|
||||
#define HAS_TEMP_ADC_PROBE HAS_ADC_TEST(PROBE)
|
||||
#define HAS_TEMP_ADC_CHAMBER HAS_ADC_TEST(CHAMBER)
|
||||
@@ -1061,6 +1170,8 @@
|
||||
#define HAS_HEATER_3 (PIN_EXISTS(HEATER_3))
|
||||
#define HAS_HEATER_4 (PIN_EXISTS(HEATER_4))
|
||||
#define HAS_HEATER_5 (PIN_EXISTS(HEATER_5))
|
||||
#define HAS_HEATER_6 (PIN_EXISTS(HEATER_6))
|
||||
#define HAS_HEATER_7 (PIN_EXISTS(HEATER_7))
|
||||
#define HAS_HEATER_BED (PIN_EXISTS(HEATER_BED))
|
||||
|
||||
// Shorthand for common combinations
|
||||
@@ -1089,12 +1200,14 @@
|
||||
#define HAS_AUTO_FAN_3 (HOTENDS > 3 && PIN_EXISTS(E3_AUTO_FAN))
|
||||
#define HAS_AUTO_FAN_4 (HOTENDS > 4 && PIN_EXISTS(E4_AUTO_FAN))
|
||||
#define HAS_AUTO_FAN_5 (HOTENDS > 5 && PIN_EXISTS(E5_AUTO_FAN))
|
||||
#define HAS_AUTO_FAN_6 (HOTENDS > 6 && PIN_EXISTS(E6_AUTO_FAN))
|
||||
#define HAS_AUTO_FAN_7 (HOTENDS > 7 && PIN_EXISTS(E7_AUTO_FAN))
|
||||
#define HAS_AUTO_CHAMBER_FAN (HAS_TEMP_CHAMBER && PIN_EXISTS(CHAMBER_AUTO_FAN))
|
||||
|
||||
#define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3 || HAS_AUTO_FAN_4 || HAS_AUTO_FAN_5 || HAS_AUTO_CHAMBER_FAN)
|
||||
#define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3 || HAS_AUTO_FAN_4 || HAS_AUTO_FAN_5 || HAS_AUTO_FAN_6 || HAS_AUTO_FAN_7 || HAS_AUTO_CHAMBER_FAN)
|
||||
#define _FANOVERLAP(A,B) (A##_AUTO_FAN_PIN == E##B##_AUTO_FAN_PIN)
|
||||
#if HAS_AUTO_FAN
|
||||
#define AUTO_CHAMBER_IS_E (_FANOVERLAP(CHAMBER,0) || _FANOVERLAP(CHAMBER,1) || _FANOVERLAP(CHAMBER,2) || _FANOVERLAP(CHAMBER,3) || _FANOVERLAP(CHAMBER,4) || _FANOVERLAP(CHAMBER,5))
|
||||
#define AUTO_CHAMBER_IS_E (_FANOVERLAP(CHAMBER,0) || _FANOVERLAP(CHAMBER,1) || _FANOVERLAP(CHAMBER,2) || _FANOVERLAP(CHAMBER,3) || _FANOVERLAP(CHAMBER,4) || _FANOVERLAP(CHAMBER,5) || _FANOVERLAP(CHAMBER,6) || _FANOVERLAP(CHAMBER,7))
|
||||
#endif
|
||||
|
||||
#if !HAS_TEMP_SENSOR
|
||||
@@ -1107,8 +1220,14 @@
|
||||
|
||||
// Other fans
|
||||
#define HAS_FAN0 (PIN_EXISTS(FAN))
|
||||
#define HAS_FAN1 (PIN_EXISTS(FAN1) && CONTROLLER_FAN_PIN != FAN1_PIN && E0_AUTO_FAN_PIN != FAN1_PIN && E1_AUTO_FAN_PIN != FAN1_PIN && E2_AUTO_FAN_PIN != FAN1_PIN && E3_AUTO_FAN_PIN != FAN1_PIN && E4_AUTO_FAN_PIN != FAN1_PIN && E5_AUTO_FAN_PIN != FAN1_PIN)
|
||||
#define HAS_FAN2 (PIN_EXISTS(FAN2) && CONTROLLER_FAN_PIN != FAN2_PIN && E0_AUTO_FAN_PIN != FAN2_PIN && E1_AUTO_FAN_PIN != FAN2_PIN && E2_AUTO_FAN_PIN != FAN2_PIN && E3_AUTO_FAN_PIN != FAN2_PIN && E4_AUTO_FAN_PIN != FAN2_PIN && E5_AUTO_FAN_PIN != FAN2_PIN)
|
||||
#define _HAS_FAN(P) (PIN_EXISTS(FAN_##P) && CONTROLLER_FAN_PIN != FAN_##P##_PIN && E0_AUTO_FAN_PIN != FAN_##P##_PIN && E1_AUTO_FAN_PIN != FAN_##P##_PIN && E2_AUTO_FAN_PIN != FAN_##P##_PIN && E3_AUTO_FAN_PIN != FAN_##P##_PIN && E4_AUTO_FAN_PIN != FAN_##P##_PIN && E5_AUTO_FAN_PIN != FAN_##P##_PIN && E6_AUTO_FAN_PIN != FAN_##P##_PIN && E7_AUTO_FAN_PIN != FAN_##P##_PIN)
|
||||
#define HAS_FAN1 _HAS_FAN(1)
|
||||
#define HAS_FAN2 _HAS_FAN(2)
|
||||
#define HAS_FAN3 _HAS_FAN(3)
|
||||
#define HAS_FAN4 _HAS_FAN(4)
|
||||
#define HAS_FAN5 _HAS_FAN(5)
|
||||
#define HAS_FAN6 _HAS_FAN(6)
|
||||
#define HAS_FAN7 _HAS_FAN(7)
|
||||
#define HAS_CONTROLLER_FAN (PIN_EXISTS(CONTROLLER_FAN))
|
||||
|
||||
// Servos
|
||||
@@ -1145,7 +1264,9 @@
|
||||
#define HAS_DIGIPOTSS (PIN_EXISTS(DIGIPOTSS))
|
||||
#define HAS_MOTOR_CURRENT_PWM ANY_PIN(MOTOR_CURRENT_PWM_X, MOTOR_CURRENT_PWM_Y, MOTOR_CURRENT_PWM_XY, MOTOR_CURRENT_PWM_Z, MOTOR_CURRENT_PWM_E)
|
||||
|
||||
#define HAS_MICROSTEPS (HAS_X_MICROSTEPS || HAS_X2_MICROSTEPS || HAS_Y_MICROSTEPS || HAS_Y2_MICROSTEPS || HAS_Z_MICROSTEPS || HAS_Z2_MICROSTEPS || HAS_Z3_MICROSTEPS || HAS_E0_MICROSTEPS || HAS_E1_MICROSTEPS || HAS_E2_MICROSTEPS || HAS_E3_MICROSTEPS || HAS_E4_MICROSTEPS || HAS_E5_MICROSTEPS)
|
||||
#define HAS_SOME_Z_MICROSTEPS (HAS_Z_MICROSTEPS || HAS_Z2_MICROSTEPS || HAS_Z3_MICROSTEPS || HAS_Z4_MICROSTEPS)
|
||||
#define HAS_SOME_E_MICROSTEPS (HAS_E0_MICROSTEPS || HAS_E1_MICROSTEPS || HAS_E2_MICROSTEPS || HAS_E3_MICROSTEPS || HAS_E4_MICROSTEPS || HAS_E5_MICROSTEPS || HAS_E6_MICROSTEPS || HAS_E7_MICROSTEPS)
|
||||
#define HAS_MICROSTEPS (HAS_X_MICROSTEPS || HAS_X2_MICROSTEPS || HAS_Y_MICROSTEPS || HAS_Y2_MICROSTEPS || HAS_SOME_Z_MICROSTEPS || HAS_SOME_E_MICROSTEPS)
|
||||
|
||||
#if HAS_MICROSTEPS
|
||||
|
||||
@@ -1219,26 +1340,27 @@
|
||||
#if HAS_HEATER_0 && !defined(HEATER_0_INVERTING)
|
||||
#define HEATER_0_INVERTING false
|
||||
#endif
|
||||
|
||||
#if HAS_HEATER_1 && !defined(HEATER_1_INVERTING)
|
||||
#define HEATER_1_INVERTING false
|
||||
#endif
|
||||
|
||||
#if HAS_HEATER_2 && !defined(HEATER_2_INVERTING)
|
||||
#define HEATER_2_INVERTING false
|
||||
#endif
|
||||
|
||||
#if HAS_HEATER_3 && !defined(HEATER_3_INVERTING)
|
||||
#define HEATER_3_INVERTING false
|
||||
#endif
|
||||
|
||||
#if HAS_HEATER_4 && !defined(HEATER_4_INVERTING)
|
||||
#define HEATER_4_INVERTING false
|
||||
#endif
|
||||
|
||||
#if HAS_HEATER_5 && !defined(HEATER_5_INVERTING)
|
||||
#define HEATER_5_INVERTING false
|
||||
#endif
|
||||
#if HAS_HEATER_6 && !defined(HEATER_6_INVERTING)
|
||||
#define HEATER_6_INVERTING false
|
||||
#endif
|
||||
#if HAS_HEATER_7 && !defined(HEATER_7_INVERTING)
|
||||
#define HEATER_7_INVERTING false
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Helper Macros for heaters and extruder fan
|
||||
@@ -1255,6 +1377,12 @@
|
||||
#define WRITE_HEATER_4(v) WRITE(HEATER_4_PIN, (v) ^ HEATER_4_INVERTING)
|
||||
#if HOTENDS > 5
|
||||
#define WRITE_HEATER_5(v) WRITE(HEATER_5_PIN, (v) ^ HEATER_5_INVERTING)
|
||||
#if HOTENDS > 6
|
||||
#define WRITE_HEATER_6(v) WRITE(HEATER_6_PIN, (v) ^ HEATER_6_INVERTING)
|
||||
#if HOTENDS > 7
|
||||
#define WRITE_HEATER_7(v) WRITE(HEATER_7_PIN, (v) ^ HEATER_7_INVERTING)
|
||||
#endif // HOTENDS > 7
|
||||
#endif // HOTENDS > 6
|
||||
#endif // HOTENDS > 5
|
||||
#endif // HOTENDS > 4
|
||||
#endif // HOTENDS > 3
|
||||
@@ -1306,7 +1434,17 @@
|
||||
#define FAN_INVERTING false
|
||||
#endif
|
||||
|
||||
#if HAS_FAN2
|
||||
#if HAS_FAN7
|
||||
#define FAN_COUNT 8
|
||||
#elif HAS_FAN6
|
||||
#define FAN_COUNT 7
|
||||
#elif HAS_FAN5
|
||||
#define FAN_COUNT 6
|
||||
#elif HAS_FAN4
|
||||
#define FAN_COUNT 5
|
||||
#elif HAS_FAN3
|
||||
#define FAN_COUNT 4
|
||||
#elif HAS_FAN2
|
||||
#define FAN_COUNT 3
|
||||
#elif HAS_FAN1
|
||||
#define FAN_COUNT 2
|
||||
@@ -1581,7 +1719,6 @@
|
||||
#define HAS_FIXED_3POINT
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* Buzzer/Speaker
|
||||
*/
|
||||
@@ -1749,14 +1886,6 @@
|
||||
// If platform requires early initialization of watchdog to properly boot
|
||||
#define EARLY_WATCHDOG (ENABLED(USE_WATCHDOG) && defined(ARDUINO_ARCH_SAM))
|
||||
|
||||
#if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
|
||||
#define Z_STEPPER_COUNT 3
|
||||
#elif ENABLED(Z_DUAL_STEPPER_DRIVERS)
|
||||
#define Z_STEPPER_COUNT 2
|
||||
#else
|
||||
#define Z_STEPPER_COUNT 1
|
||||
#endif
|
||||
|
||||
#if HAS_SPI_LCD
|
||||
// Get LCD character width/height, which may be overridden by pins, configs, etc.
|
||||
#ifndef LCD_WIDTH
|
||||
|
||||
+188
-71
@@ -294,19 +294,19 @@
|
||||
#elif defined(HAVE_L6470DRIVER)
|
||||
#error "HAVE_L6470DRIVER is now [AXIS]_DRIVER_TYPE L6470. Please update your Configuration.h."
|
||||
#elif defined(X_IS_TMC) || defined(X2_IS_TMC) || defined(Y_IS_TMC) || defined(Y2_IS_TMC) || defined(Z_IS_TMC) || defined(Z2_IS_TMC) || defined(Z3_IS_TMC) \
|
||||
|| defined(E0_IS_TMC) || defined(E1_IS_TMC) || defined(E2_IS_TMC) || defined(E3_IS_TMC) || defined(E4_IS_TMC) || defined(E5_IS_TMC)
|
||||
|| defined(E0_IS_TMC) || defined(E1_IS_TMC) || defined(E2_IS_TMC) || defined(E3_IS_TMC) || defined(E4_IS_TMC) || defined(E5_IS_TMC) || defined(E6_IS_TMC) || defined(E7_IS_TMC)
|
||||
#error "[AXIS]_IS_TMC is now [AXIS]_DRIVER_TYPE TMC26X. Please update your Configuration.h."
|
||||
#elif defined(X_IS_TMC26X) || defined(X2_IS_TMC26X) || defined(Y_IS_TMC26X) || defined(Y2_IS_TMC26X) || defined(Z_IS_TMC26X) || defined(Z2_IS_TMC26X) || defined(Z3_IS_TMC26X) \
|
||||
|| defined(E0_IS_TMC26X) || defined(E1_IS_TMC26X) || defined(E2_IS_TMC26X) || defined(E3_IS_TMC26X) || defined(E4_IS_TMC26X) || defined(E5_IS_TMC26X)
|
||||
|| defined(E0_IS_TMC26X) || defined(E1_IS_TMC26X) || defined(E2_IS_TMC26X) || defined(E3_IS_TMC26X) || defined(E4_IS_TMC26X) || defined(E5_IS_TMC26X) || defined(E6_IS_TMC26X) || defined(E7_IS_TMC26X)
|
||||
#error "[AXIS]_IS_TMC26X is now [AXIS]_DRIVER_TYPE TMC26X. Please update your Configuration.h."
|
||||
#elif defined(X_IS_TMC2130) || defined(X2_IS_TMC2130) || defined(Y_IS_TMC2130) || defined(Y2_IS_TMC2130) || defined(Z_IS_TMC2130) || defined(Z2_IS_TMC2130) || defined(Z3_IS_TMC2130) \
|
||||
|| defined(E0_IS_TMC2130) || defined(E1_IS_TMC2130) || defined(E2_IS_TMC2130) || defined(E3_IS_TMC2130) || defined(E4_IS_TMC2130) || defined(E5_IS_TMC2130)
|
||||
|| defined(E0_IS_TMC2130) || defined(E1_IS_TMC2130) || defined(E2_IS_TMC2130) || defined(E3_IS_TMC2130) || defined(E4_IS_TMC2130) || defined(E5_IS_TMC2130) || defined(E6_IS_TMC2130) || defined(E7_IS_TMC2130)
|
||||
#error "[AXIS]_IS_TMC2130 is now [AXIS]_DRIVER_TYPE TMC2130. Please update your Configuration.h."
|
||||
#elif defined(X_IS_TMC2208) || defined(X2_IS_TMC2208) || defined(Y_IS_TMC2208) || defined(Y2_IS_TMC2208) || defined(Z_IS_TMC2208) || defined(Z2_IS_TMC2208) || defined(Z3_IS_TMC2208) \
|
||||
|| defined(E0_IS_TMC2208) || defined(E1_IS_TMC2208) || defined(E2_IS_TMC2208) || defined(E3_IS_TMC2208) || defined(E4_IS_TMC2208) || defined(E5_IS_TMC2208)
|
||||
|| defined(E0_IS_TMC2208) || defined(E1_IS_TMC2208) || defined(E2_IS_TMC2208) || defined(E3_IS_TMC2208) || defined(E4_IS_TMC2208) || defined(E5_IS_TMC2208) || defined(E6_IS_TMC2208) || defined(E7_IS_TMC2208)
|
||||
#error "[AXIS]_IS_TMC2208 is now [AXIS]_DRIVER_TYPE TMC2208. Please update your Configuration.h."
|
||||
#elif defined(X_IS_L6470) || defined(X2_IS_L6470) || defined(Y_IS_L6470) || defined(Y2_IS_L6470) || defined(Z_IS_L6470) || defined(Z2_IS_L6470) || defined(Z3_IS_L6470) \
|
||||
|| defined(E0_IS_L6470) || defined(E1_IS_L6470) || defined(E2_IS_L6470) || defined(E3_IS_L6470) || defined(E4_IS_L6470) || defined(E5_IS_L6470)
|
||||
|| defined(E0_IS_L6470) || defined(E1_IS_L6470) || defined(E2_IS_L6470) || defined(E3_IS_L6470) || defined(E4_IS_L6470) || defined(E5_IS_L6470) || defined(E6_IS_L6470) || defined(E7_IS_L6470)
|
||||
#error "[AXIS]_IS_L6470 is now [AXIS]_DRIVER_TYPE L6470. Please update your Configuration.h."
|
||||
#elif defined(AUTOMATIC_CURRENT_CONTROL)
|
||||
#error "AUTOMATIC_CURRENT_CONTROL is now MONITOR_DRIVER_STATUS. Please update your configuration."
|
||||
@@ -426,6 +426,28 @@
|
||||
#error "HOME_USING_SPREADCYCLE is now obsolete. Please remove it from Configuration_adv.h."
|
||||
#elif defined(DGUS_LCD)
|
||||
#error "DGUS_LCD is now DGUS_LCD_UI_(ORIGIN|FYSETC|HIPRECY). Please update your configuration."
|
||||
#elif defined(X_DUAL_ENDSTOPS_ADJUSTMENT)
|
||||
#error "X_DUAL_ENDSTOPS_ADJUSTMENT is now X2_ENDSTOP_ADJUSTMENT. Please update Configuration_adv.h."
|
||||
#elif defined(Y_DUAL_ENDSTOPS_ADJUSTMENT)
|
||||
#error "Y_DUAL_ENDSTOPS_ADJUSTMENT is now Y2_ENDSTOP_ADJUSTMENT. Please update Configuration_adv.h."
|
||||
#elif defined(Z_DUAL_ENDSTOPS_ADJUSTMENT)
|
||||
#error "Z_DUAL_ENDSTOPS_ADJUSTMENT is now Z2_ENDSTOP_ADJUSTMENT. Please update Configuration_adv.h."
|
||||
#elif defined(Z_TRIPLE_ENDSTOPS_ADJUSTMENT2) || defined(Z_TRIPLE_ENDSTOPS_ADJUSTMENT3)
|
||||
#error "Z_TRIPLE_ENDSTOPS_ADJUSTMENT[23] is now Z[23]_ENDSTOP_ADJUSTMENT. Please update Configuration_adv.h."
|
||||
#elif defined(Z_QUAD_ENDSTOPS_ADJUSTMENT2) || defined(Z_QUAD_ENDSTOPS_ADJUSTMENT3) || defined(Z_QUAD_ENDSTOPS_ADJUSTMENT4)
|
||||
#error "Z_QUAD_ENDSTOPS_ADJUSTMENT[234] is now Z[234]_ENDSTOP_ADJUSTMENT. Please update Configuration_adv.h."
|
||||
#elif defined(Z_DUAL_STEPPER_DRIVERS)
|
||||
#error "Z_DUAL_STEPPER_DRIVERS is now NUM_Z_STEPPER_DRIVERS with a value of 2. Please update Configuration_adv.h."
|
||||
#elif defined(Z_TRIPLE_STEPPER_DRIVERS)
|
||||
#error "Z_TRIPLE_STEPPER_DRIVERS is now NUM_Z_STEPPER_DRIVERS with a value of 3. Please update Configuration_adv.h."
|
||||
#elif defined(Z_QUAD_STEPPER_DRIVERS)
|
||||
#error "Z_QUAD_STEPPER_DRIVERS is now NUM_Z_STEPPER_DRIVERS with a value of 4. Please update Configuration_adv.h."
|
||||
#elif defined(Z_DUAL_ENDSTOPS)
|
||||
#error "Z_DUAL_ENDSTOPS is now Z_MULTI_ENDSTOPS. Please update Configuration_adv.h."
|
||||
#elif defined(Z_TRIPLE_ENDSTOPS)
|
||||
#error "Z_TRIPLE_ENDSTOPS is now Z_MULTI_ENDSTOPS. Please update Configuration_adv.h."
|
||||
#elif defined(Z_QUAD_ENDSTOPS)
|
||||
#error "Z_QUAD_ENDSTOPS is now Z_MULTI_ENDSTOPS. Please update Configuration_adv.h."
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -473,22 +495,27 @@
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Dual / Triple Stepper Drivers
|
||||
* Multiple Stepper Drivers Per Axis
|
||||
*/
|
||||
#if BOTH(X_DUAL_STEPPER_DRIVERS, DUAL_X_CARRIAGE)
|
||||
#error "DUAL_X_CARRIAGE is not compatible with X_DUAL_STEPPER_DRIVERS."
|
||||
#elif ENABLED(X_DUAL_STEPPER_DRIVERS) && !(HAS_X2_ENABLE && HAS_X2_STEP && HAS_X2_DIR)
|
||||
#error "X_DUAL_STEPPER_DRIVERS requires X2 pins (and an extra E plug)."
|
||||
#elif ENABLED(Y_DUAL_STEPPER_DRIVERS) && !(HAS_Y2_ENABLE && HAS_Y2_STEP && HAS_Y2_DIR)
|
||||
#error "Y_DUAL_STEPPER_DRIVERS requires Y2 pins (and an extra E plug)."
|
||||
#elif ENABLED(Z_DUAL_STEPPER_DRIVERS)
|
||||
#if ENABLED(Z_TRIPLE_STEPPER_DRIVERS)
|
||||
#error "Please select either Z_TRIPLE_STEPPER_DRIVERS or Z_DUAL_STEPPER_DRIVERS, not both."
|
||||
#elif !(HAS_Z2_ENABLE && HAS_Z2_STEP && HAS_Z2_DIR)
|
||||
#error "Z_DUAL_STEPPER_DRIVERS requires Z2 pins (and an extra E plug)."
|
||||
#define GOOD_AXIS_PINS(A) (HAS_##A##_ENABLE && HAS_##A##_STEP && HAS_##A##_DIR)
|
||||
#if ENABLED(X_DUAL_STEPPER_DRIVERS)
|
||||
#if ENABLED(DUAL_X_CARRIAGE)
|
||||
#error "DUAL_X_CARRIAGE is not compatible with X_DUAL_STEPPER_DRIVERS."
|
||||
#elif !GOOD_AXIS_PINS(X)
|
||||
#error "X_DUAL_STEPPER_DRIVERS requires X2 pins to be defined."
|
||||
#endif
|
||||
#elif ENABLED(Z_TRIPLE_STEPPER_DRIVERS) && !(HAS_Z2_ENABLE && HAS_Z2_STEP && HAS_Z2_DIR && HAS_Z3_ENABLE && HAS_Z3_STEP && HAS_Z3_DIR)
|
||||
#error "Z_TRIPLE_STEPPER_DRIVERS requires Z3 pins (and two extra E plugs)."
|
||||
#endif
|
||||
|
||||
#if ENABLED(Y_DUAL_STEPPER_DRIVERS) && !GOOD_AXIS_PINS(Y)
|
||||
#error "Y_DUAL_STEPPER_DRIVERS requires Y2 pins to be defined."
|
||||
#elif !WITHIN(NUM_Z_STEPPER_DRIVERS, 1, 4)
|
||||
#error "NUM_Z_STEPPER_DRIVERS must be an integer from 1 to 4."
|
||||
#elif NUM_Z_STEPPER_DRIVERS == 2 && !GOOD_AXIS_PINS(Z2)
|
||||
#error "If NUM_Z_STEPPER_DRIVERS is 2, you must define stepper pins for Z2."
|
||||
#elif NUM_Z_STEPPER_DRIVERS == 3 && !(GOOD_AXIS_PINS(Z2) && GOOD_AXIS_PINS(Z3))
|
||||
#error "If NUM_Z_STEPPER_DRIVERS is 3, you must define stepper pins for Z2 and Z3."
|
||||
#elif NUM_Z_STEPPER_DRIVERS == 4 && !(GOOD_AXIS_PINS(Z2) && GOOD_AXIS_PINS(Z3) && GOOD_AXIS_PINS(Z4))
|
||||
#error "If NUM_Z_STEPPER_DRIVERS is 4, you must define stepper pins for Z2, Z3, and Z4."
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -725,8 +752,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
*/
|
||||
#if EXTRUDERS > 1
|
||||
|
||||
#if EXTRUDERS > 6
|
||||
#error "Marlin supports a maximum of 6 EXTRUDERS."
|
||||
#if EXTRUDERS > 8
|
||||
#error "Marlin supports a maximum of 8 EXTRUDERS."
|
||||
#endif
|
||||
|
||||
#if ENABLED(HEATERS_PARALLEL)
|
||||
@@ -1393,7 +1420,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#error "DUAL_X_CARRIAGE requires 2 (or more) extruders."
|
||||
#elif CORE_IS_XY || CORE_IS_XZ
|
||||
#error "DUAL_X_CARRIAGE cannot be used with COREXY, COREYX, COREXZ, or COREZX."
|
||||
#elif !(HAS_X2_ENABLE && HAS_X2_STEP && HAS_X2_DIR)
|
||||
#elif !GOOD_AXIS_PINS(X2)
|
||||
#error "DUAL_X_CARRIAGE requires X2 stepper pins to be defined."
|
||||
#elif !HAS_X_MAX
|
||||
#error "DUAL_X_CARRIAGE requires USE_XMAX_PLUG and an X Max Endstop."
|
||||
@@ -1404,6 +1431,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#undef GOOD_AXIS_PINS
|
||||
|
||||
/**
|
||||
* Make sure auto fan pins don't conflict with the fan pin
|
||||
*/
|
||||
@@ -1465,6 +1494,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#error "TEMP_SENSOR_4 1000 requires HOTEND4_PULLUP_RESISTOR_OHMS, HOTEND4_RESISTANCE_25C_OHMS and HOTEND4_BETA in Configuration_adv.h."
|
||||
#elif ENABLED(HEATER_5_USER_THERMISTOR) && !(defined(HOTEND5_PULLUP_RESISTOR_OHMS) && defined(HOTEND5_RESISTANCE_25C_OHMS) && defined(HOTEND5_BETA))
|
||||
#error "TEMP_SENSOR_5 1000 requires HOTEND5_PULLUP_RESISTOR_OHMS, HOTEND5_RESISTANCE_25C_OHMS and HOTEND5_BETA in Configuration_adv.h."
|
||||
#elif ENABLED(HEATER_6_USER_THERMISTOR) && !(defined(HOTEND6_PULLUP_RESISTOR_OHMS) && defined(HOTEND6_RESISTANCE_25C_OHMS) && defined(HOTEND6_BETA))
|
||||
#error "TEMP_SENSOR_6 1000 requires HOTEND6_PULLUP_RESISTOR_OHMS, HOTEND6_RESISTANCE_25C_OHMS and HOTEND6_BETA in Configuration_adv.h."
|
||||
#elif ENABLED(HEATER_7_USER_THERMISTOR) && !(defined(HOTEND7_PULLUP_RESISTOR_OHMS) && defined(HOTEND7_RESISTANCE_25C_OHMS) && defined(HOTEND7_BETA))
|
||||
#error "TEMP_SENSOR_7 1000 requires HOTEND7_PULLUP_RESISTOR_OHMS, HOTEND7_RESISTANCE_25C_OHMS and HOTEND7_BETA in Configuration_adv.h."
|
||||
#elif ENABLED(HEATER_BED_USER_THERMISTOR) && !(defined(BED_PULLUP_RESISTOR_OHMS) && defined(BED_RESISTANCE_25C_OHMS) && defined(BED_BETA))
|
||||
#error "TEMP_SENSOR_BED 1000 requires BED_PULLUP_RESISTOR_OHMS, BED_RESISTANCE_25C_OHMS and BED_BETA in Configuration_adv.h."
|
||||
#elif ENABLED(HEATER_CHAMBER_USER_THERMISTOR) && !(defined(CHAMBER_PULLUP_RESISTOR_OHMS) && defined(CHAMBER_RESISTANCE_25C_OHMS) && defined(CHAMBER_BETA))
|
||||
@@ -1535,13 +1568,45 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#elif !PIN_EXISTS(TEMP_5)
|
||||
#error "TEMP_5_PIN not defined for this board."
|
||||
#endif
|
||||
#if HOTENDS > 6
|
||||
#if TEMP_SENSOR_6 == 0
|
||||
#error "TEMP_SENSOR_6 is required with 6 HOTENDS."
|
||||
#elif !HAS_HEATER_6
|
||||
#error "HEATER_6_PIN not defined for this board."
|
||||
#elif !PIN_EXISTS(TEMP_6)
|
||||
#error "TEMP_6_PIN not defined for this board."
|
||||
#endif
|
||||
#if HOTENDS > 7
|
||||
#if TEMP_SENSOR_7 == 0
|
||||
#error "TEMP_SENSOR_7 is required with 7 HOTENDS."
|
||||
#elif !HAS_HEATER_7
|
||||
#error "HEATER_7_PIN not defined for this board."
|
||||
#elif !PIN_EXISTS(TEMP_7)
|
||||
#error "TEMP_7_PIN not defined for this board."
|
||||
#endif
|
||||
#elif TEMP_SENSOR_7 != 0
|
||||
#error "TEMP_SENSOR_7 shouldn't be set with only 7 HOTENDS."
|
||||
#endif
|
||||
#elif TEMP_SENSOR_6 != 0
|
||||
#error "TEMP_SENSOR_6 shouldn't be set with only 6 HOTENDS."
|
||||
#elif TEMP_SENSOR_7 != 0
|
||||
#error "TEMP_SENSOR_7 shouldn't be set with only 6 HOTENDS."
|
||||
#endif
|
||||
#elif TEMP_SENSOR_5 != 0
|
||||
#error "TEMP_SENSOR_5 shouldn't be set with only 5 HOTENDS."
|
||||
#elif TEMP_SENSOR_6 != 0
|
||||
#error "TEMP_SENSOR_6 shouldn't be set with only 5 HOTENDS."
|
||||
#elif TEMP_SENSOR_7 != 0
|
||||
#error "TEMP_SENSOR_7 shouldn't be set with only 5 HOTENDS."
|
||||
#endif
|
||||
#elif TEMP_SENSOR_4 != 0
|
||||
#error "TEMP_SENSOR_4 shouldn't be set with only 4 HOTENDS."
|
||||
#elif TEMP_SENSOR_5 != 0
|
||||
#error "TEMP_SENSOR_5 shouldn't be set with only 4 HOTENDS."
|
||||
#elif TEMP_SENSOR_6 != 0
|
||||
#error "TEMP_SENSOR_6 shouldn't be set with only 4 HOTENDS."
|
||||
#elif TEMP_SENSOR_7 != 0
|
||||
#error "TEMP_SENSOR_7 shouldn't be set with only 4 HOTENDS."
|
||||
#endif
|
||||
#elif TEMP_SENSOR_3 != 0
|
||||
#error "TEMP_SENSOR_3 shouldn't be set with only 3 HOTENDS."
|
||||
@@ -1549,6 +1614,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#error "TEMP_SENSOR_4 shouldn't be set with only 3 HOTENDS."
|
||||
#elif TEMP_SENSOR_5 != 0
|
||||
#error "TEMP_SENSOR_5 shouldn't be set with only 3 HOTENDS."
|
||||
#elif TEMP_SENSOR_6 != 0
|
||||
#error "TEMP_SENSOR_6 shouldn't be set with only 3 HOTENDS."
|
||||
#elif TEMP_SENSOR_7 != 0
|
||||
#error "TEMP_SENSOR_7 shouldn't be set with only 3 HOTENDS."
|
||||
#endif
|
||||
#elif TEMP_SENSOR_2 != 0
|
||||
#error "TEMP_SENSOR_2 shouldn't be set with only 2 HOTENDS."
|
||||
@@ -1558,6 +1627,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#error "TEMP_SENSOR_4 shouldn't be set with only 2 HOTENDS."
|
||||
#elif TEMP_SENSOR_5 != 0
|
||||
#error "TEMP_SENSOR_5 shouldn't be set with only 2 HOTENDS."
|
||||
#elif TEMP_SENSOR_6 != 0
|
||||
#error "TEMP_SENSOR_6 shouldn't be set with only 2 HOTENDS."
|
||||
#elif TEMP_SENSOR_7 != 0
|
||||
#error "TEMP_SENSOR_7 shouldn't be set with only 2 HOTENDS."
|
||||
#endif
|
||||
#elif TEMP_SENSOR_1 != 0 && DISABLED(TEMP_SENSOR_1_AS_REDUNDANT)
|
||||
#error "TEMP_SENSOR_1 shouldn't be set with only 1 HOTEND."
|
||||
@@ -1569,6 +1642,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#error "TEMP_SENSOR_4 shouldn't be set with only 1 HOTEND."
|
||||
#elif TEMP_SENSOR_5 != 0
|
||||
#error "TEMP_SENSOR_5 shouldn't be set with only 1 HOTEND."
|
||||
#elif TEMP_SENSOR_6 != 0
|
||||
#error "TEMP_SENSOR_6 shouldn't be set with only 1 HOTEND."
|
||||
#elif TEMP_SENSOR_7 != 0
|
||||
#error "TEMP_SENSOR_7 shouldn't be set with only 1 HOTEND."
|
||||
#endif
|
||||
|
||||
#if TEMP_SENSOR_PROBE
|
||||
@@ -1651,6 +1728,16 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#if !(PIN_EXISTS(E5_STEP, E5_DIR) && HAS_E5_ENABLE)
|
||||
#error "E5_STEP_PIN, E5_DIR_PIN, or E5_ENABLE_PIN not defined for this board."
|
||||
#endif
|
||||
#if E_STEPPERS > 6
|
||||
#if !(PIN_EXISTS(E6_STEP, E6_DIR) && HAS_E6_ENABLE)
|
||||
#error "E6_STEP_PIN, E6_DIR_PIN, or E6_ENABLE_PIN not defined for this board."
|
||||
#endif
|
||||
#if E_STEPPERS > 7
|
||||
#if !(PIN_EXISTS(E7_STEP, E7_DIR) && HAS_E7_ENABLE)
|
||||
#error "E7_STEP_PIN, E7_DIR_PIN, or E7_ENABLE_PIN not defined for this board."
|
||||
#endif
|
||||
#endif // E_STEPPERS > 7
|
||||
#endif // E_STEPPERS > 6
|
||||
#endif // E_STEPPERS > 5
|
||||
#endif // E_STEPPERS > 4
|
||||
#endif // E_STEPPERS > 3
|
||||
@@ -1695,7 +1782,7 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#error "Enable USE_ZMAX_PLUG when homing Z to MAX."
|
||||
#endif
|
||||
|
||||
// Dual endstops requirements
|
||||
// Dual/multiple endstops requirements
|
||||
#if ENABLED(X_DUAL_ENDSTOPS)
|
||||
#if !X2_USE_ENDSTOP
|
||||
#error "You must set X2_USE_ENDSTOP with X_DUAL_ENDSTOPS."
|
||||
@@ -1738,9 +1825,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#error "Y_DUAL_ENDSTOPS is not compatible with DELTA."
|
||||
#endif
|
||||
#endif
|
||||
#if ENABLED(Z_DUAL_ENDSTOPS)
|
||||
|
||||
#if ENABLED(Z_MULTI_ENDSTOPS)
|
||||
#if !Z2_USE_ENDSTOP
|
||||
#error "You must set Z2_USE_ENDSTOP with Z_DUAL_ENDSTOPS."
|
||||
#error "You must set Z2_USE_ENDSTOP with Z_MULTI_ENDSTOPS when NUM_Z_STEPPER_DRIVERS >= 2."
|
||||
#elif Z2_USE_ENDSTOP == _XMIN_ && DISABLED(USE_XMIN_PLUG)
|
||||
#error "USE_XMIN_PLUG is required when Z2_USE_ENDSTOP is _XMIN_."
|
||||
#elif Z2_USE_ENDSTOP == _XMAX_ && DISABLED(USE_XMAX_PLUG)
|
||||
@@ -1756,47 +1844,45 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#elif !HAS_Z2_MIN && !HAS_Z2_MAX
|
||||
#error "Z2_USE_ENDSTOP has been assigned to a nonexistent endstop!"
|
||||
#elif ENABLED(DELTA)
|
||||
#error "Z_DUAL_ENDSTOPS is not compatible with DELTA."
|
||||
#error "Z_MULTI_ENDSTOPS is not compatible with DELTA."
|
||||
#endif
|
||||
#endif
|
||||
#if ENABLED(Z_TRIPLE_ENDSTOPS)
|
||||
#if !Z2_USE_ENDSTOP
|
||||
#error "You must set Z2_USE_ENDSTOP with Z_TRIPLE_ENDSTOPS."
|
||||
#elif Z2_USE_ENDSTOP == _XMIN_ && DISABLED(USE_XMIN_PLUG)
|
||||
#error "USE_XMIN_PLUG is required when Z2_USE_ENDSTOP is _XMIN_."
|
||||
#elif Z2_USE_ENDSTOP == _XMAX_ && DISABLED(USE_XMAX_PLUG)
|
||||
#error "USE_XMAX_PLUG is required when Z2_USE_ENDSTOP is _XMAX_."
|
||||
#elif Z2_USE_ENDSTOP == _YMIN_ && DISABLED(USE_YMIN_PLUG)
|
||||
#error "USE_YMIN_PLUG is required when Z2_USE_ENDSTOP is _YMIN_."
|
||||
#elif Z2_USE_ENDSTOP == _YMAX_ && DISABLED(USE_YMAX_PLUG)
|
||||
#error "USE_YMAX_PLUG is required when Z2_USE_ENDSTOP is _YMAX_."
|
||||
#elif Z2_USE_ENDSTOP == _ZMIN_ && DISABLED(USE_ZMIN_PLUG)
|
||||
#error "USE_ZMIN_PLUG is required when Z2_USE_ENDSTOP is _ZMIN_."
|
||||
#elif Z2_USE_ENDSTOP == _ZMAX_ && DISABLED(USE_ZMAX_PLUG)
|
||||
#error "USE_ZMAX_PLUG is required when Z2_USE_ENDSTOP is _ZMAX_."
|
||||
#elif !HAS_Z2_MIN && !HAS_Z2_MAX
|
||||
#error "Z2_USE_ENDSTOP has been assigned to a nonexistent endstop!"
|
||||
#elif ENABLED(DELTA)
|
||||
#error "Z_TRIPLE_ENDSTOPS is not compatible with DELTA."
|
||||
#if NUM_Z_STEPPER_DRIVERS >= 3
|
||||
#if !Z3_USE_ENDSTOP
|
||||
#error "You must set Z3_USE_ENDSTOP with Z_MULTI_ENDSTOPS when NUM_Z_STEPPER_DRIVERS >= 3."
|
||||
#elif Z3_USE_ENDSTOP == _XMIN_ && DISABLED(USE_XMIN_PLUG)
|
||||
#error "USE_XMIN_PLUG is required when Z3_USE_ENDSTOP is _XMIN_."
|
||||
#elif Z3_USE_ENDSTOP == _XMAX_ && DISABLED(USE_XMAX_PLUG)
|
||||
#error "USE_XMAX_PLUG is required when Z3_USE_ENDSTOP is _XMAX_."
|
||||
#elif Z3_USE_ENDSTOP == _YMIN_ && DISABLED(USE_YMIN_PLUG)
|
||||
#error "USE_YMIN_PLUG is required when Z3_USE_ENDSTOP is _YMIN_."
|
||||
#elif Z3_USE_ENDSTOP == _YMAX_ && DISABLED(USE_YMAX_PLUG)
|
||||
#error "USE_YMAX_PLUG is required when Z3_USE_ENDSTOP is _YMAX_."
|
||||
#elif Z3_USE_ENDSTOP == _ZMIN_ && DISABLED(USE_ZMIN_PLUG)
|
||||
#error "USE_ZMIN_PLUG is required when Z3_USE_ENDSTOP is _ZMIN_."
|
||||
#elif Z3_USE_ENDSTOP == _ZMAX_ && DISABLED(USE_ZMAX_PLUG)
|
||||
#error "USE_ZMAX_PLUG is required when Z3_USE_ENDSTOP is _ZMAX_."
|
||||
#elif !HAS_Z3_MIN && !HAS_Z3_MAX
|
||||
#error "Z3_USE_ENDSTOP has been assigned to a nonexistent endstop!"
|
||||
#endif
|
||||
#endif
|
||||
#if !Z3_USE_ENDSTOP
|
||||
#error "You must set Z3_USE_ENDSTOP with Z_TRIPLE_ENDSTOPS."
|
||||
#elif Z3_USE_ENDSTOP == _XMIN_ && DISABLED(USE_XMIN_PLUG)
|
||||
#error "USE_XMIN_PLUG is required when Z3_USE_ENDSTOP is _XMIN_."
|
||||
#elif Z3_USE_ENDSTOP == _XMAX_ && DISABLED(USE_XMAX_PLUG)
|
||||
#error "USE_XMAX_PLUG is required when Z3_USE_ENDSTOP is _XMAX_."
|
||||
#elif Z3_USE_ENDSTOP == _YMIN_ && DISABLED(USE_YMIN_PLUG)
|
||||
#error "USE_YMIN_PLUG is required when Z3_USE_ENDSTOP is _YMIN_."
|
||||
#elif Z3_USE_ENDSTOP == _YMAX_ && DISABLED(USE_YMAX_PLUG)
|
||||
#error "USE_YMAX_PLUG is required when Z3_USE_ENDSTOP is _YMAX_."
|
||||
#elif Z3_USE_ENDSTOP == _ZMIN_ && DISABLED(USE_ZMIN_PLUG)
|
||||
#error "USE_ZMIN_PLUG is required when Z3_USE_ENDSTOP is _ZMIN_."
|
||||
#elif Z3_USE_ENDSTOP == _ZMAX_ && DISABLED(USE_ZMAX_PLUG)
|
||||
#error "USE_ZMAX_PLUG is required when Z3_USE_ENDSTOP is _ZMAX_."
|
||||
#elif !HAS_Z3_MIN && !HAS_Z3_MAX
|
||||
#error "Z3_USE_ENDSTOP has been assigned to a nonexistent endstop!"
|
||||
#elif ENABLED(DELTA)
|
||||
#error "Z_TRIPLE_ENDSTOPS is not compatible with DELTA."
|
||||
#if NUM_Z_STEPPER_DRIVERS >= 4
|
||||
#if !Z4_USE_ENDSTOP
|
||||
#error "You must set Z4_USE_ENDSTOP with Z_MULTI_ENDSTOPS when NUM_Z_STEPPER_DRIVERS >= 4."
|
||||
#elif Z4_USE_ENDSTOP == _XMIN_ && DISABLED(USE_XMIN_PLUG)
|
||||
#error "USE_XMIN_PLUG is required when Z4_USE_ENDSTOP is _XMIN_."
|
||||
#elif Z4_USE_ENDSTOP == _XMAX_ && DISABLED(USE_XMAX_PLUG)
|
||||
#error "USE_XMAX_PLUG is required when Z4_USE_ENDSTOP is _XMAX_."
|
||||
#elif Z4_USE_ENDSTOP == _YMIN_ && DISABLED(USE_YMIN_PLUG)
|
||||
#error "USE_YMIN_PLUG is required when Z4_USE_ENDSTOP is _YMIN_."
|
||||
#elif Z4_USE_ENDSTOP == _YMAX_ && DISABLED(USE_YMAX_PLUG)
|
||||
#error "USE_YMAX_PLUG is required when Z4_USE_ENDSTOP is _YMAX_."
|
||||
#elif Z4_USE_ENDSTOP == _ZMIN_ && DISABLED(USE_ZMIN_PLUG)
|
||||
#error "USE_ZMIN_PLUG is required when Z4_USE_ENDSTOP is _ZMIN_."
|
||||
#elif Z4_USE_ENDSTOP == _ZMAX_ && DISABLED(USE_ZMAX_PLUG)
|
||||
#error "USE_ZMAX_PLUG is required when Z4_USE_ENDSTOP is _ZMAX_."
|
||||
#elif !HAS_Z4_MIN && !HAS_Z4_MAX
|
||||
#error "Z4_USE_ENDSTOP has been assigned to a nonexistent endstop!"
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1881,7 +1967,6 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
+ (ENABLED(ULTRA_LCD) && DISABLED(IS_ULTRA_LCD)) \
|
||||
+ (ENABLED(U8GLIB_SSD1306) && DISABLED(IS_U8GLIB_SSD1306)) \
|
||||
+ (ENABLED(MINIPANEL) && DISABLED(MKS_MINI_12864, ENDER2_STOCKDISPLAY)) \
|
||||
+ (ENABLED(REPRAPWORLD_KEYPAD) && DISABLED(IS_RRW_KEYPAD)) \
|
||||
+ (ENABLED(EXTENSIBLE_UI) && DISABLED(IS_EXTUI)) \
|
||||
+ (ENABLED(ULTIPANEL) && DISABLED(IS_ULTIPANEL)) \
|
||||
+ ENABLED(RADDS_DISPLAY) \
|
||||
@@ -1981,6 +2066,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#error "An SPI driven TMC driver on E4 requires E4_CS_PIN."
|
||||
#elif INVALID_TMC_SPI(E5)
|
||||
#error "An SPI driven TMC driver on E5 requires E5_CS_PIN."
|
||||
#elif INVALID_TMC_SPI(E6)
|
||||
#error "An SPI driven TMC driver on E6 requires E6_CS_PIN."
|
||||
#elif INVALID_TMC_SPI(E7)
|
||||
#error "An SPI driven TMC driver on E7 requires E7_CS_PIN."
|
||||
#endif
|
||||
#undef INVALID_TMC_SPI
|
||||
|
||||
@@ -2014,6 +2103,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#error "TMC2208 or TMC2209 on E4 requires E4_HARDWARE_SERIAL or E4_SERIAL_(RX|TX)_PIN."
|
||||
#elif INVALID_TMC_UART(E5)
|
||||
#error "TMC2208 or TMC2209 on E5 requires E5_HARDWARE_SERIAL or E5_SERIAL_(RX|TX)_PIN."
|
||||
#elif INVALID_TMC_UART(E6)
|
||||
#error "TMC2208 or TMC2209 on E6 requires E6_HARDWARE_SERIAL or E6_SERIAL_(RX|TX)_PIN."
|
||||
#elif INVALID_TMC_UART(E7)
|
||||
#error "TMC2208 or TMC2209 on E7 requires E7_HARDWARE_SERIAL or E7_SERIAL_(RX|TX)_PIN."
|
||||
#endif
|
||||
#undef INVALID_TMC_UART
|
||||
|
||||
@@ -2047,6 +2140,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
INVALID_TMC_ADDRESS(E4);
|
||||
#elif AXIS_DRIVER_TYPE_E5(TMC2209)
|
||||
INVALID_TMC_ADDRESS(E5);
|
||||
#elif AXIS_DRIVER_TYPE_E6(TMC2209)
|
||||
INVALID_TMC_ADDRESS(E6);
|
||||
#elif AXIS_DRIVER_TYPE_E7(TMC2209)
|
||||
INVALID_TMC_ADDRESS(E7);
|
||||
#endif
|
||||
#undef INVALID_TMC_ADDRESS
|
||||
|
||||
@@ -2165,7 +2262,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
|| (IN_CHAIN(Z3) && !PIN_EXISTS(Z3_CS)) || (IN_CHAIN(E0) && !PIN_EXISTS(E0_CS)) \
|
||||
|| (IN_CHAIN(E1) && !PIN_EXISTS(E1_CS)) || (IN_CHAIN(E2) && !PIN_EXISTS(E2_CS)) \
|
||||
|| (IN_CHAIN(E3) && !PIN_EXISTS(E3_CS)) || (IN_CHAIN(E4) && !PIN_EXISTS(E4_CS)) \
|
||||
|| (IN_CHAIN(E5) && !PIN_EXISTS(E5_CS))
|
||||
|| (IN_CHAIN(E5) && !PIN_EXISTS(E5_CS)) || (IN_CHAIN(E6) && !PIN_EXISTS(E6_CS)) \
|
||||
|| (IN_CHAIN(E7) && !PIN_EXISTS(E7_CS))
|
||||
#error "All chained TMC drivers need a CS pin."
|
||||
#else
|
||||
#if IN_CHAIN(X)
|
||||
@@ -2194,6 +2292,10 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
#define CS_COMPARE E4_CS_PIN
|
||||
#elif IN_CHAIN(E5)
|
||||
#define CS_COMPARE E5_CS_PIN
|
||||
#elif IN_CHAIN(E6)
|
||||
#define CS_COMPARE E6_CS_PIN
|
||||
#elif IN_CHAIN(E7)
|
||||
#define CS_COMPARE E7_CS_PIN
|
||||
#endif
|
||||
#if (IN_CHAIN(X) && X_CS_PIN != CS_COMPARE) || (IN_CHAIN(Y) && Y_CS_PIN != CS_COMPARE) \
|
||||
|| (IN_CHAIN(Z) && Z_CS_PIN != CS_COMPARE) || (IN_CHAIN(X2) && X2_CS_PIN != CS_COMPARE) \
|
||||
@@ -2201,7 +2303,8 @@ static_assert(Y_MAX_LENGTH >= Y_BED_SIZE, "Movement bounds (Y_MIN_POS, Y_MAX_POS
|
||||
|| (IN_CHAIN(Z3) && Z3_CS_PIN != CS_COMPARE) || (IN_CHAIN(E0) && E0_CS_PIN != CS_COMPARE) \
|
||||
|| (IN_CHAIN(E1) && E1_CS_PIN != CS_COMPARE) || (IN_CHAIN(E2) && E2_CS_PIN != CS_COMPARE) \
|
||||
|| (IN_CHAIN(E3) && E3_CS_PIN != CS_COMPARE) || (IN_CHAIN(E4) && E4_CS_PIN != CS_COMPARE) \
|
||||
|| (IN_CHAIN(E5) && E5_CS_PIN != CS_COMPARE)
|
||||
|| (IN_CHAIN(E5) && E5_CS_PIN != CS_COMPARE) || (IN_CHAIN(E6) && E6_CS_PIN != CS_COMPARE) \
|
||||
|| (IN_CHAIN(E7) && E7_CS_PIN != CS_COMPARE)
|
||||
#error "All chained TMC drivers must use the same CS pin."
|
||||
#endif
|
||||
#endif
|
||||
@@ -2322,12 +2425,12 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
|
||||
#endif
|
||||
|
||||
#if ENABLED(Z_STEPPER_AUTO_ALIGN)
|
||||
#if !Z_MULTI_STEPPER_DRIVERS
|
||||
#error "Z_STEPPER_AUTO_ALIGN requires Z_DUAL_STEPPER_DRIVERS or Z_TRIPLE_STEPPER_DRIVERS."
|
||||
#if NUM_Z_STEPPER_DRIVERS <= 1
|
||||
#error "Z_STEPPER_AUTO_ALIGN requires NUM_Z_STEPPER_DRIVERS greater than 1."
|
||||
#elif !HAS_BED_PROBE
|
||||
#error "Z_STEPPER_AUTO_ALIGN requires a Z-bed probe."
|
||||
#elif ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) && DISABLED(Z_TRIPLE_STEPPER_DRIVERS)
|
||||
#error "Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS requires Z_TRIPLE_STEPPER_DRIVERS."
|
||||
#elif ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS) && NUM_Z_STEPPER_DRIVERS != 3
|
||||
#error "Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS requires NUM_Z_STEPPER_DRIVERS to be 3."
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -2494,12 +2597,26 @@ static_assert( _ARR_TEST(3,0) && _ARR_TEST(3,1) && _ARR_TEST(3,2)
|
||||
#error "SPINDLE_LASER_PWM_PIN conflicts with E4_AUTO_FAN_PIN."
|
||||
#elif _PIN_CONFLICT(E5_AUTO_FAN)
|
||||
#error "SPINDLE_LASER_PWM_PIN conflicts with E5_AUTO_FAN_PIN."
|
||||
#elif _PIN_CONFLICT(E6_AUTO_FAN)
|
||||
#error "SPINDLE_LASER_PWM_PIN conflicts with E6_AUTO_FAN_PIN."
|
||||
#elif _PIN_CONFLICT(E7_AUTO_FAN)
|
||||
#error "SPINDLE_LASER_PWM_PIN conflicts with E7_AUTO_FAN_PIN."
|
||||
#elif _PIN_CONFLICT(FAN)
|
||||
#error "SPINDLE_LASER_PWM_PIN conflicts with FAN_PIN."
|
||||
#elif _PIN_CONFLICT(FAN1)
|
||||
#error "SPINDLE_LASER_PWM_PIN conflicts with FAN1_PIN."
|
||||
#elif _PIN_CONFLICT(FAN2)
|
||||
#error "SPINDLE_LASER_PWM_PIN conflicts with FAN2_PIN."
|
||||
#elif _PIN_CONFLICT(FAN3)
|
||||
#error "SPINDLE_LASER_PWM_PIN conflicts with FAN3_PIN."
|
||||
#elif _PIN_CONFLICT(FAN4)
|
||||
#error "SPINDLE_LASER_PWM_PIN conflicts with FAN4_PIN."
|
||||
#elif _PIN_CONFLICT(FAN5)
|
||||
#error "SPINDLE_LASER_PWM_PIN conflicts with FAN5_PIN."
|
||||
#elif _PIN_CONFLICT(FAN6)
|
||||
#error "SPINDLE_LASER_PWM_PIN conflicts with FAN6_PIN."
|
||||
#elif _PIN_CONFLICT(FAN7)
|
||||
#error "SPINDLE_LASER_PWM_PIN conflicts with FAN7_PIN."
|
||||
#elif _PIN_CONFLICT(CONTROLLERFAN)
|
||||
#error "SPINDLE_LASER_PWM_PIN conflicts with CONTROLLERFAN_PIN."
|
||||
#elif _PIN_CONFLICT(MOTOR_CURRENT_PWM_XY)
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
* version was tagged.
|
||||
*/
|
||||
#ifndef STRING_DISTRIBUTION_DATE
|
||||
#define STRING_DISTRIBUTION_DATE "2020-01-18"
|
||||
#define STRING_DISTRIBUTION_DATE "2020-01-26"
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
||||
@@ -100,7 +100,7 @@ static const hd44780_charmap_t g_hd44780_charmap_device[] PROGMEM = {
|
||||
{IV('カ'), 0xB6, 0},
|
||||
{IV('ガ'), 0xB6, 0xDE},
|
||||
{IV('キ'), 0xB7, 0},
|
||||
{IV('ギ'), 0xB7, 0xDE}, //
|
||||
{IV('ギ'), 0xB7, 0xDE},
|
||||
{IV('ク'), 0xB8, 0},
|
||||
{IV('グ'), 0xB8, 0xDE},
|
||||
{IV('ケ'), 0xB9, 0},
|
||||
@@ -416,6 +416,7 @@ static const hd44780_charmap_t g_hd44780_charmap_device[] PROGMEM = {
|
||||
{IV('⎭'), 0x17, 0},
|
||||
{IV('⎰'), 0x18, 0},
|
||||
{IV('⎱'), 0x19, 0},
|
||||
|
||||
{IV('⎲'), 0x12, 0},
|
||||
{IV('⎳'), 0x13, 0},
|
||||
|
||||
@@ -488,119 +489,124 @@ static const hd44780_charmap_t g_hd44780_charmap_device[] PROGMEM = {
|
||||
{IV('¾'), 0xF3, 0}, // 00BE
|
||||
{IV('¿'), 0xCD, 0}, // 00BF
|
||||
|
||||
{IV('Ё'), 0xA2, 0}, // 0401
|
||||
{IV('А'), 'A', 0}, // 0410
|
||||
{IV('Б'), 0xA0, 0},
|
||||
{IV('В'), 'B', 0},
|
||||
{IV('Г'), 0xA1, 0},
|
||||
{IV('Д'), 0xE0, 0},
|
||||
{IV('Е'), 'E', 0},
|
||||
{IV('Ж'), 0xA3, 0},
|
||||
{IV('З'), 0xA4, 0},
|
||||
{IV('И'), 0xA5, 0},
|
||||
{IV('Й'), 0xA6, 0},
|
||||
{IV('К'), 'K', 0},
|
||||
{IV('Л'), 0xA7, 0},
|
||||
{IV('М'), 'M', 0},
|
||||
{IV('Н'), 'H', 0},
|
||||
{IV('О'), 'O', 0},
|
||||
{IV('П'), 0xA8, 0},
|
||||
{IV('Р'), 'P', 0},
|
||||
{IV('С'), 'C', 0},
|
||||
{IV('Т'), 'T', 0},
|
||||
{IV('У'), 0xA9, 0},
|
||||
{IV('Ф'), 0xAA, 0},
|
||||
{IV('Х'), 'X', 0},
|
||||
{IV('Ц'), 0xE1, 0},
|
||||
{IV('Ч'), 0xAB, 0},
|
||||
{IV('Ш'), 0xAC, 0},
|
||||
{IV('Щ'), 0xE2, 0},
|
||||
{IV('Ъ'), 0xAD, 0},
|
||||
{IV('Ы'), 0xAE, 0},
|
||||
{IV('Ь'), 'b', 0},
|
||||
{IV('Э'), 0xAF, 0},
|
||||
{IV('Ю'), 0xB0, 0},
|
||||
{IV('Я'), 0xB1, 0},
|
||||
{IV('а'), 'a', 0},
|
||||
#if ENABLED(DISPLAY_CHARSET_ISO10646_5)
|
||||
|
||||
{IV('б'), 0xB2, 0},
|
||||
{IV('в'), 0xB3, 0},
|
||||
{IV('г'), 0xB4, 0},
|
||||
{IV('д'), 0xE3, 0},
|
||||
{IV('е'), 'e', 0},
|
||||
{IV('ж'), 0xB6, 0},
|
||||
{IV('з'), 0xB7, 0},
|
||||
{IV('и'), 0xB8, 0},
|
||||
{IV('й'), 0xB9, 0},
|
||||
{IV('к'), 0xBA, 0}, //клмноп
|
||||
{IV('л'), 0xBB, 0},
|
||||
{IV('м'), 0xBC, 0},
|
||||
{IV('н'), 0xBD, 0},
|
||||
{IV('о'), 'o', 0},
|
||||
{IV('п'), 0xBE, 0},
|
||||
{IV('р'), 'p', 0},
|
||||
{IV('с'), 'c', 0},
|
||||
{IV('т'), 0xBF, 0},
|
||||
// Map Cyrillic to HD44780 extended CYRILLIC where possible
|
||||
{IV('Ё'), 0xA2, 0}, // 0401
|
||||
{IV('А'), 'A', 0}, // 0410
|
||||
{IV('Б'), 0xA0, 0},
|
||||
{IV('В'), 'B', 0},
|
||||
{IV('Г'), 0xA1, 0},
|
||||
{IV('Д'), 0xE0, 0},
|
||||
{IV('Е'), 'E', 0},
|
||||
{IV('Ж'), 0xA3, 0},
|
||||
{IV('З'), 0xA4, 0},
|
||||
{IV('И'), 0xA5, 0},
|
||||
{IV('Й'), 0xA6, 0},
|
||||
{IV('К'), 'K', 0},
|
||||
{IV('Л'), 0xA7, 0},
|
||||
{IV('М'), 'M', 0},
|
||||
{IV('Н'), 'H', 0},
|
||||
{IV('О'), 'O', 0},
|
||||
{IV('П'), 0xA8, 0},
|
||||
{IV('Р'), 'P', 0},
|
||||
{IV('С'), 'C', 0},
|
||||
{IV('Т'), 'T', 0},
|
||||
{IV('У'), 0xA9, 0},
|
||||
{IV('Ф'), 0xAA, 0},
|
||||
{IV('Х'), 'X', 0},
|
||||
{IV('Ц'), 0xE1, 0},
|
||||
{IV('Ч'), 0xAB, 0},
|
||||
{IV('Ш'), 0xAC, 0},
|
||||
{IV('Щ'), 0xE2, 0},
|
||||
{IV('Ъ'), 0xAD, 0},
|
||||
{IV('Ы'), 0xAE, 0},
|
||||
{IV('Ь'), 'b', 0},
|
||||
{IV('Э'), 0xAF, 0},
|
||||
{IV('Ю'), 0xB0, 0},
|
||||
{IV('Я'), 0xB1, 0},
|
||||
{IV('а'), 'a', 0},
|
||||
|
||||
{IV('у'), 'y', 0},
|
||||
{IV('ф'), 0xE4, 0},
|
||||
{IV('х'), 'x', 0},
|
||||
{IV('ц'), 0xE5, 0},
|
||||
{IV('ч'), 0xC0, 0},
|
||||
{IV('ш'), 0xC1, 0},
|
||||
{IV('щ'), 0xE6, 0},
|
||||
{IV('ъ'), 0xC2, 0},
|
||||
{IV('ы'), 0xC3, 0},
|
||||
{IV('ь'), 0xC4, 0},
|
||||
{IV('э'), 0xC5, 0},
|
||||
{IV('ю'), 0xC6, 0},
|
||||
{IV('я'), 0xC7, 0}, // 044F
|
||||
{IV('ё'), 0xB5, 0}, // 0451
|
||||
//{IV(''), 0xC8, 0},
|
||||
//{IV(''), 0xC9, 0},
|
||||
//{IV(''), 0xCA, 0},
|
||||
//{IV(''), 0xCB, 0},
|
||||
//{IV(''), 0xCC, 0},
|
||||
//{IV(''), 0xCD, 0},
|
||||
//{IV(''), 0xCE, 0},
|
||||
{IV('б'), 0xB2, 0},
|
||||
{IV('в'), 0xB3, 0},
|
||||
{IV('г'), 0xB4, 0},
|
||||
{IV('д'), 0xE3, 0},
|
||||
{IV('е'), 'e', 0},
|
||||
{IV('ж'), 0xB6, 0},
|
||||
{IV('з'), 0xB7, 0},
|
||||
{IV('и'), 0xB8, 0},
|
||||
{IV('й'), 0xB9, 0},
|
||||
{IV('к'), 0xBA, 0}, //клмноп
|
||||
{IV('л'), 0xBB, 0},
|
||||
{IV('м'), 0xBC, 0},
|
||||
{IV('н'), 0xBD, 0},
|
||||
{IV('о'), 'o', 0},
|
||||
{IV('п'), 0xBE, 0},
|
||||
{IV('р'), 'p', 0},
|
||||
{IV('с'), 'c', 0},
|
||||
{IV('т'), 0xBF, 0},
|
||||
|
||||
//{IV(''), 0xD0, 0},
|
||||
//{IV(''), 0xD1, 0},
|
||||
//{IV(''), 0xD2, 0},
|
||||
//{IV(''), 0xD3, 0},
|
||||
//{IV(''), 0xD4, 0},
|
||||
//{IV(''), 0xD5, 0},
|
||||
//{IV(''), 0xD6, 0},
|
||||
//{IV(''), 0xD7, 0},
|
||||
//{IV(''), 0xD8, 0},
|
||||
//{IV(''), 0xDB, 0},
|
||||
//{IV(''), 0xDC, 0},
|
||||
//{IV(''), 0xDD, 0},
|
||||
//{IV(''), 0xDE, 0},
|
||||
//{IV(''), 0xDF, 0},
|
||||
{IV('у'), 'y', 0},
|
||||
{IV('ф'), 0xE4, 0},
|
||||
{IV('х'), 'x', 0},
|
||||
{IV('ц'), 0xE5, 0},
|
||||
{IV('ч'), 0xC0, 0},
|
||||
{IV('ш'), 0xC1, 0},
|
||||
{IV('щ'), 0xE6, 0},
|
||||
{IV('ъ'), 0xC2, 0},
|
||||
{IV('ы'), 0xC3, 0},
|
||||
{IV('ь'), 0xC4, 0},
|
||||
{IV('э'), 0xC5, 0},
|
||||
{IV('ю'), 0xC6, 0},
|
||||
{IV('я'), 0xC7, 0}, // 044F
|
||||
{IV('ё'), 0xB5, 0}, // 0451
|
||||
//{IV(''), 0xC8, 0},
|
||||
//{IV(''), 0xC9, 0},
|
||||
//{IV(''), 0xCA, 0},
|
||||
//{IV(''), 0xCB, 0},
|
||||
//{IV(''), 0xCC, 0},
|
||||
//{IV(''), 0xCD, 0},
|
||||
//{IV(''), 0xCE, 0},
|
||||
|
||||
//{IV(''), 0xE7, 0},
|
||||
//{IV(''), 0xE8, 0},
|
||||
//{IV(''), 0xE9, 0},
|
||||
//{IV(''), 0xEA, 0},
|
||||
//{IV(''), 0xEB, 0},
|
||||
//{IV(''), 0xEC, 0},
|
||||
//{IV(''), 0xED, 0},
|
||||
//{IV(''), 0xEE, 0},
|
||||
//{IV(''), 0xEF, 0},
|
||||
//{IV(''), 0xD0, 0},
|
||||
//{IV(''), 0xD1, 0},
|
||||
//{IV(''), 0xD2, 0},
|
||||
//{IV(''), 0xD3, 0},
|
||||
//{IV(''), 0xD4, 0},
|
||||
//{IV(''), 0xD5, 0},
|
||||
//{IV(''), 0xD6, 0},
|
||||
//{IV(''), 0xD7, 0},
|
||||
//{IV(''), 0xD8, 0},
|
||||
//{IV(''), 0xDB, 0},
|
||||
//{IV(''), 0xDC, 0},
|
||||
//{IV(''), 0xDD, 0},
|
||||
//{IV(''), 0xDE, 0},
|
||||
//{IV(''), 0xDF, 0},
|
||||
|
||||
//{IV(''), 0xF4, 0},
|
||||
//{IV(''), 0xF5, 0},
|
||||
//{IV(''), 0xF6, 0},
|
||||
//{IV(''), 0xF7, 0},
|
||||
//{IV(''), 0xF8, 0},
|
||||
//{IV(''), 0xF9, 0},
|
||||
//{IV(''), 0xFA, 0},
|
||||
//{IV(''), 0xFB, 0},
|
||||
//{IV(''), 0xFC, 0},
|
||||
//{IV(''), 0xFD, 0},
|
||||
//{IV(''), 0xFE, 0},
|
||||
//{IV(''), 0xFF, 0},
|
||||
//{IV(''), 0xE7, 0},
|
||||
//{IV(''), 0xE8, 0},
|
||||
//{IV(''), 0xE9, 0},
|
||||
//{IV(''), 0xEA, 0},
|
||||
//{IV(''), 0xEB, 0},
|
||||
//{IV(''), 0xEC, 0},
|
||||
//{IV(''), 0xED, 0},
|
||||
//{IV(''), 0xEE, 0},
|
||||
//{IV(''), 0xEF, 0},
|
||||
|
||||
//{IV(''), 0xF4, 0},
|
||||
//{IV(''), 0xF5, 0},
|
||||
//{IV(''), 0xF6, 0},
|
||||
//{IV(''), 0xF7, 0},
|
||||
//{IV(''), 0xF8, 0},
|
||||
//{IV(''), 0xF9, 0},
|
||||
//{IV(''), 0xFA, 0},
|
||||
//{IV(''), 0xFB, 0},
|
||||
//{IV(''), 0xFC, 0},
|
||||
//{IV(''), 0xFD, 0},
|
||||
//{IV(''), 0xFE, 0},
|
||||
//{IV(''), 0xFF, 0},
|
||||
|
||||
#endif
|
||||
|
||||
{IV('↑'), 0xD9, 0}, // 2191 ←↑→↓
|
||||
{IV('↓'), 0xDA, 0}, // 2193
|
||||
@@ -613,7 +619,7 @@ static const hd44780_charmap_t g_hd44780_charmap_common[] PROGMEM = {
|
||||
{IV('¢'), 'c', 0}, // A2
|
||||
{IV('°'), 0x09, 0}, // B0 Marlin special: '°' LCD_STR_DEGREE (0x09)
|
||||
|
||||
// map WESTERN code to the plain ASCII
|
||||
// Map WESTERN code to plain ASCII
|
||||
{IV('Á'), 'A', 0}, // C1
|
||||
{IV('Â'), 'A', 0}, // C2
|
||||
{IV('Ã'), 'A', 0}, // C3
|
||||
@@ -697,147 +703,228 @@ static const hd44780_charmap_t g_hd44780_charmap_common[] PROGMEM = {
|
||||
|
||||
{IV('ˣ'), 'x', 0}, // 02E3
|
||||
|
||||
{IV('΄'), '\'', 0}, // 0384
|
||||
{IV('΅'), '\'', 0}, // 0385
|
||||
{IV('Ά'), 'A', 0}, // 0386
|
||||
{IV('·'), '.', 0}, // 0387
|
||||
{IV('Έ'), 'E', 0}, // 0388
|
||||
{IV('Ή'), 'H', 0}, // 0389
|
||||
{IV('Ί'), 'I', 0}, // 038A
|
||||
{IV('Ό'), 'O', 0}, // 038C
|
||||
{IV('Ύ'), 'Y', 0}, // 038E
|
||||
{IV('Ώ'), 'O', 0}, // 038F
|
||||
{IV('ΐ'), 'i', 0}, // 0390
|
||||
{IV('Α'), 'A', 0}, // 0391
|
||||
{IV('Β'), 'B', 0}, // 0392
|
||||
{IV('Γ'), 'T', 0}, // 0393, Gamma
|
||||
{IV('Δ'), '4', 0}, // 0394, Delta, ◿
|
||||
{IV('Ε'), 'E', 0}, // 0395
|
||||
{IV('Ζ'), 'Z', 0}, // 0396
|
||||
{IV('Η'), 'H', 0}, // 0397
|
||||
{IV('Θ'), '0', 0}, // 0398, Theta
|
||||
{IV('Ι'), 'I', 0}, // 0399
|
||||
{IV('Κ'), 'K', 0}, // 039A
|
||||
{IV('Λ'), '^', 0}, // 039B, Lambda
|
||||
{IV('Μ'), 'M', 0}, // 039C
|
||||
{IV('Ν'), 'N', 0}, // 039D
|
||||
{IV('Ξ'), '3', 0}, // 039E, Xi
|
||||
{IV('Ο'), 'O', 0}, // 039F
|
||||
{IV('Π'), 'n', 0}, // 03A0, Pi
|
||||
{IV('Ρ'), 'P', 0}, // 03A1
|
||||
{IV('Σ'), 'E', 0}, // 03A3, Sigma
|
||||
{IV('Τ'), 'T', 0}, // 03A4
|
||||
{IV('Υ'), 'Y', 0}, // 03A5, Upsilon
|
||||
{IV('Φ'), 'p', 0}, // 03A6, Phi
|
||||
{IV('Χ'), 'X', 0}, // 03A7
|
||||
{IV('Ψ'), 'P', 0}, // 03A8, Psi
|
||||
{IV('Ω'), 'O', 0}, // 03A9, Omega
|
||||
{IV('Ϊ'), 'I', 0}, // 03AA
|
||||
{IV('Ϋ'), 'Y', 0}, // 03AB
|
||||
{IV('ά'), 'a', 0}, // 03AC
|
||||
{IV('έ'), 'e', 0}, // 03AD
|
||||
{IV('ή'), 'n', 0}, // 03AE
|
||||
{IV('ί'), 'i', 0}, // 03AF
|
||||
{IV('ΰ'), 'v', 0}, // 03B0
|
||||
{IV('α'), 'a', 0}, // 03B1, alpha
|
||||
{IV('β'), 'B', 0}, // 03B2, beta
|
||||
{IV('γ'), 'v', 0}, // 03B3, gamma
|
||||
{IV('δ'), 'd', 0}, // 03B4, delta
|
||||
{IV('ε'), 'e', 0}, // 03B5, epsilon
|
||||
{IV('ζ'), 'Z', 0}, // 03B6, zeta
|
||||
{IV('η'), 'n', 0}, // 03B7, eta
|
||||
{IV('θ'), '0', 0}, // 03B8, theta
|
||||
{IV('ι'), 'i', 0}, // 03B9, lota
|
||||
{IV('κ'), 'k', 0}, // 03BA, kappa
|
||||
{IV('λ'), 'L', 0}, // 03BB, lambda
|
||||
{IV('μ'), 'u', 0}, // 03BC, mu
|
||||
{IV('ν'), 'v', 0}, // 03BD, nu
|
||||
{IV('ξ'), 'e', 0}, // 03BE, xi
|
||||
{IV('ο'), 'o', 0}, // 03BF
|
||||
{IV('π'), 'n', 0}, // 03C0, pi
|
||||
{IV('ρ'), 'p', 0}, // 03C1, rho
|
||||
{IV('ς'), 'c', 0}, // 03C2
|
||||
{IV('σ'), 'o', 0}, // 03C3, sigma
|
||||
{IV('τ'), 't', 0}, // 03C4, tau
|
||||
{IV('υ'), 'v', 0}, // 03C5, upsilon
|
||||
{IV('φ'), 'p', 0}, // 03C6
|
||||
{IV('χ'), 'X', 0}, // 03C7, chi
|
||||
{IV('ψ'), 'W', 0}, // 03C8, psi
|
||||
{IV('ω'), 'w', 0}, // 03C9, omega
|
||||
{IV('ϊ'), 'i', 0}, // 03CA
|
||||
{IV('ϋ'), 'v', 0}, // 03CB
|
||||
{IV('ό'), 'o', 0}, // 03CC
|
||||
{IV('ύ'), 'v', 0}, // 03CD
|
||||
{IV('ώ'), 'w', 0}, // 03CE
|
||||
#if ENABLED(DISPLAY_CHARSET_ISO10646_VI)
|
||||
|
||||
// map CYRILLIC code to the plain ASCII
|
||||
{IV('Ё'), 'E', 0}, // 0401
|
||||
{IV('А'), 'A', 0}, // 0410
|
||||
{IV('Б'), 'b', 0}, // 0411
|
||||
{IV('В'), 'B', 0}, // 0412
|
||||
{IV('Г'), 'T', 0}, // 0413
|
||||
{IV('Д'), 'Q', 0}, // 0414
|
||||
{IV('Е'), 'E', 0}, // 0415
|
||||
{IV('Ж'), '*', 0}, // 0416
|
||||
{IV('З'), 'E', 0}, // 0417
|
||||
{IV('И'), 'N', 0}, // 0418
|
||||
{IV('Й'), 'N', 0}, // 0419
|
||||
{IV('К'), 'K', 0}, // 041A
|
||||
{IV('Л'), 'T', 0}, // 041B
|
||||
{IV('М'), 'M', 0}, // 041C
|
||||
{IV('Н'), 'H', 0}, // 041D
|
||||
{IV('О'), 'O', 0}, // 041E
|
||||
{IV('П'), 'n', 0}, // 041F
|
||||
{IV('Р'), 'P', 0}, // 0420
|
||||
{IV('С'), 'C', 0}, // 0421
|
||||
{IV('Т'), 'T', 0}, // 0422
|
||||
{IV('У'), 'Y', 0},
|
||||
{IV('Ф'), 'o', 0},
|
||||
{IV('Х'), 'X', 0},
|
||||
{IV('Ц'), 'U', 0},
|
||||
{IV('Ч'), 'y', 0},
|
||||
{IV('Ш'), 'W', 0},
|
||||
{IV('Щ'), 'W', 0},
|
||||
{IV('Ъ'), 'b', 0},
|
||||
{IV('Ы'), 'b', '|'},
|
||||
{IV('Ь'), 'b'},
|
||||
{IV('Э'), 'e'},
|
||||
{IV('Ю'), '|', 'O'},
|
||||
{IV('Я'), '9', '|'}, // 042F
|
||||
// Map Vietnamese phonetics
|
||||
|
||||
{IV('а'), 'a', 0}, // 0430
|
||||
{IV('б'), '6', 0}, // 0431
|
||||
{IV('в'), 'B', 0}, // 0432,
|
||||
{IV('г'), 'r', 0}, // 0433
|
||||
{IV('д'), 'a', 0}, // 0434,
|
||||
{IV('е'), 'e', 0}, // 0435
|
||||
{IV('ж'), '*', 0}, // 0436
|
||||
{IV('з'), 'e', 0}, // 0437,
|
||||
{IV('и'), 'u', 0}, // 0438
|
||||
{IV('й'), 'u', 0}, // 0439,
|
||||
{IV('к'), 'k', 0}, // 043A
|
||||
{IV('л'), 'n', 0},
|
||||
{IV('м'), 'm', 0},
|
||||
{IV('н'), 'H', 0},
|
||||
{IV('о'), 'o', 0},
|
||||
{IV('п'), 'n', 0},
|
||||
{IV('р'), 'p', 0},
|
||||
{IV('с'), 'c', 0},
|
||||
{IV('т'), 't', 0},
|
||||
{IV('у'), 'y', 0},
|
||||
{IV('ф'), 'q', 'p'},
|
||||
{IV('х'), 'x', 0},
|
||||
{IV('ц'), 'u', 0},
|
||||
{IV('ч'), 'y', 0},
|
||||
{IV('ш'), 'w', 0},
|
||||
{IV('щ'), 'w', 0},
|
||||
{IV('ъ'), 'b', 0},
|
||||
{IV('ы'), 'b', '|'},
|
||||
{IV('ь'), 'b', 0},
|
||||
{IV('э'), 'e', 0},
|
||||
{IV('ю'), '|', 'o'},
|
||||
{IV('я'), 'g', 0}, // 044F
|
||||
{IV('ё'), 'e', 0}, // 0451
|
||||
//{IV('à'), 'a', 0}, {IV('À'), 'A', 0},
|
||||
{IV('ạ'), 'a', 0}, {IV('Ạ'), 'A', 0},
|
||||
{IV('ả'), 'a', 0}, {IV('Ả'), 'A', 0},
|
||||
//{IV('ã'), 'a', 0}, {IV('Ã'), 'A', 0},
|
||||
//{IV('á'), 'á', 0}, {IV('Á'), 'A', 0},
|
||||
{IV('Ạ'), 'A', 0},
|
||||
{IV('ă'), 'a', 0}, {IV('Ă'), 'A', 0},
|
||||
{IV('ằ'), 'a', 0}, {IV('Ằ'), 'A', 0},
|
||||
{IV('ẳ'), 'a', 0}, {IV('Ẳ'), 'A', 0},
|
||||
{IV('ẵ'), 'a', 0}, {IV('Ẵ'), 'A', 0},
|
||||
{IV('ắ'), 'a', 0}, {IV('Ắ'), 'A', 0},
|
||||
{IV('ặ'), 'a', 0}, {IV('Ặ'), 'A', 0},
|
||||
{IV('â'), 'a', 0}, {IV('Â'), 'A', 0},
|
||||
{IV('ầ'), 'a', 0}, {IV('Ầ'), 'A', 0},
|
||||
{IV('ẩ'), 'a', 0}, {IV('Ẩ'), 'A', 0},
|
||||
{IV('ẫ'), 'a', 0}, {IV('Ẫ'), 'A', 0},
|
||||
{IV('ấ'), 'a', 0}, {IV('Ấ'), 'A', 0},
|
||||
{IV('ậ'), 'a', 0}, {IV('Ậ'), 'A', 0},
|
||||
//{IV('đ'), 'd', 0},
|
||||
{IV('Đ'), 'D', 0},
|
||||
{IV('e'), 'e', 0}, {IV('E'), 'E', 0},
|
||||
{IV('è'), 'e', 0}, {IV('È'), 'E', 0},
|
||||
{IV('ẻ'), 'e', 0}, {IV('Ẻ'), 'E', 0},
|
||||
{IV('ẽ'), 'e', 0}, {IV('Ẽ'), 'E', 0},
|
||||
{IV('é'), 'e', 0}, {IV('É'), 'E', 0},
|
||||
{IV('ẹ'), 'e', 0}, {IV('Ẹ'), 'E', 0},
|
||||
{IV('ê'), 'e', 0}, {IV('Ê'), 'E', 0},
|
||||
{IV('ề'), 'e', 0}, {IV('Ề'), 'E', 0},
|
||||
{IV('ể'), 'e', 0}, {IV('Ể'), 'E', 0},
|
||||
{IV('ễ'), 'e', 0}, {IV('Ễ'), 'E', 0},
|
||||
{IV('ế'), 'e', 0}, {IV('Ế'), 'E', 0},
|
||||
{IV('ệ'), 'e', 0}, {IV('Ệ'), 'E', 0},
|
||||
{IV('i'), 'i', 0}, {IV('I'), 'I', 0},
|
||||
//{IV('ì'), 'ì', 0}, {IV('Ì'), 'Ì', 0},
|
||||
{IV('ỉ'), 'ỉ', 0}, {IV('Ỉ'), 'Ỉ', 0},
|
||||
{IV('ĩ'), 'ĩ', 0}, {IV('Ĩ'), 'Ĩ', 0},
|
||||
{IV('í'), 'í', 0}, {IV('Í'), 'Í', 0},
|
||||
{IV('ị'), 'ị', 0}, {IV('Ị'), 'Ị', 0},
|
||||
{IV('o'), 'o', 0}, {IV('O'), 'O', 0},
|
||||
{IV('ò'), 'o', 0}, {IV('Ò'), 'O', 0},
|
||||
{IV('ỏ'), 'o', 0}, {IV('Ỏ'), 'O', 0},
|
||||
{IV('õ'), 'o', 0}, {IV('Õ'), 'O', 0},
|
||||
{IV('ó'), 'o', 0}, {IV('Ó'), 'O', 0},
|
||||
{IV('ọ'), 'o', 0}, {IV('Ọ'), 'O', 0},
|
||||
{IV('ô'), 'o', 0}, {IV('Ô'), 'O', 0},
|
||||
{IV('ồ'), 'o', 0}, {IV('Ồ'), 'O', 0},
|
||||
{IV('ổ'), 'o', 0}, {IV('Ổ'), 'O', 0},
|
||||
{IV('ỗ'), 'o', 0}, {IV('Ỗ'), 'O', 0},
|
||||
{IV('ố'), 'o', 0}, {IV('Ố'), 'O', 0},
|
||||
{IV('ộ'), 'o', 0}, {IV('Ộ'), 'O', 0},
|
||||
{IV('ơ'), 'o', 0}, {IV('Ơ'), 'O', 0},
|
||||
{IV('ờ'), 'o', 0}, {IV('Ờ'), 'O', 0},
|
||||
{IV('ở'), 'o', 0}, {IV('Ở'), 'O', 0},
|
||||
{IV('ỡ'), 'o', 0}, {IV('Ỡ'), 'O', 0},
|
||||
{IV('ớ'), 'o', 0}, {IV('Ớ'), 'O', 0},
|
||||
{IV('ợ'), 'o', 0}, {IV('Ợ'), 'O', 0},
|
||||
{IV('ù'), 'u', 0}, {IV('Ù'), 'U', 0},
|
||||
{IV('ủ'), 'u', 0}, {IV('Ủ'), 'U', 0},
|
||||
{IV('ũ'), 'u', 0}, {IV('Ũ'), 'U', 0},
|
||||
//{IV('ú'), 'u', 0}, {IV('Ú'), 'U', 0},
|
||||
{IV('ụ'), 'u', 0}, {IV('Ụ'), 'U', 0},
|
||||
{IV('ư'), 'u', 0}, {IV('Ư'), 'U', 0},
|
||||
{IV('ừ'), 'u', 0}, {IV('Ừ'), 'U', 0},
|
||||
{IV('ử'), 'u', 0}, {IV('Ử'), 'U', 0},
|
||||
{IV('ữ'), 'u', 0}, {IV('Ữ'), 'U', 0},
|
||||
{IV('ứ'), 'u', 0}, {IV('Ứ'), 'U', 0},
|
||||
{IV('ự'), 'u', 0}, {IV('Ự'), 'U', 0},
|
||||
{IV('y'), 'y', 0}, {IV('Y'), 'Y', 0},
|
||||
|
||||
#endif
|
||||
|
||||
#if ENABLED(DISPLAY_CHARSET_ISO10646_GREEK)
|
||||
|
||||
{IV('΄'), '\'', 0}, // 0384
|
||||
{IV('΅'), '\'', 0}, // 0385
|
||||
{IV('Ά'), 'A', 0}, // 0386
|
||||
{IV('·'), '.', 0}, // 0387
|
||||
{IV('Έ'), 'E', 0}, // 0388
|
||||
{IV('Ή'), 'H', 0}, // 0389
|
||||
{IV('Ί'), 'I', 0}, // 038A
|
||||
{IV('Ό'), 'O', 0}, // 038C
|
||||
{IV('Ύ'), 'Y', 0}, // 038E
|
||||
{IV('Ώ'), 'O', 0}, // 038F
|
||||
{IV('ΐ'), 'i', 0}, // 0390
|
||||
{IV('Α'), 'A', 0}, // 0391
|
||||
{IV('Β'), 'B', 0}, // 0392
|
||||
{IV('Γ'), 'T', 0}, // 0393, Gamma
|
||||
{IV('Δ'), '4', 0}, // 0394, Delta, ◿
|
||||
{IV('Ε'), 'E', 0}, // 0395
|
||||
{IV('Ζ'), 'Z', 0}, // 0396
|
||||
{IV('Η'), 'H', 0}, // 0397
|
||||
{IV('Θ'), '0', 0}, // 0398, Theta
|
||||
{IV('Ι'), 'I', 0}, // 0399
|
||||
{IV('Κ'), 'K', 0}, // 039A
|
||||
{IV('Λ'), '^', 0}, // 039B, Lambda
|
||||
{IV('Μ'), 'M', 0}, // 039C
|
||||
{IV('Ν'), 'N', 0}, // 039D
|
||||
{IV('Ξ'), '3', 0}, // 039E, Xi
|
||||
{IV('Ο'), 'O', 0}, // 039F
|
||||
{IV('Π'), 'n', 0}, // 03A0, Pi
|
||||
{IV('Ρ'), 'P', 0}, // 03A1
|
||||
{IV('Σ'), 'E', 0}, // 03A3, Sigma
|
||||
{IV('Τ'), 'T', 0}, // 03A4
|
||||
{IV('Υ'), 'Y', 0}, // 03A5, Upsilon
|
||||
{IV('Φ'), 'p', 0}, // 03A6, Phi
|
||||
{IV('Χ'), 'X', 0}, // 03A7
|
||||
{IV('Ψ'), 'P', 0}, // 03A8, Psi
|
||||
{IV('Ω'), 'O', 0}, // 03A9, Omega
|
||||
{IV('Ϊ'), 'I', 0}, // 03AA
|
||||
{IV('Ϋ'), 'Y', 0}, // 03AB
|
||||
{IV('ά'), 'a', 0}, // 03AC
|
||||
{IV('έ'), 'e', 0}, // 03AD
|
||||
{IV('ή'), 'n', 0}, // 03AE
|
||||
{IV('ί'), 'i', 0}, // 03AF
|
||||
{IV('ΰ'), 'v', 0}, // 03B0
|
||||
{IV('α'), 'a', 0}, // 03B1, alpha
|
||||
{IV('β'), 'B', 0}, // 03B2, beta
|
||||
{IV('γ'), 'v', 0}, // 03B3, gamma
|
||||
{IV('δ'), 'd', 0}, // 03B4, delta
|
||||
{IV('ε'), 'e', 0}, // 03B5, epsilon
|
||||
{IV('ζ'), 'Z', 0}, // 03B6, zeta
|
||||
{IV('η'), 'n', 0}, // 03B7, eta
|
||||
{IV('θ'), '0', 0}, // 03B8, theta
|
||||
{IV('ι'), 'i', 0}, // 03B9, lota
|
||||
{IV('κ'), 'k', 0}, // 03BA, kappa
|
||||
{IV('λ'), 'L', 0}, // 03BB, lambda
|
||||
{IV('μ'), 'u', 0}, // 03BC, mu
|
||||
{IV('ν'), 'v', 0}, // 03BD, nu
|
||||
{IV('ξ'), 'e', 0}, // 03BE, xi
|
||||
{IV('ο'), 'o', 0}, // 03BF
|
||||
{IV('π'), 'n', 0}, // 03C0, pi
|
||||
{IV('ρ'), 'p', 0}, // 03C1, rho
|
||||
{IV('ς'), 'c', 0}, // 03C2
|
||||
{IV('σ'), 'o', 0}, // 03C3, sigma
|
||||
{IV('τ'), 't', 0}, // 03C4, tau
|
||||
{IV('υ'), 'v', 0}, // 03C5, upsilon
|
||||
{IV('φ'), 'p', 0}, // 03C6
|
||||
{IV('χ'), 'X', 0}, // 03C7, chi
|
||||
{IV('ψ'), 'W', 0}, // 03C8, psi
|
||||
{IV('ω'), 'w', 0}, // 03C9, omega
|
||||
{IV('ϊ'), 'i', 0}, // 03CA
|
||||
{IV('ϋ'), 'v', 0}, // 03CB
|
||||
{IV('ό'), 'o', 0}, // 03CC
|
||||
{IV('ύ'), 'v', 0}, // 03CD
|
||||
{IV('ώ'), 'w', 0}, // 03CE
|
||||
|
||||
#endif
|
||||
|
||||
#if ENABLED(DISPLAY_CHARSET_ISO10646_5)
|
||||
// Map CYRILLIC code to plain ASCII
|
||||
{IV('Ё'), 'E', 0}, // 0401
|
||||
{IV('А'), 'A', 0}, // 0410
|
||||
{IV('Б'), 'b', 0}, // 0411
|
||||
{IV('В'), 'B', 0}, // 0412
|
||||
{IV('Г'), 'T', 0}, // 0413
|
||||
{IV('Д'), 'Q', 0}, // 0414
|
||||
{IV('Е'), 'E', 0}, // 0415
|
||||
{IV('Ж'), '*', 0}, // 0416
|
||||
{IV('З'), 'E', 0}, // 0417
|
||||
{IV('И'), 'N', 0}, // 0418
|
||||
{IV('Й'), 'N', 0}, // 0419
|
||||
{IV('К'), 'K', 0}, // 041A
|
||||
{IV('Л'), 'T', 0}, // 041B
|
||||
{IV('М'), 'M', 0}, // 041C
|
||||
{IV('Н'), 'H', 0}, // 041D
|
||||
{IV('О'), 'O', 0}, // 041E
|
||||
{IV('П'), 'n', 0}, // 041F
|
||||
{IV('Р'), 'P', 0}, // 0420
|
||||
{IV('С'), 'C', 0}, // 0421
|
||||
{IV('Т'), 'T', 0}, // 0422
|
||||
{IV('У'), 'Y', 0},
|
||||
{IV('Ф'), 'o', 0},
|
||||
{IV('Х'), 'X', 0},
|
||||
{IV('Ц'), 'U', 0},
|
||||
{IV('Ч'), 'y', 0},
|
||||
{IV('Ш'), 'W', 0},
|
||||
{IV('Щ'), 'W', 0},
|
||||
{IV('Ъ'), 'b', 0},
|
||||
{IV('Ы'), 'b', '|'},
|
||||
{IV('Ь'), 'b'},
|
||||
{IV('Э'), 'e'},
|
||||
{IV('Ю'), '|', 'O'},
|
||||
{IV('Я'), '9', '|'}, // 042F
|
||||
|
||||
{IV('а'), 'a', 0}, // 0430
|
||||
{IV('б'), '6', 0}, // 0431
|
||||
{IV('в'), 'B', 0}, // 0432,
|
||||
{IV('г'), 'r', 0}, // 0433
|
||||
{IV('д'), 'a', 0}, // 0434,
|
||||
{IV('е'), 'e', 0}, // 0435
|
||||
{IV('ж'), '*', 0}, // 0436
|
||||
{IV('з'), 'e', 0}, // 0437,
|
||||
{IV('и'), 'u', 0}, // 0438
|
||||
{IV('й'), 'u', 0}, // 0439,
|
||||
{IV('к'), 'k', 0}, // 043A
|
||||
{IV('л'), 'n', 0},
|
||||
{IV('м'), 'm', 0},
|
||||
{IV('н'), 'H', 0},
|
||||
{IV('о'), 'o', 0},
|
||||
{IV('п'), 'n', 0},
|
||||
{IV('р'), 'p', 0},
|
||||
{IV('с'), 'c', 0},
|
||||
{IV('т'), 't', 0},
|
||||
{IV('у'), 'y', 0},
|
||||
{IV('ф'), 'q', 'p'},
|
||||
{IV('х'), 'x', 0},
|
||||
{IV('ц'), 'u', 0},
|
||||
{IV('ч'), 'y', 0},
|
||||
{IV('ш'), 'w', 0},
|
||||
{IV('щ'), 'w', 0},
|
||||
{IV('ъ'), 'b', 0},
|
||||
{IV('ы'), 'b', '|'},
|
||||
{IV('ь'), 'b', 0},
|
||||
{IV('э'), 'e', 0},
|
||||
{IV('ю'), '|', 'o'},
|
||||
{IV('я'), 'g', 0}, // 044F
|
||||
{IV('ё'), 'e', 0}, // 0451
|
||||
#endif
|
||||
|
||||
{IV('•'), '.', 0}, // 2022 ·
|
||||
{IV('℞'), 'P', 'x'}, // 211E ℞ Pt ASCII 158
|
||||
|
||||
@@ -1092,6 +1092,21 @@ void MarlinUI::draw_status_screen() {
|
||||
#if HAS_FAN2
|
||||
|| thermalManager.fan_speed[2]
|
||||
#endif
|
||||
#if HAS_FAN3
|
||||
|| thermalManager.fan_speed[3]
|
||||
#endif
|
||||
#if HAS_FAN4
|
||||
|| thermalManager.fan_speed[4]
|
||||
#endif
|
||||
#if HAS_FAN5
|
||||
|| thermalManager.fan_speed[5]
|
||||
#endif
|
||||
#if HAS_FAN6
|
||||
|| thermalManager.fan_speed[6]
|
||||
#endif
|
||||
#if HAS_FAN7
|
||||
|| thermalManager.fan_speed[7]
|
||||
#endif
|
||||
) leds |= LED_C;
|
||||
#endif // FAN_COUNT > 0
|
||||
|
||||
|
||||
@@ -912,7 +912,7 @@ namespace ExtUI {
|
||||
#endif
|
||||
{
|
||||
#if HOTENDS
|
||||
static constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP);
|
||||
static constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP, HEATER_6_MAXTEMP, HEATER_7_MAXTEMP);
|
||||
const int16_t e = heater - H0;
|
||||
thermalManager.setTargetHotend(LROUND(constrain(value, 0, heater_maxtemp[e] - 15)), e);
|
||||
#endif
|
||||
@@ -924,7 +924,7 @@ namespace ExtUI {
|
||||
value *= TOUCH_UI_LCD_TEMP_SCALING;
|
||||
#endif
|
||||
#if HOTENDS
|
||||
constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP);
|
||||
constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP, HEATER_6_MAXTEMP, HEATER_7_MAXTEMP);
|
||||
const int16_t e = extruder - E0;
|
||||
enableHeater(extruder);
|
||||
thermalManager.setTargetHotend(LROUND(constrain(value, 0, heater_maxtemp[e] - 15)), e);
|
||||
|
||||
@@ -55,7 +55,7 @@ namespace ExtUI {
|
||||
enum axis_t : uint8_t { X, Y, Z };
|
||||
enum extruder_t : uint8_t { E0, E1, E2, E3, E4, E5 };
|
||||
enum heater_t : uint8_t { H0, H1, H2, H3, H4, H5, BED, CHAMBER };
|
||||
enum fan_t : uint8_t { FAN0, FAN1, FAN2, FAN3, FAN4, FAN5 };
|
||||
enum fan_t : uint8_t { FAN0, FAN1, FAN2, FAN3, FAN4, FAN5, FAN6, FAN7 };
|
||||
enum result_t : uint8_t { PID_BAD_EXTRUDER_NUM, PID_TEMP_TOO_HIGH, PID_TUNING_TIMEOUT, PID_DONE };
|
||||
|
||||
constexpr uint8_t extruderCount = EXTRUDERS;
|
||||
|
||||
@@ -93,7 +93,7 @@ namespace Language_an {
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Boquilla ~");
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Base");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Ixoriador");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Ixoriador =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Ixoriador ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Fluxo");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Fluxo ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Control");
|
||||
|
||||
@@ -83,7 +83,7 @@ namespace Language_bg {
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = " " LCD_STR_THERMOMETER _UxGT(" Дюза ~");
|
||||
PROGMEM Language_Str MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" Легло");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Вентилатор");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Вентилатор =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Вентилатор ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Поток");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Поток ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Управление");
|
||||
|
||||
@@ -94,7 +94,7 @@ namespace Language_ca {
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Nozzle ~");
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Llit");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vel. Ventilador");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vel. Ventilador =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vel. Ventilador ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Flux");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Flux ~");
|
||||
PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("VViatge min");
|
||||
|
||||
@@ -251,10 +251,10 @@ namespace Language_cz {
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Podložka");
|
||||
PROGMEM Language_Str MSG_CHAMBER = _UxGT("Komora");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Rychlost vent.");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Rychlost vent. =");
|
||||
PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Ulož. vent. =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Rychlost vent. ~");
|
||||
PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Ulož. vent. ~");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Rychlost ex. vent.");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Rychlost ex. vent. =");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Rychlost ex. vent. ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Průtok");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Průtok ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Ovládaní");
|
||||
@@ -266,14 +266,6 @@ namespace Language_cz {
|
||||
PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Vyp");
|
||||
PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("PID automatika");
|
||||
PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("PID automatika *");
|
||||
PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
|
||||
PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID-P *");
|
||||
PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
|
||||
PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID-I *");
|
||||
PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
|
||||
PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
|
||||
PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
|
||||
PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
|
||||
PROGMEM Language_Str MSG_SELECT = _UxGT("Vybrat");
|
||||
PROGMEM Language_Str MSG_SELECT_E = _UxGT("Vybrat *");
|
||||
PROGMEM Language_Str MSG_ACC = _UxGT("Zrychl");
|
||||
|
||||
@@ -84,7 +84,7 @@ namespace Language_da {
|
||||
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Plade");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Blæser hastighed");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Blæser hastighed =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Blæser hastighed ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Kontrol");
|
||||
PROGMEM Language_Str MSG_MIN = _UxGT(" \002 Min");
|
||||
PROGMEM Language_Str MSG_MAX = _UxGT(" \002 Max");
|
||||
|
||||
@@ -245,14 +245,6 @@ namespace Language_de {
|
||||
PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Auto Temperatur");
|
||||
PROGMEM Language_Str MSG_LCD_ON = _UxGT("an");
|
||||
PROGMEM Language_Str MSG_LCD_OFF = _UxGT("aus");
|
||||
PROGMEM Language_Str MSG_PID_P = _UxGT("PID P");
|
||||
PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID P *");
|
||||
PROGMEM Language_Str MSG_PID_I = _UxGT("PID I");
|
||||
PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID I *");
|
||||
PROGMEM Language_Str MSG_PID_D = _UxGT("PID D");
|
||||
PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID D *");
|
||||
PROGMEM Language_Str MSG_PID_C = _UxGT("PID C");
|
||||
PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID C *");
|
||||
PROGMEM Language_Str MSG_SELECT = _UxGT("Auswählen");
|
||||
PROGMEM Language_Str MSG_SELECT_E = _UxGT("Auswählen *");
|
||||
PROGMEM Language_Str MSG_ACC = _UxGT("Beschleunigung");
|
||||
|
||||
@@ -91,7 +91,7 @@ namespace Language_el {
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Ακροφύσιο ~");
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Κλίνη");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Ταχύτητα ανεμιστήρα");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Ταχύτητα ανεμιστήρα =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Ταχύτητα ανεμιστήρα ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Ροή");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Ροή ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Έλεγχος");
|
||||
|
||||
@@ -92,7 +92,7 @@ namespace Language_el_gr {
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Ακροφύσιο ~");
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Κλίνη");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Ταχύτητα ανεμιστήρα");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Ταχύτητα ανεμιστήρα =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Ταχύτητα ανεμιστήρα ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Ροή");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Ροή ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Έλεγχος");
|
||||
@@ -102,14 +102,6 @@ namespace Language_el_gr {
|
||||
PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Αυτομ. ρύθμιση θερμοκρασίας");
|
||||
PROGMEM Language_Str MSG_LCD_ON = _UxGT("Ενεργοποιημένο");
|
||||
PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Απενεργοποιημένο");
|
||||
PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
|
||||
PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID-P *");
|
||||
PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
|
||||
PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID-I *");
|
||||
PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
|
||||
PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
|
||||
PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
|
||||
PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
|
||||
PROGMEM Language_Str MSG_ACC = _UxGT("Επιτάχυνση");
|
||||
PROGMEM Language_Str MSG_JERK = _UxGT("Vαντίδραση");
|
||||
PROGMEM Language_Str MSG_VA_JERK = _UxGT("Vαντίδραση ") LCD_STR_A;
|
||||
@@ -120,7 +112,7 @@ namespace Language_el_gr {
|
||||
PROGMEM Language_Str MSG_VMAX_B = _UxGT("Vμεγ ") LCD_STR_B;
|
||||
PROGMEM Language_Str MSG_VMAX_C = _UxGT("Vμεγ ") LCD_STR_C;
|
||||
PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vμεγ ") LCD_STR_E;
|
||||
PROGMEM Language_Str MSG_VMAX_E = _UxGT("Vμεγ *");
|
||||
PROGMEM Language_Str MSG_VMAX_EN = _UxGT("Vμεγ *");
|
||||
PROGMEM Language_Str MSG_VMIN = _UxGT("Vελαχ");
|
||||
PROGMEM Language_Str MSG_VTRAV_MIN = _UxGT("Vελάχ. μετατόπιση");
|
||||
PROGMEM Language_Str MSG_ACCELERATION = _UxGT("Accel");
|
||||
|
||||
@@ -242,10 +242,10 @@ namespace Language_en {
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Bed");
|
||||
PROGMEM Language_Str MSG_CHAMBER = _UxGT("Enclosure");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Fan Speed");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Fan Speed =");
|
||||
PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Stored Fan =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Fan Speed ~");
|
||||
PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Stored Fan ~");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Extra Fan Speed");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra Fan Speed =");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra Fan Speed ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Flow");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Flow ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Control");
|
||||
@@ -265,6 +265,8 @@ namespace Language_en {
|
||||
PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
|
||||
PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
|
||||
PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
|
||||
PROGMEM Language_Str MSG_PID_F = _UxGT("PID-F");
|
||||
PROGMEM Language_Str MSG_PID_F_E = _UxGT("PID-F *");
|
||||
PROGMEM Language_Str MSG_SELECT = _UxGT("Select");
|
||||
PROGMEM Language_Str MSG_SELECT_E = _UxGT("Select *");
|
||||
PROGMEM Language_Str MSG_ACC = _UxGT("Accel");
|
||||
|
||||
@@ -240,9 +240,9 @@ namespace Language_es {
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Cama");
|
||||
PROGMEM Language_Str MSG_CHAMBER = _UxGT("Recinto");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Ventilador");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Ventilador =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Ventilador ~");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Vel. Ext. ventilador");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Vel. Ext. ventilador =");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Vel. Ext. ventilador ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Flujo");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Flujo ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Control");
|
||||
@@ -345,8 +345,8 @@ namespace Language_es {
|
||||
PROGMEM Language_Str MSG_BLTOUCH = _UxGT("BLTouch");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_SELFTEST = _UxGT("Cmd: Auto-Prueba");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_RESET = _UxGT("Cmd: Reiniciar");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Cmd: Bajar pistón");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Cmd: Subir pistón");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_STOW = _UxGT("Cmd: Subir pistón");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_DEPLOY = _UxGT("Cmd: Bajar pistón");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_SW_MODE = _UxGT("Cmd: Modo Software");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_5V_MODE = _UxGT("Cmd: Modo 5V");
|
||||
PROGMEM Language_Str MSG_BLTOUCH_OD_MODE = _UxGT("Cmd: Modo OD");
|
||||
|
||||
@@ -147,9 +147,9 @@ namespace Language_eu {
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Pita ~");
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Ohea");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Haizagailu abiadura");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Haizagailu abiadura =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Haizagailu abiadura ~");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Haiz.gehig. abiadura");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Haiz.gehig. abiadura =");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Haiz.gehig. abiadura ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Fluxua");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Fluxua ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Kontrola");
|
||||
|
||||
@@ -79,7 +79,7 @@ namespace Language_fi {
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Suutin ~");
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Alusta");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Tuul. nopeus");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Tuul. nopeus =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Tuul. nopeus ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Virtaus");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Virtaus ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Kontrolli");
|
||||
|
||||
@@ -235,10 +235,10 @@ namespace Language_fr {
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Lit");
|
||||
PROGMEM Language_Str MSG_CHAMBER = _UxGT("Caisson");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vit. ventil. "); // 15 car. max
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vit. ventil. =");
|
||||
PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Vit. enreg. =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vit. ventil. ~");
|
||||
PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Vit. enreg. ~");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Extra ventil. ");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra ventil. =");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra ventil. ~");
|
||||
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Flux");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Flux ~");
|
||||
|
||||
@@ -240,10 +240,10 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Piatto");
|
||||
PROGMEM Language_Str MSG_CHAMBER = _UxGT("Camera");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vel. ventola"); // Max 15 characters
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vel. ventola ="); // Max 15 characters
|
||||
PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Ventola mem. ="); // Max 15 characters
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vel. ventola ~"); // Max 15 characters
|
||||
PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Ventola mem. ~"); // Max 15 characters
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Extra vel.vent."); // Max 15 characters
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra v.vent. ="); // Max 15 characters
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Extra v.vent. ~"); // Max 15 characters
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Flusso");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Flusso ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Controllo");
|
||||
@@ -255,14 +255,6 @@ namespace Language_it {
|
||||
PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Off");
|
||||
PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("PID Autotune");
|
||||
PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("PID Autotune *");
|
||||
PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
|
||||
PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID-P *");
|
||||
PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
|
||||
PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID-I *");
|
||||
PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
|
||||
PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
|
||||
PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
|
||||
PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
|
||||
PROGMEM Language_Str MSG_SELECT = _UxGT("Seleziona");
|
||||
PROGMEM Language_Str MSG_SELECT_E = _UxGT("Seleziona *");
|
||||
PROGMEM Language_Str MSG_ACC = _UxGT("Accel");
|
||||
|
||||
@@ -110,14 +110,6 @@ namespace Language_jp_kana {
|
||||
PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("ジドウオンドセイギョ"); // "Autotemp"
|
||||
PROGMEM Language_Str MSG_LCD_ON = _UxGT("オン"); // "On"
|
||||
PROGMEM Language_Str MSG_LCD_OFF = _UxGT("オフ"); // "Off"
|
||||
PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
|
||||
PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID-P *");
|
||||
PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
|
||||
PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID-I *");
|
||||
PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
|
||||
PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
|
||||
PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
|
||||
PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
|
||||
PROGMEM Language_Str MSG_SELECT = _UxGT("センタク"); // "Select"
|
||||
PROGMEM Language_Str MSG_SELECT_E = _UxGT("センタク *");
|
||||
PROGMEM Language_Str MSG_ACC = _UxGT("カソクド mm/s²"); // "Accel"
|
||||
|
||||
@@ -77,9 +77,9 @@ namespace Language_ko_KR {
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("노즐 ~");
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("베드");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("펜 속도");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("펜 속도 =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("펜 속도 ~");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("엑스트라 펜 속도");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("엑스트라 펜 속도 =");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("엑스트라 펜 속도 ~");
|
||||
PROGMEM Language_Str MSG_TEMPERATURE = _UxGT("온도");
|
||||
PROGMEM Language_Str MSG_MOTION = _UxGT("동작");
|
||||
PROGMEM Language_Str MSG_STORE_EEPROM = _UxGT("설정 저장하기");
|
||||
|
||||
@@ -99,7 +99,7 @@ namespace Language_nl {
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Nozzle ~");
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Bed");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Fan snelheid");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Fan snelheid =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Fan snelheid ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Flow");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Flow ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Control");
|
||||
|
||||
@@ -240,9 +240,9 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Stół");
|
||||
PROGMEM Language_Str MSG_CHAMBER = _UxGT("Obudowa");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Obroty wiatraka");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Obroty wiatraka =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Obroty wiatraka ~");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Obroty dodatkowego wiatraka");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Obroty dodatkowego wiatraka =");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Obroty dodatkowego wiatraka ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Przepływ");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Przepływ ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Ustawienia");
|
||||
@@ -254,14 +254,6 @@ namespace Language_pl {
|
||||
PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Wył.");
|
||||
PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("PID Autostrojenie");
|
||||
PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("PID Autostrojenie *");
|
||||
PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
|
||||
PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID-P *");
|
||||
PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
|
||||
PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID-I *");
|
||||
PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
|
||||
PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
|
||||
PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
|
||||
PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
|
||||
PROGMEM Language_Str MSG_SELECT = _UxGT("Wybierz");
|
||||
PROGMEM Language_Str MSG_SELECT_E = _UxGT("Wybierz *");
|
||||
PROGMEM Language_Str MSG_ACC = _UxGT("Przyspieszenie");
|
||||
|
||||
@@ -89,7 +89,7 @@ namespace Language_pt {
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = " " LCD_STR_THERMOMETER _UxGT(" Bico ~");
|
||||
PROGMEM Language_Str MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" Base");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vel. ventoinha");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vel. ventoinha =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vel. ventoinha ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Fluxo");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Fluxo ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Controlo");
|
||||
|
||||
@@ -207,9 +207,9 @@ namespace Language_pt_br {
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Bocal ~");
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Mesa");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Vel. Ventoinha");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vel. Ventoinha =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Vel. Ventoinha ~");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("+Vel. Ventoinha");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("+Vel. Ventoinha =");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("+Vel. Ventoinha ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Vazão");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Vazão ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Controle");
|
||||
|
||||
@@ -222,14 +222,6 @@ namespace Language_ru {
|
||||
PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Автотемпература");
|
||||
PROGMEM Language_Str MSG_LCD_ON = _UxGT("Вкл.");
|
||||
PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Выкл.");
|
||||
PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
|
||||
PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID-P *");
|
||||
PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
|
||||
PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID-I *");
|
||||
PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
|
||||
PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
|
||||
PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
|
||||
PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
|
||||
PROGMEM Language_Str MSG_SELECT = _UxGT("Выбор");
|
||||
PROGMEM Language_Str MSG_SELECT_E = _UxGT("Выбор *");
|
||||
PROGMEM Language_Str MSG_ACC = _UxGT("Ускорение");
|
||||
|
||||
@@ -243,9 +243,10 @@ namespace Language_sk {
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Podložka");
|
||||
PROGMEM Language_Str MSG_CHAMBER = _UxGT("Komora");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Rýchlosť vent.");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Rýchlosť vent. =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Rýchlosť vent. ~");
|
||||
PROGMEM Language_Str MSG_STORED_FAN_N = _UxGT("Ulož. vent. ~");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Rýchlosť ex. vent.");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Rýchlosť ex. vent. =");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Rýchlosť ex. vent. ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Prietok");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Prietok ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Ovládanie");
|
||||
@@ -257,14 +258,6 @@ namespace Language_sk {
|
||||
PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Vyp");
|
||||
PROGMEM Language_Str MSG_PID_AUTOTUNE = _UxGT("PID kalibrácia");
|
||||
PROGMEM Language_Str MSG_PID_AUTOTUNE_E = _UxGT("PID kalibrácia *");
|
||||
PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
|
||||
PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID-P *");
|
||||
PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
|
||||
PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID-I *");
|
||||
PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
|
||||
PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
|
||||
PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
|
||||
PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
|
||||
PROGMEM Language_Str MSG_SELECT = _UxGT("Vybrať");
|
||||
PROGMEM Language_Str MSG_SELECT_E = _UxGT("Vybrať *");
|
||||
PROGMEM Language_Str MSG_ACC = _UxGT("Zrýchlenie");
|
||||
@@ -387,13 +380,16 @@ namespace Language_sk {
|
||||
PROGMEM Language_Str MSG_BLTOUCH_MODE_CHANGE = _UxGT("POZOR: Zlé nastav. môže spôsobiť poškoden. Pokračovať?");
|
||||
PROGMEM Language_Str MSG_TOUCHMI_PROBE = _UxGT("TouchMI");
|
||||
PROGMEM Language_Str MSG_TOUCHMI_INIT = _UxGT("Inicializ. TouchMI");
|
||||
PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Test ofsetu Z");
|
||||
PROGMEM Language_Str MSG_TOUCHMI_ZTEST = _UxGT("Test Z ofsetu");
|
||||
PROGMEM Language_Str MSG_TOUCHMI_SAVE = _UxGT("Uložiť");
|
||||
PROGMEM Language_Str MSG_MANUAL_DEPLOY_TOUCHMI = _UxGT("Zasunúť TouchMI");
|
||||
PROGMEM Language_Str MSG_MANUAL_DEPLOY = _UxGT("Zasunúť sondu Z");
|
||||
PROGMEM Language_Str MSG_MANUAL_STOW = _UxGT("Vysunúť sondu Z");
|
||||
PROGMEM Language_Str MSG_HOME_FIRST = _UxGT("Najskôr os %s%s%s domov");
|
||||
PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Ofset sondy Z");
|
||||
PROGMEM Language_Str MSG_ZPROBE_OFFSETS = _UxGT("Ofsety sondy Z");
|
||||
PROGMEM Language_Str MSG_ZPROBE_XOFFSET = _UxGT("X ofset");
|
||||
PROGMEM Language_Str MSG_ZPROBE_YOFFSET = _UxGT("Y ofset");
|
||||
PROGMEM Language_Str MSG_ZPROBE_ZOFFSET = _UxGT("Z ofset");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_X = _UxGT("Babystep X");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_Y = _UxGT("Babystep Y");
|
||||
PROGMEM Language_Str MSG_BABYSTEP_Z = _UxGT("Babystep Z");
|
||||
|
||||
@@ -210,9 +210,9 @@ namespace Language_tr {
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Nozul ~");
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Tabla");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Fan Hızı");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Fan Hızı =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Fan Hızı ~");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Ekstra Fan Hızı");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Ekstra Fan Hızı =");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Ekstra Fan Hızı ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Akış");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Akış ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Kontrol");
|
||||
|
||||
@@ -92,7 +92,7 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Сопло ~");
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Стіл");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Охолодж.");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Охолодж. =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Охолодж. ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Потік");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Потік ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Налаштування");
|
||||
@@ -102,14 +102,6 @@ namespace Language_uk {
|
||||
PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Автотемпер.");
|
||||
PROGMEM Language_Str MSG_LCD_ON = _UxGT("Увімк.");
|
||||
PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Вимк.");
|
||||
PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
|
||||
PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID-P *");
|
||||
PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
|
||||
PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID-I *");
|
||||
PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
|
||||
PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
|
||||
PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
|
||||
PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
|
||||
PROGMEM Language_Str MSG_SELECT = _UxGT("Вибрати");
|
||||
PROGMEM Language_Str MSG_SELECT_E = _UxGT("Вибрати *");
|
||||
PROGMEM Language_Str MSG_ACC = _UxGT("Приск.");
|
||||
|
||||
@@ -210,9 +210,9 @@ namespace Language_vi {
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = _UxGT("Đầu phun ~"); // Nozzle
|
||||
PROGMEM Language_Str MSG_BED = _UxGT("Bàn"); // bed
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("Tốc độ quạt"); // fan speed
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Tốc độ quạt ="); // fan speed
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("Tốc độ quạt ~"); // fan speed
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("Tốc độ quạt phụ"); // Extra fan speed
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Tốc độ quạt phụ ="); // Extra fan speed
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("Tốc độ quạt phụ ~"); // Extra fan speed
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("Lưu Lượng");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("Lưu Lượng ~");
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("Điều khiển"); // Control
|
||||
@@ -222,14 +222,6 @@ namespace Language_vi {
|
||||
PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("Nhiệt độ tự động"); // Autotemp
|
||||
PROGMEM Language_Str MSG_LCD_ON = _UxGT("Bật"); // on
|
||||
PROGMEM Language_Str MSG_LCD_OFF = _UxGT("Tắt"); // off
|
||||
PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P");
|
||||
PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID-P *");
|
||||
PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I");
|
||||
PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID-I *");
|
||||
PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D");
|
||||
PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
|
||||
PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C");
|
||||
PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
|
||||
PROGMEM Language_Str MSG_SELECT = _UxGT("Lựa"); // Select
|
||||
PROGMEM Language_Str MSG_SELECT_E = _UxGT("Lựa *");
|
||||
PROGMEM Language_Str MSG_ACC = _UxGT("Tăng Tốc");
|
||||
|
||||
@@ -187,9 +187,9 @@ namespace Language_zh_CN {
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = " " LCD_STR_THERMOMETER _UxGT(" 喷嘴 ~"); //"Nozzle" 噴嘴
|
||||
PROGMEM Language_Str MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" 热床"); //"Bed"
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("风扇速率"); //"Fan speed"
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("风扇速率 ="); //"Fan speed"
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("风扇速率 ~"); //"Fan speed"
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("额外风扇速率"); // "Extra fan speed"
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("额外风扇速率 ="); // "Extra fan speed"
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("额外风扇速率 ~"); // "Extra fan speed"
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("挤出速率"); //"Flow"
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("挤出速率 ~"); //"Flow"
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("控制"); //"Control"
|
||||
@@ -199,14 +199,6 @@ namespace Language_zh_CN {
|
||||
PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("自动控温"); //"Autotemp"
|
||||
PROGMEM Language_Str MSG_LCD_ON = _UxGT("开"); //"On"
|
||||
PROGMEM Language_Str MSG_LCD_OFF = _UxGT("关"); //"Off"
|
||||
PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P"); //"PID-P"
|
||||
PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID-P *");
|
||||
PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I"); //"PID-I"
|
||||
PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID-I *");
|
||||
PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D"); //"PID-D"
|
||||
PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
|
||||
PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C"); //"PID-C"
|
||||
PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
|
||||
PROGMEM Language_Str MSG_SELECT = _UxGT("选择"); //"Select"
|
||||
PROGMEM Language_Str MSG_SELECT_E = _UxGT("选择 *");
|
||||
PROGMEM Language_Str MSG_ACC = _UxGT("加速度"); //"Accel" acceleration
|
||||
|
||||
@@ -187,9 +187,9 @@ namespace Language_zh_TW {
|
||||
PROGMEM Language_Str MSG_NOZZLE_N = " " LCD_STR_THERMOMETER _UxGT(" 噴嘴 ~");
|
||||
PROGMEM Language_Str MSG_BED = " " LCD_STR_THERMOMETER _UxGT(" 熱床"); //"Bed"
|
||||
PROGMEM Language_Str MSG_FAN_SPEED = _UxGT("風扇速率"); //"Fan speed"
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("風扇速率 =");
|
||||
PROGMEM Language_Str MSG_FAN_SPEED_N = _UxGT("風扇速率 ~");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED = _UxGT("額外風扇速率"); // "Extra fan speed"
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("額外風扇速率 =");
|
||||
PROGMEM Language_Str MSG_EXTRA_FAN_SPEED_N = _UxGT("額外風扇速率 ~");
|
||||
PROGMEM Language_Str MSG_FLOW = _UxGT("擠出速率");
|
||||
PROGMEM Language_Str MSG_FLOW_N = _UxGT("擠出速率 ~"); //"Flow"
|
||||
PROGMEM Language_Str MSG_CONTROL = _UxGT("控制"); //"Control"
|
||||
@@ -199,14 +199,6 @@ namespace Language_zh_TW {
|
||||
PROGMEM Language_Str MSG_AUTOTEMP = _UxGT("自動控溫"); //"Autotemp"
|
||||
PROGMEM Language_Str MSG_LCD_ON = _UxGT("開"); //"On"
|
||||
PROGMEM Language_Str MSG_LCD_OFF = _UxGT("關"); //"Off"
|
||||
PROGMEM Language_Str MSG_PID_P = _UxGT("PID-P"); //"PID-P"
|
||||
PROGMEM Language_Str MSG_PID_P_E = _UxGT("PID-P *");
|
||||
PROGMEM Language_Str MSG_PID_I = _UxGT("PID-I"); //"PID-I"
|
||||
PROGMEM Language_Str MSG_PID_I_E = _UxGT("PID-I *");
|
||||
PROGMEM Language_Str MSG_PID_D = _UxGT("PID-D"); //"PID-D"
|
||||
PROGMEM Language_Str MSG_PID_D_E = _UxGT("PID-D *");
|
||||
PROGMEM Language_Str MSG_PID_C = _UxGT("PID-C"); //"PID-C"
|
||||
PROGMEM Language_Str MSG_PID_C_E = _UxGT("PID-C *");
|
||||
PROGMEM Language_Str MSG_SELECT = _UxGT("選擇"); //"Select"
|
||||
PROGMEM Language_Str MSG_SELECT_E = _UxGT("選擇 *");
|
||||
PROGMEM Language_Str MSG_ACC = _UxGT("加速度"); //"Accel" acceleration
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
extern int8_t encoderLine, encoderTopLine, screen_items;
|
||||
|
||||
#if HOTENDS
|
||||
constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP);
|
||||
constexpr int16_t heater_maxtemp[HOTENDS] = ARRAY_BY_HOTENDS(HEATER_0_MAXTEMP, HEATER_1_MAXTEMP, HEATER_2_MAXTEMP, HEATER_3_MAXTEMP, HEATER_4_MAXTEMP, HEATER_5_MAXTEMP, HEATER_6_MAXTEMP, HEATER_7_MAXTEMP);
|
||||
#endif
|
||||
|
||||
void scroll_screen(const uint8_t limit, const bool is_menu);
|
||||
|
||||
@@ -245,6 +245,12 @@ void menu_cancelobject();
|
||||
DEFINE_PIDTEMP_FUNCS(4);
|
||||
#if HOTENDS > 5
|
||||
DEFINE_PIDTEMP_FUNCS(5);
|
||||
#if HOTENDS > 6
|
||||
DEFINE_PIDTEMP_FUNCS(6);
|
||||
#if HOTENDS > 7
|
||||
DEFINE_PIDTEMP_FUNCS(7);
|
||||
#endif // HOTENDS > 7
|
||||
#endif // HOTENDS > 6
|
||||
#endif // HOTENDS > 5
|
||||
#endif // HOTENDS > 4
|
||||
#endif // HOTENDS > 3
|
||||
@@ -330,6 +336,12 @@ void menu_cancelobject();
|
||||
PID_EDIT_MENU_ITEMS(4);
|
||||
#if HOTENDS > 5
|
||||
PID_EDIT_MENU_ITEMS(5);
|
||||
#if HOTENDS > 6
|
||||
PID_EDIT_MENU_ITEMS(6);
|
||||
#if HOTENDS > 7
|
||||
PID_EDIT_MENU_ITEMS(7);
|
||||
#endif // HOTENDS > 7
|
||||
#endif // HOTENDS > 6
|
||||
#endif // HOTENDS > 5
|
||||
#endif // HOTENDS > 4
|
||||
#endif // HOTENDS > 3
|
||||
@@ -480,27 +492,6 @@ void menu_cancelobject();
|
||||
END_MENU();
|
||||
}
|
||||
|
||||
// M92 Steps-per-mm
|
||||
void menu_advanced_steps_per_mm() {
|
||||
START_MENU();
|
||||
BACK_ITEM(MSG_ADVANCED_SETTINGS);
|
||||
|
||||
#define EDIT_QSTEPS(Q) EDIT_ITEM_FAST(float51, MSG_##Q##_STEPS, &planner.settings.axis_steps_per_mm[_AXIS(Q)], 5, 9999, []{ planner.refresh_positioning(); })
|
||||
EDIT_QSTEPS(A);
|
||||
EDIT_QSTEPS(B);
|
||||
EDIT_QSTEPS(C);
|
||||
|
||||
#if ENABLED(DISTINCT_E_FACTORS)
|
||||
EDIT_ITEM_FAST(float51, MSG_E_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(active_extruder)], 5, 9999, []{ planner.refresh_positioning(); });
|
||||
for (uint8_t n = 0; n < E_STEPPERS; n++)
|
||||
EDIT_ITEM_FAST_N(float51, n, MSG_EN_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(n)], 5, 9999, []{ _planner_refresh_e_positioning(MenuItemBase::itemIndex); });
|
||||
#elif E_STEPPERS
|
||||
EDIT_ITEM_FAST(float51, MSG_E_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, []{ planner.refresh_positioning(); });
|
||||
#endif
|
||||
|
||||
END_MENU();
|
||||
}
|
||||
|
||||
// M851 - Z Probe Offsets
|
||||
#if HAS_BED_PROBE
|
||||
void menu_probe_offsets() {
|
||||
@@ -515,6 +506,27 @@ void menu_cancelobject();
|
||||
|
||||
#endif // !SLIM_LCD_MENUS
|
||||
|
||||
// M92 Steps-per-mm
|
||||
void menu_advanced_steps_per_mm() {
|
||||
START_MENU();
|
||||
BACK_ITEM(MSG_ADVANCED_SETTINGS);
|
||||
|
||||
#define EDIT_QSTEPS(Q) EDIT_ITEM_FAST(float51, MSG_##Q##_STEPS, &planner.settings.axis_steps_per_mm[_AXIS(Q)], 5, 9999, []{ planner.refresh_positioning(); })
|
||||
EDIT_QSTEPS(A);
|
||||
EDIT_QSTEPS(B);
|
||||
EDIT_QSTEPS(C);
|
||||
|
||||
#if ENABLED(DISTINCT_E_FACTORS)
|
||||
EDIT_ITEM_FAST(float51, MSG_E_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(active_extruder)], 5, 9999, []{ planner.refresh_positioning(); });
|
||||
for (uint8_t n = 0; n < E_STEPPERS; n++)
|
||||
EDIT_ITEM_FAST_N(float51, n, MSG_EN_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS_N(n)], 5, 9999, []{ _planner_refresh_e_positioning(MenuItemBase::itemIndex); });
|
||||
#elif E_STEPPERS
|
||||
EDIT_ITEM_FAST(float51, MSG_E_STEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, []{ planner.refresh_positioning(); });
|
||||
#endif
|
||||
|
||||
END_MENU();
|
||||
}
|
||||
|
||||
void menu_advanced_settings() {
|
||||
#if ENABLED(FILAMENT_RUNOUT_SENSOR) && FILAMENT_RUNOUT_DISTANCE_MM
|
||||
lcd_runout_distance_mm = runout.runout_distance();
|
||||
@@ -540,17 +552,17 @@ void menu_advanced_settings() {
|
||||
// M205 - Max Jerk
|
||||
SUBMENU(MSG_JERK, menu_advanced_jerk);
|
||||
|
||||
if (!printer_busy()) {
|
||||
// M92 - Steps Per mm
|
||||
SUBMENU(MSG_STEPS_PER_MM, menu_advanced_steps_per_mm);
|
||||
|
||||
#if HAS_BED_PROBE
|
||||
// M851 - Z Probe Offsets
|
||||
// M851 - Z Probe Offsets
|
||||
#if HAS_BED_PROBE
|
||||
if (!printer_busy())
|
||||
SUBMENU(MSG_ZPROBE_OFFSETS, menu_probe_offsets);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
#endif // !SLIM_LCD_MENUS
|
||||
|
||||
// M92 - Steps Per mm
|
||||
if (!printer_busy())
|
||||
SUBMENU(MSG_STEPS_PER_MM, menu_advanced_steps_per_mm);
|
||||
|
||||
#if ENABLED(BACKLASH_GCODE)
|
||||
SUBMENU(MSG_BACKLASH, menu_backlash);
|
||||
#endif
|
||||
|
||||
@@ -56,8 +56,6 @@
|
||||
#endif
|
||||
);
|
||||
|
||||
bool MarlinUI::wait_for_bl_move; // = false
|
||||
|
||||
//
|
||||
// Bed leveling is done. Wait for G29 to complete.
|
||||
// A flag is used so that this can release control
|
||||
@@ -70,7 +68,7 @@
|
||||
// ** This blocks the command queue! **
|
||||
//
|
||||
void _lcd_level_bed_done() {
|
||||
if (!ui.wait_for_bl_move) {
|
||||
if (!ui.wait_for_move) {
|
||||
#if MANUAL_PROBE_HEIGHT > 0 && DISABLED(MESH_BED_LEVELING)
|
||||
// Display "Done" screen and wait for moves to complete
|
||||
line_to_z(MANUAL_PROBE_HEIGHT);
|
||||
@@ -103,7 +101,7 @@
|
||||
//
|
||||
// The last G29 records the point and enables bed leveling
|
||||
//
|
||||
ui.wait_for_bl_move = true;
|
||||
ui.wait_for_move = true;
|
||||
ui.goto_screen(_lcd_level_bed_done);
|
||||
#if ENABLED(MESH_BED_LEVELING)
|
||||
queue.inject_P(PSTR("G29 S2"));
|
||||
@@ -146,7 +144,7 @@
|
||||
MenuEditItemBase::draw_edit_screen(GET_TEXT(MSG_LEVEL_BED_NEXT_POINT), msg);
|
||||
}
|
||||
ui.refresh(LCDVIEW_CALL_NO_REDRAW);
|
||||
if (!ui.wait_for_bl_move) ui.goto_screen(_lcd_level_bed_get_z);
|
||||
if (!ui.wait_for_move) ui.goto_screen(_lcd_level_bed_get_z);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -156,7 +154,7 @@
|
||||
ui.goto_screen(_lcd_level_bed_moving);
|
||||
|
||||
// G29 Records Z, moves, and signals when it pauses
|
||||
ui.wait_for_bl_move = true;
|
||||
ui.wait_for_move = true;
|
||||
#if ENABLED(MESH_BED_LEVELING)
|
||||
queue.inject_P(manual_probe_index ? PSTR("G29 S2") : PSTR("G29 S1"));
|
||||
#elif ENABLED(PROBE_MANUALLY)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user