From 04d64351a24d3278ef8079c74cc24a55e32a1de2 Mon Sep 17 00:00:00 2001
From: MaukCC <jos@mauk.cc>
Date: Tue, 21 Jan 2020 08:10:31 +0100
Subject: [PATCH] Add HMS434 V15 ATSAM board (#16620)

---
 Marlin/Configuration.h                        |  3 +-
 Marlin/src/core/boards.h                      |  1 +
 Marlin/src/module/thermistor/thermistor_332.h | 50 ++++++++++
 Marlin/src/module/thermistor/thermistors.h    |  5 +-
 Marlin/src/pins/pins.h                        |  2 +
 Marlin/src/pins/sam/pins_CNCONTROLS_15D.h     | 97 +++++++++++++++++++
 6 files changed, 156 insertions(+), 2 deletions(-)
 create mode 100644 Marlin/src/module/thermistor/thermistor_332.h
 create mode 100644 Marlin/src/pins/sam/pins_CNCONTROLS_15D.h

diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index d23a31c0d..65381fcce 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -360,7 +360,8 @@
  *    -1 : thermocouple with AD595
  *     0 : not used
  *     1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
- *   331 : (3.3V scaled thermistor 1 table)
+ *   331 : (3.3V scaled thermistor 1 table for MEGA)
+ *   332 : (3.3V scaled thermistor 1 table for DUE)
  *     2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
  *     3 : Mendel-parts thermistor (4.7k pullup)
  *     4 : 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
diff --git a/Marlin/src/core/boards.h b/Marlin/src/core/boards.h
index bd7c98081..7a3b413e9 100644
--- a/Marlin/src/core/boards.h
+++ b/Marlin/src/core/boards.h
@@ -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
diff --git a/Marlin/src/module/thermistor/thermistor_332.h b/Marlin/src/module/thermistor/thermistor_332.h
new file mode 100644
index 000000000..85ca169a1
--- /dev/null
+++ b/Marlin/src/module/thermistor/thermistor_332.h
@@ -0,0 +1,50 @@
+/**
+ * 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
+
+#define OVM(V) OV((V)*(0.327/0.327))
+
+// R25 = 100 kOhm, beta25 = 4092 K, 4.7 kOhm pull-up, bed thermistor
+const short temptable_332[][2] PROGMEM = {
+  { OVM( 268), 150 },
+  { OVM( 293), 145 },
+  { OVM( 320), 141 },
+  { OVM( 379), 133 },
+  { OVM( 445), 122 },
+  { OVM( 516), 108 },
+  { OVM( 591),  98 },
+  { OVM( 665),  88 },
+  { OVM( 737),  79 },
+  { OVM( 801),  70 },
+  { OVM( 857),  55 },
+  { OVM( 903),  46 },
+  { OVM( 939),  39 },
+  { OVM( 954),  33 },
+  { OVM( 966),  27 },
+  { OVM( 977),  22 },
+  { OVM( 999),  15 },
+  { OVM(1004),   5 },
+  { OVM(1008),   0 },
+  { OVM(1012),  -5 },
+  { OVM(1016), -10 },
+  { OVM(1020), -15 }
+};
diff --git a/Marlin/src/module/thermistor/thermistors.h b/Marlin/src/module/thermistor/thermistors.h
index 55336c8da..1e7b76d15 100644
--- a/Marlin/src/module/thermistor/thermistors.h
+++ b/Marlin/src/module/thermistor/thermistors.h
@@ -147,9 +147,12 @@
 #if ANY_THERMISTOR_IS(201) // Pt100 with LMV324 Overlord
   #include "thermistor_201.h"
 #endif
-#if ANY_THERMISTOR_IS(331) // Like table 1, but with 3V3 as input voltage
+#if ANY_THERMISTOR_IS(331) // Like table 1, but with 3V3 as input voltage for MEGA
   #include "thermistor_331.h"
 #endif
+#if ANY_THERMISTOR_IS(332) // Like table 1, but with 3V3 as input voltage for DUE
+  #include "thermistor_332.h"
+#endif
 #if ANY_THERMISTOR_IS(666) // beta25 = UNK, R25 = 200K, Pull-up = 10 kOhm, "Unidentified 200K NTC thermistor (Einstart S)"
   #include "thermistor_666.h"
 #endif
diff --git a/Marlin/src/pins/pins.h b/Marlin/src/pins/pins.h
index d752fbe98..c29f0c363 100644
--- a/Marlin/src/pins/pins.h
+++ b/Marlin/src/pins/pins.h
@@ -451,6 +451,8 @@
   #include "sam/pins_ADSK.h"                    // SAM3X8E                                env:DUE env:DUE_debug
 #elif MB(PRINTRBOARD_G2)
   #include "sam/pins_PRINTRBOARD_G2.h"          // SAM3X8C                                env:DUE_USB
+#elif MB(CNCONTROLS_15D)
+  #include "sam/pins_CNCONTROLS_15D.h"          // SAM3X8E                                env:DUE env:DUE_USB
 
 //
 // STM32 ARM Cortex-M3
diff --git a/Marlin/src/pins/sam/pins_CNCONTROLS_15D.h b/Marlin/src/pins/sam/pins_CNCONTROLS_15D.h
new file mode 100644
index 000000000..fe9bfb9af
--- /dev/null
+++ b/Marlin/src/pins/sam/pins_CNCONTROLS_15D.h
@@ -0,0 +1,97 @@
+/**
+ * CNControls V15 for HMS434 with DUE pin assignments
+ */
+
+#ifndef __SAM3X8E__
+  #error "Oops! Select 'Arduino Due' in 'Tools > Board.'"
+#endif
+
+#define BOARD_INFO_NAME "CN Controls V15D"
+
+//
+// Servos
+//
+#define SERVO0_PIN          6
+
+//
+// Limit Switches
+//
+#define X_STOP_PIN         34
+#define Y_STOP_PIN         39
+#define Z_STOP_PIN         62
+
+#ifndef Z_MIN_PROBE_PIN
+  #define Z_MIN_PROBE_PIN  49
+#endif
+
+//
+// Steppers
+//
+#define X_STEP_PIN         14
+#define X_DIR_PIN          25
+#define X_ENABLE_PIN       26
+
+#define Y_STEP_PIN         11
+#define Y_DIR_PIN          12
+#define Y_ENABLE_PIN       15
+
+#define Z_STEP_PIN         24
+#define Z_DIR_PIN          27
+#define Z_ENABLE_PIN       28
+
+#define E0_STEP_PIN        64
+#define E0_DIR_PIN         65
+#define E0_ENABLE_PIN      63
+
+#define E1_STEP_PIN         8
+#define E1_DIR_PIN          7
+#define E1_ENABLE_PIN      29
+
+//
+// Temperature Sensors
+// Analog Inputs
+//
+#define TEMP_0_PIN          1
+#define TEMP_1_PIN          2  
+#define TEMP_BED_PIN        4   
+
+#ifndef TEMP_CHAMBER_PIN
+  #define TEMP_CHAMBER_PIN  5   
+#endif
+
+//
+// Heaters
+//
+#define HEATER_0_PIN        3
+#define HEATER_1_PIN        4
+#define HEATER_BED_PIN     32
+#define HEATER_CHAMBER_PIN 33
+
+//
+// Fans
+//
+//#define FAN0_PIN              8
+#define ORIG_E0_AUTO_FAN_PIN 30
+#define ORIG_E1_AUTO_FAN_PIN 30
+#define ORIG_E2_AUTO_FAN_PIN 30
+#define ORIG_E3_AUTO_FAN_PIN 30
+#define ORIG_CHAMBER_AUTO_FAN_PIN 10
+
+//
+// SD card
+//
+#define SCK_PIN            76
+#define MISO_PIN           74
+#define MOSI_PIN           75
+#define SDSS               53
+#define SD_DETECT_PIN      40
+
+// Common I/O
+
+//#define PWM_1_PIN           6 // probe
+//#define PWM_2_PIN          13
+//#define SPARE_IO           17
+#define BEEPER_PIN         13
+#define CALIBRATION_PIN    66
+#define STAT_LED_BLUE_PIN  -1
+#define STAT_LED_RED_PIN   31