Browse Source

Merge https://github.com/MarlinFirmware/Marlin into tm-utf-minus-kanji

Conflicts:
	Marlin/dogm_lcd_implementation.h
	Marlin/fonts/make_fonts.bat

Claerd conflicts with my own #1621. (His was easy. :-) )

corrected typo in fonts/README.fonts

Applied changes to the new delta-configurations
 and deletet there some extra whitespace at the line-endings.
AnHardt 9 years ago
parent
commit
e917477fec

+ 6
- 2
.travis.yml View File

@@ -140,8 +140,12 @@ script:
140 140
   - rm -rf .build/
141 141
   - ino build -m mega2560
142 142
   ######## Example Configurations ##############
143
-  # Delta Config
144
-  - cp Marlin/example_configurations/delta/Configuration* Marlin/
143
+  # Delta Config (generic)
144
+  - cp Marlin/example_configurations/delta/generic/Configuration* Marlin/
145
+  - rm -rf .build/
146
+  - ino build -m mega2560
147
+  # Delta Config (Mini Kossel)
148
+  - cp Marlin/example_configurations/delta/kossel_mini/Configuration* Marlin/
145 149
   - rm -rf .build/
146 150
   - ino build -m mega2560
147 151
   # Makibox Config  need to check board type for Teensy++ 2.0

+ 1
- 1
Documentation/GCodes.md View File

@@ -66,7 +66,7 @@
66 66
 *  M201 - Set max acceleration in units/s^2 for print moves (M201 X1000 Y1000)
67 67
 *  M202 - Set max acceleration in units/s^2 for travel moves (M202 X1000 Y1000) Unused in Marlin!!
68 68
 *  M203 - Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in mm/sec
69
-*  M204 - Set default acceleration: S normal moves T filament only moves (M204 S3000 T7000) im mm/sec^2  also sets minimum segment time in ms (B20000) to prevent buffer underruns and M20 minimum feedrate
69
+*  M204 - Set default acceleration: P for Printing moves, R for Retract only (no X, Y, Z) moves and T for Travel (non printing) moves (ex. M204 P800 T3000 R9000) in mm/sec^2
70 70
 *  M205 - advanced settings:  minimum travel speed S=while printing T=travel only,  B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk, E=maximum E jerk
71 71
 *  M206 - set additional homing offset
72 72
 *  M207 - set retract length S[positive mm] F[feedrate mm/min] Z[additional zlift/hop], stays in mm regardless of M200 setting

+ 1
- 0
Marlin/Configuration.h View File

@@ -443,6 +443,7 @@ const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic o
443 443
 
444 444
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
445 445
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
446
+  #define Z_RAISE_AFTER_PROBING 15    //How much the extruder will be raised after the last probing point.
446 447
 
447 448
 //   #define Z_PROBE_END_SCRIPT "G1 Z10 F12000\nG1 X15 Y330\nG1 Z0.5\nG1 Z10" //These commands will be executed in the end of G29 routine.
448 449
                                                                             //Useful to retract a deployable probe.

+ 6
- 0
Marlin/Marlin.h View File

@@ -192,12 +192,18 @@ void ClearToSend();
192 192
 void get_coordinates();
193 193
 #ifdef DELTA
194 194
 void calculate_delta(float cartesian[3]);
195
+  #ifdef ENABLE_AUTO_BED_LEVELING
196
+  extern int delta_grid_spacing[2];
197
+  void adjust_delta(float cartesian[3]);
198
+  #endif
195 199
 extern float delta[3];
200
+void prepare_move_raw();
196 201
 #endif
197 202
 #ifdef SCARA
198 203
 void calculate_delta(float cartesian[3]);
199 204
 void calculate_SCARA_forward_Transform(float f_scara[3]);
200 205
 #endif
206
+void reset_bed_level();
201 207
 void prepare_move();
202 208
 void kill();
203 209
 void Stop();

+ 339
- 40
Marlin/Marlin_main.cpp View File

@@ -143,7 +143,7 @@
143 143
 // M201 - Set max acceleration in units/s^2 for print moves (M201 X1000 Y1000)
144 144
 // M202 - Set max acceleration in units/s^2 for travel moves (M202 X1000 Y1000) Unused in Marlin!!
145 145
 // M203 - Set maximum feedrate that your machine can sustain (M203 X200 Y200 Z300 E10000) in mm/sec
146
-// M204 - Set default acceleration: S normal moves T filament only moves (M204 S3000 T7000) in mm/sec^2  also sets minimum segment time in ms (B20000) to prevent buffer under-runs and M20 minimum feedrate
146
+// M204 - Set default acceleration: P for Printing moves, R for Retract only (no X, Y, Z) moves and T for Travel (non printing) moves (ex. M204 P800 T3000 R9000) in mm/sec^2
147 147
 // M205 -  advanced settings:  minimum travel speed S=while printing T=travel only,  B=minimum segment time X= maximum xy jerk, Z=maximum Z jerk, E=maximum E jerk
148 148
 // M206 - Set additional homing offset
149 149
 // M207 - Set retract length S[positive mm] F[feedrate mm/min] Z[additional zlift/hop], stays in mm regardless of M200 setting
@@ -350,10 +350,14 @@ int fanSpeed = 0;
350 350
   float delta_diagonal_rod = DELTA_DIAGONAL_ROD;
351 351
   float delta_diagonal_rod_2 = sq(delta_diagonal_rod);
352 352
   float delta_segments_per_second = DELTA_SEGMENTS_PER_SECOND;
353
+  #ifdef ENABLE_AUTO_BED_LEVELING
354
+    float bed_level[AUTO_BED_LEVELING_GRID_POINTS][AUTO_BED_LEVELING_GRID_POINTS];
355
+  #endif
353 356
 #endif
354 357
 
355 358
 #ifdef SCARA
356 359
   float axis_scaling[3] = { 1, 1, 1 };    // Build size scaling, default to 1
360
+  static float delta[3] = { 0, 0, 0 };		
357 361
 #endif        
358 362
 
359 363
 bool cancel_heatup = false;
@@ -380,10 +384,6 @@ const char echomagic[] PROGMEM = "echo:";
380 384
 const char axis_codes[NUM_AXIS] = {'X', 'Y', 'Z', 'E'};
381 385
 static float destination[NUM_AXIS] = { 0, 0, 0, 0 };
382 386
 
383
-#ifndef DELTA
384
-  static float delta[3] = { 0, 0, 0 };
385
-#endif
386
-
387 387
 static float offset[3] = { 0, 0, 0 };
388 388
 static bool home_all_axis = true;
389 389
 static float feedrate = 1500.0, next_feedrate, saved_feedrate;
@@ -1077,6 +1077,8 @@ static void axis_is_at_home(int axis) {
1077 1077
 
1078 1078
 #ifdef ENABLE_AUTO_BED_LEVELING
1079 1079
 #ifdef AUTO_BED_LEVELING_GRID
1080
+
1081
+#ifndef DELTA
1080 1082
 static void set_bed_level_equation_lsq(double *plane_equation_coefficients)
1081 1083
 {
1082 1084
     vector_3 planeNormal = vector_3(-plane_equation_coefficients[0], -plane_equation_coefficients[1], 1);
@@ -1099,6 +1101,7 @@ static void set_bed_level_equation_lsq(double *plane_equation_coefficients)
1099 1101
 
1100 1102
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
1101 1103
 }
1104
+#endif
1102 1105
 
1103 1106
 #else // not AUTO_BED_LEVELING_GRID
1104 1107
 
@@ -1132,6 +1135,27 @@ static void set_bed_level_equation_3pts(float z_at_pt_1, float z_at_pt_2, float
1132 1135
 #endif // AUTO_BED_LEVELING_GRID
1133 1136
 
1134 1137
 static void run_z_probe() {
1138
+  #ifdef DELTA
1139
+    
1140
+    float start_z = current_position[Z_AXIS];
1141
+    long start_steps = st_get_position(Z_AXIS);
1142
+  
1143
+    // move down slowly until you find the bed
1144
+    feedrate = homing_feedrate[Z_AXIS] / 4;
1145
+    destination[Z_AXIS] = -10;
1146
+    prepare_move_raw();
1147
+    st_synchronize();
1148
+    endstops_hit_on_purpose();
1149
+    
1150
+    // we have to let the planner know where we are right now as it is not where we said to go.
1151
+    long stop_steps = st_get_position(Z_AXIS);
1152
+    float mm = start_z - float(start_steps - stop_steps) / axis_steps_per_unit[Z_AXIS];
1153
+    current_position[Z_AXIS] = mm;
1154
+    calculate_delta(current_position);
1155
+    plan_set_position(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS], current_position[E_AXIS]);
1156
+    
1157
+  #else
1158
+
1135 1159
     plan_bed_level_matrix.set_to_identity();
1136 1160
     feedrate = homing_feedrate[Z_AXIS];
1137 1161
 
@@ -1169,11 +1193,25 @@ static void run_z_probe() {
1169 1193
     current_position[Z_AXIS] = st_get_position_mm(Z_AXIS);
1170 1194
     // make sure the planner knows where we are as it may be a bit different than we last said to move to
1171 1195
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
1196
+    
1197
+  #endif
1172 1198
 }
1173 1199
 
1174 1200
 static void do_blocking_move_to(float x, float y, float z) {
1175 1201
     float oldFeedRate = feedrate;
1176 1202
 
1203
+#ifdef DELTA
1204
+
1205
+    feedrate = XY_TRAVEL_SPEED;
1206
+    
1207
+    destination[X_AXIS] = x;
1208
+    destination[Y_AXIS] = y;
1209
+    destination[Z_AXIS] = z;
1210
+    prepare_move_raw();
1211
+    st_synchronize();
1212
+
1213
+#else
1214
+
1177 1215
     feedrate = homing_feedrate[Z_AXIS];
1178 1216
 
1179 1217
     current_position[Z_AXIS] = z;
@@ -1187,6 +1225,8 @@ static void do_blocking_move_to(float x, float y, float z) {
1187 1225
     plan_buffer_line(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS], feedrate/60, active_extruder);
1188 1226
     st_synchronize();
1189 1227
 
1228
+#endif
1229
+
1190 1230
     feedrate = oldFeedRate;
1191 1231
 }
1192 1232
 
@@ -1226,7 +1266,40 @@ static void engage_z_probe() {
1226 1266
         servos[servo_endstops[Z_AXIS]].detach();
1227 1267
       #endif
1228 1268
     }
1269
+  #elif defined(Z_PROBE_ALLEN_KEY)
1270
+    feedrate = homing_feedrate[X_AXIS];
1271
+    
1272
+    // Move to the start position to initiate deployment
1273
+    destination[X_AXIS] = Z_PROBE_ALLEN_KEY_DEPLOY_X;
1274
+    destination[Y_AXIS] = Z_PROBE_ALLEN_KEY_DEPLOY_Y;
1275
+    destination[Z_AXIS] = Z_PROBE_ALLEN_KEY_DEPLOY_Z;
1276
+    prepare_move_raw();
1277
+
1278
+    // Home X to touch the belt
1279
+    feedrate = homing_feedrate[X_AXIS]/10;
1280
+    destination[X_AXIS] = 0;
1281
+    prepare_move_raw();
1282
+    
1283
+    // Home Y for safety
1284
+    feedrate = homing_feedrate[X_AXIS]/2;
1285
+    destination[Y_AXIS] = 0;
1286
+    prepare_move_raw();
1287
+    
1288
+    st_synchronize();
1289
+    
1290
+    bool z_min_endstop = (READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING);
1291
+    if (z_min_endstop)
1292
+    {
1293
+        if (!Stopped)
1294
+        {
1295
+            SERIAL_ERROR_START;
1296
+            SERIAL_ERRORLNPGM("Z-Probe failed to engage!");
1297
+            LCD_ALERTMESSAGEPGM("Err: ZPROBE");
1298
+        }
1299
+        Stop();
1300
+    }
1229 1301
   #endif
1302
+
1230 1303
 }
1231 1304
 
1232 1305
 static void retract_z_probe() {
@@ -1242,7 +1315,49 @@ static void retract_z_probe() {
1242 1315
         servos[servo_endstops[Z_AXIS]].detach();
1243 1316
       #endif
1244 1317
     }
1318
+  #elif defined(Z_PROBE_ALLEN_KEY)
1319
+    // Move up for safety
1320
+    feedrate = homing_feedrate[X_AXIS];
1321
+    destination[Z_AXIS] = current_position[Z_AXIS] + 20;
1322
+    prepare_move_raw();
1323
+
1324
+    // Move to the start position to initiate retraction
1325
+    destination[X_AXIS] = Z_PROBE_ALLEN_KEY_RETRACT_X;
1326
+    destination[Y_AXIS] = Z_PROBE_ALLEN_KEY_RETRACT_Y;
1327
+    destination[Z_AXIS] = Z_PROBE_ALLEN_KEY_RETRACT_Z;
1328
+    prepare_move_raw();
1329
+
1330
+    // Move the nozzle down to push the probe into retracted position
1331
+    feedrate = homing_feedrate[Z_AXIS]/10;
1332
+    destination[Z_AXIS] = current_position[Z_AXIS] - Z_PROBE_ALLEN_KEY_RETRACT_DEPTH;
1333
+    prepare_move_raw();
1334
+    
1335
+    // Move up for safety
1336
+    feedrate = homing_feedrate[Z_AXIS]/2;
1337
+    destination[Z_AXIS] = current_position[Z_AXIS] + Z_PROBE_ALLEN_KEY_RETRACT_DEPTH * 2;
1338
+    prepare_move_raw();
1339
+    
1340
+    // Home XY for safety
1341
+    feedrate = homing_feedrate[X_AXIS]/2;
1342
+    destination[X_AXIS] = 0;
1343
+    destination[Y_AXIS] = 0;
1344
+    prepare_move_raw();
1345
+    
1346
+    st_synchronize();
1347
+    
1348
+    bool z_min_endstop = (READ(Z_MIN_PIN) != Z_MIN_ENDSTOP_INVERTING);
1349
+    if (!z_min_endstop)
1350
+    {
1351
+        if (!Stopped)
1352
+        {
1353
+            SERIAL_ERROR_START;
1354
+            SERIAL_ERRORLNPGM("Z-Probe failed to retract!");
1355
+            LCD_ALERTMESSAGEPGM("Err: ZPROBE");
1356
+        }
1357
+        Stop();
1358
+    }
1245 1359
   #endif
1360
+
1246 1361
 }
1247 1362
 
1248 1363
 enum ProbeAction { ProbeStay, ProbeEngage, ProbeRetract, ProbeEngageRetract };
@@ -1253,14 +1368,14 @@ static float probe_pt(float x, float y, float z_before, ProbeAction retract_acti
1253 1368
   do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], z_before);
1254 1369
   do_blocking_move_to(x - X_PROBE_OFFSET_FROM_EXTRUDER, y - Y_PROBE_OFFSET_FROM_EXTRUDER, current_position[Z_AXIS]);
1255 1370
 
1256
-  #ifndef Z_PROBE_SLED
1371
+  #if !defined(Z_PROBE_SLED) && !defined(Z_PROBE_ALLEN_KEY)
1257 1372
     if (retract_action & ProbeEngage) engage_z_probe();
1258 1373
   #endif
1259 1374
 
1260 1375
   run_z_probe();
1261 1376
   float measured_z = current_position[Z_AXIS];
1262 1377
 
1263
-  #ifndef Z_PROBE_SLED
1378
+  #if !defined(Z_PROBE_SLED) && !defined(Z_PROBE_ALLEN_KEY)
1264 1379
     if (retract_action & ProbeRetract) retract_z_probe();
1265 1380
   #endif
1266 1381
 
@@ -1277,6 +1392,62 @@ static float probe_pt(float x, float y, float z_before, ProbeAction retract_acti
1277 1392
   return measured_z;
1278 1393
 }
1279 1394
 
1395
+#ifdef DELTA
1396
+static void extrapolate_one_point(int x, int y, int xdir, int ydir) {
1397
+  if (bed_level[x][y] != 0.0) {
1398
+    return;  // Don't overwrite good values.
1399
+  }
1400
+  float a = 2*bed_level[x+xdir][y] - bed_level[x+xdir*2][y];  // Left to right.
1401
+  float b = 2*bed_level[x][y+ydir] - bed_level[x][y+ydir*2];  // Front to back.
1402
+  float c = 2*bed_level[x+xdir][y+ydir] - bed_level[x+xdir*2][y+ydir*2];  // Diagonal.
1403
+  float median = c;  // Median is robust (ignores outliers).
1404
+  if (a < b) {
1405
+    if (b < c) median = b;
1406
+    if (c < a) median = a;
1407
+  } else {  // b <= a
1408
+    if (c < b) median = b;
1409
+    if (a < c) median = a;
1410
+  }
1411
+  bed_level[x][y] = median;
1412
+}
1413
+
1414
+// Fill in the unprobed points (corners of circular print surface)
1415
+// using linear extrapolation, away from the center.
1416
+static void extrapolate_unprobed_bed_level() {
1417
+  int half = (AUTO_BED_LEVELING_GRID_POINTS-1)/2;
1418
+  for (int y = 0; y <= half; y++) {
1419
+    for (int x = 0; x <= half; x++) {
1420
+      if (x + y < 3) continue;
1421
+      extrapolate_one_point(half-x, half-y, x>1?+1:0, y>1?+1:0);
1422
+      extrapolate_one_point(half+x, half-y, x>1?-1:0, y>1?+1:0);
1423
+      extrapolate_one_point(half-x, half+y, x>1?+1:0, y>1?-1:0);
1424
+      extrapolate_one_point(half+x, half+y, x>1?-1:0, y>1?-1:0);
1425
+    }
1426
+  }
1427
+}
1428
+
1429
+// Print calibration results for plotting or manual frame adjustment.
1430
+static void print_bed_level() {
1431
+  for (int y = 0; y < AUTO_BED_LEVELING_GRID_POINTS; y++) {
1432
+    for (int x = 0; x < AUTO_BED_LEVELING_GRID_POINTS; x++) {
1433
+      SERIAL_PROTOCOL_F(bed_level[x][y], 2);
1434
+      SERIAL_PROTOCOLPGM(" ");
1435
+    }
1436
+    SERIAL_ECHOLN("");
1437
+  }
1438
+}
1439
+
1440
+// Reset calibration results to zero.
1441
+void reset_bed_level() {
1442
+  for (int y = 0; y < AUTO_BED_LEVELING_GRID_POINTS; y++) {
1443
+    for (int x = 0; x < AUTO_BED_LEVELING_GRID_POINTS; x++) {
1444
+      bed_level[x][y] = 0.0;
1445
+    }
1446
+  }
1447
+}
1448
+
1449
+#endif // DELTA
1450
+
1280 1451
 #endif // ENABLE_AUTO_BED_LEVELING
1281 1452
 
1282 1453
 static void homeaxis(int axis) {
@@ -1516,7 +1687,7 @@ inline void gcode_G2_G3(bool clockwise) {
1516 1687
  * G4: Dwell S<seconds> or P<milliseconds>
1517 1688
  */
1518 1689
 inline void gcode_G4() {
1519
-  unsigned long codenum;
1690
+  unsigned long codenum=0;
1520 1691
 
1521 1692
   LCD_MESSAGEPGM(MSG_DWELL);
1522 1693
 
@@ -1559,7 +1730,11 @@ inline void gcode_G4() {
1559 1730
  */
1560 1731
 inline void gcode_G28() {
1561 1732
   #ifdef ENABLE_AUTO_BED_LEVELING
1562
-    plan_bed_level_matrix.set_to_identity();  //Reset the plane ("erase" all leveling data)
1733
+    #ifdef DELTA
1734
+      reset_bed_level();
1735
+    #else
1736
+      plan_bed_level_matrix.set_to_identity();  //Reset the plane ("erase" all leveling data)
1737
+    #endif
1563 1738
   #endif
1564 1739
 
1565 1740
   saved_feedrate = feedrate;
@@ -1831,6 +2006,7 @@ inline void gcode_G28() {
1831 2006
    * Parameters With AUTO_BED_LEVELING_GRID:
1832 2007
    *
1833 2008
    *  P  Set the size of the grid that will be probed (P x P points).
2009
+   *     Not supported by non-linear delta printer bed leveling.
1834 2010
    *     Example: "G29 P4"
1835 2011
    *
1836 2012
    *  S  Set the XY travel speed between probe points (in mm/min)
@@ -1840,6 +2016,7 @@ inline void gcode_G28() {
1840 2016
    *  T  Generate a Bed Topology Report. Example: "G29 P5 T" for a detailed report.
1841 2017
    *     This is useful for manual bed leveling and finding flaws in the bed (to
1842 2018
    *     assist with part placement).
2019
+   *     Not supported by non-linear delta printer bed leveling.
1843 2020
    *
1844 2021
    *  F  Set the Front limit of the probing grid
1845 2022
    *  B  Set the Back limit of the probing grid
@@ -1879,16 +2056,21 @@ inline void gcode_G28() {
1879 2056
 
1880 2057
     #ifdef AUTO_BED_LEVELING_GRID
1881 2058
 
2059
+    #ifndef DELTA
1882 2060
       bool topo_flag = verbose_level > 2 || code_seen('T') || code_seen('t');
2061
+    #endif
1883 2062
 
1884 2063
       if (verbose_level > 0)
1885 2064
         SERIAL_PROTOCOLPGM("G29 Auto Bed Leveling\n");
1886 2065
 
1887
-      int auto_bed_leveling_grid_points = code_seen('P') ? code_value_long() : AUTO_BED_LEVELING_GRID_POINTS;
1888
-      if (auto_bed_leveling_grid_points < 2) {
1889
-        SERIAL_PROTOCOLPGM("?Number of probed (P)oints is implausible (2 minimum).\n");
1890
-        return;
1891
-      }
2066
+      int auto_bed_leveling_grid_points = AUTO_BED_LEVELING_GRID_POINTS;
2067
+      #ifndef DELTA
2068
+        if (code_seen('P')) auto_bed_leveling_grid_points = code_value_long();
2069
+        if (auto_bed_leveling_grid_points < 2) {
2070
+          SERIAL_PROTOCOLPGM("?Number of probed (P)oints is implausible (2 minimum).\n");
2071
+          return;
2072
+        }
2073
+      #endif
1892 2074
 
1893 2075
       xy_travel_speed = code_seen('S') ? code_value_long() : XY_TRAVEL_SPEED;
1894 2076
 
@@ -1930,20 +2112,27 @@ inline void gcode_G28() {
1930 2112
 
1931 2113
     #ifdef Z_PROBE_SLED
1932 2114
       dock_sled(false); // engage (un-dock) the probe
2115
+    #elif not defined(SERVO_ENDSTOPS)
2116
+      engage_z_probe();
1933 2117
     #endif
1934 2118
 
1935 2119
     st_synchronize();
1936 2120
 
2121
+  #ifdef DELTA
2122
+    reset_bed_level();
2123
+  #else
1937 2124
     // make sure the bed_level_rotation_matrix is identity or the planner will get it incorectly
1938 2125
     //vector_3 corrected_position = plan_get_position_mm();
1939 2126
     //corrected_position.debug("position before G29");
1940 2127
     plan_bed_level_matrix.set_to_identity();
1941 2128
     vector_3 uncorrected_position = plan_get_position();
1942
-    //uncorrected_position.debug("position durring G29");
2129
+    //uncorrected_position.debug("position during G29");
1943 2130
     current_position[X_AXIS] = uncorrected_position.x;
1944 2131
     current_position[Y_AXIS] = uncorrected_position.y;
1945 2132
     current_position[Z_AXIS] = uncorrected_position.z;
1946 2133
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
2134
+  #endif
2135
+
1947 2136
     setup_for_endstop_move();
1948 2137
 
1949 2138
     feedrate = homing_feedrate[Z_AXIS];
@@ -1951,9 +2140,10 @@ inline void gcode_G28() {
1951 2140
     #ifdef AUTO_BED_LEVELING_GRID
1952 2141
 
1953 2142
       // probe at the points of a lattice grid
1954
-      int xGridSpacing = (right_probe_bed_position - left_probe_bed_position) / (auto_bed_leveling_grid_points - 1);
1955
-      int yGridSpacing = (back_probe_bed_position - front_probe_bed_position) / (auto_bed_leveling_grid_points - 1);
2143
+      const int xGridSpacing = (right_probe_bed_position - left_probe_bed_position) / (auto_bed_leveling_grid_points-1);
2144
+      const int yGridSpacing = (back_probe_bed_position - front_probe_bed_position) / (auto_bed_leveling_grid_points-1);
1956 2145
 
2146
+    #ifndef DELTA
1957 2147
       // solve the plane equation ax + by + d = z
1958 2148
       // A is the matrix with rows [x y 1] for all the probed points
1959 2149
       // B is the vector of the Z positions
@@ -1966,26 +2156,60 @@ inline void gcode_G28() {
1966 2156
              eqnBVector[abl2],     // "B" vector of Z points
1967 2157
              mean = 0.0;
1968 2158
 
2159
+    #else
2160
+      delta_grid_spacing[0] = xGridSpacing;
2161
+      delta_grid_spacing[1] = yGridSpacing;
2162
+
2163
+      float z_offset = Z_PROBE_OFFSET_FROM_EXTRUDER;
2164
+      if (code_seen(axis_codes[Z_AXIS])) {
2165
+        z_offset += code_value();
2166
+      }
2167
+    #endif
2168
+
1969 2169
       int probePointCounter = 0;
1970 2170
       bool zig = true;
1971 2171
 
1972
-      for (int yProbe = front_probe_bed_position; yProbe <= back_probe_bed_position; yProbe += yGridSpacing) {
1973
-        int xProbe, xInc;
2172
+      for (int yCount=0; yCount < auto_bed_leveling_grid_points; yCount++)
2173
+      {
2174
+        double yProbe = front_probe_bed_position + yGridSpacing * yCount;
2175
+        int xStart, xStop, xInc;
1974 2176
 
1975 2177
         if (zig)
1976
-          xProbe = left_probe_bed_position, xInc = xGridSpacing;
2178
+        {
2179
+          xStart = 0;
2180
+          xStop = auto_bed_leveling_grid_points;
2181
+          xInc = 1;
2182
+          zig = false;
2183
+        }
1977 2184
         else
1978
-          xProbe = right_probe_bed_position, xInc = -xGridSpacing;
2185
+        {
2186
+          xStart = auto_bed_leveling_grid_points - 1;
2187
+          xStop = -1;
2188
+          xInc = -1;
2189
+          zig = true;
2190
+        }
1979 2191
 
2192
+      #ifndef DELTA
1980 2193
         // If topo_flag is set then don't zig-zag. Just scan in one direction.
1981 2194
         // This gets the probe points in more readable order.
1982 2195
         if (!topo_flag) zig = !zig;
2196
+      #endif
2197
+
2198
+        for (int xCount=xStart; xCount != xStop; xCount += xInc)
2199
+        {
2200
+          double xProbe = left_probe_bed_position + xGridSpacing * xCount;
1983 2201
 
1984
-        for (int xCount = 0; xCount < auto_bed_leveling_grid_points; xCount++) {
1985 2202
           // raise extruder
1986 2203
           float measured_z,
1987 2204
                 z_before = probePointCounter == 0 ? Z_RAISE_BEFORE_PROBING : current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS;
1988 2205
 
2206
+        #ifdef DELTA
2207
+          // Avoid probing the corners (outside the round or hexagon print surface) on a delta printer.
2208
+          float distance_from_center = sqrt(xProbe*xProbe + yProbe*yProbe);
2209
+          if (distance_from_center > DELTA_PROBABLE_RADIUS)
2210
+            continue;
2211
+        #endif //DELTA
2212
+
1989 2213
           // Enhanced G29 - Do not retract servo between probes
1990 2214
           ProbeAction act;
1991 2215
           if (enhanced_g29) {
@@ -2001,22 +2225,24 @@ inline void gcode_G28() {
2001 2225
 
2002 2226
           measured_z = probe_pt(xProbe, yProbe, z_before, act, verbose_level);
2003 2227
 
2228
+        #ifndef DELTA
2004 2229
           mean += measured_z;
2005 2230
 
2006 2231
           eqnBVector[probePointCounter] = measured_z;
2007 2232
           eqnAMatrix[probePointCounter + 0 * abl2] = xProbe;
2008 2233
           eqnAMatrix[probePointCounter + 1 * abl2] = yProbe;
2009 2234
           eqnAMatrix[probePointCounter + 2 * abl2] = 1;
2235
+        #else
2236
+          bed_level[xCount][yCount] = measured_z + z_offset;
2237
+        #endif
2010 2238
 
2011 2239
           probePointCounter++;
2012
-          xProbe += xInc;
2013
-
2014 2240
         } //xProbe
2015
-
2016 2241
       } //yProbe
2017 2242
 
2018 2243
       clean_up_after_endstop_move();
2019 2244
 
2245
+    #ifndef DELTA
2020 2246
       // solve lsq problem
2021 2247
       double *plane_equation_coefficients = qr_solve(abl2, 3, eqnAMatrix, eqnBVector);
2022 2248
 
@@ -2084,6 +2310,10 @@ inline void gcode_G28() {
2084 2310
 
2085 2311
       set_bed_level_equation_lsq(plane_equation_coefficients);
2086 2312
       free(plane_equation_coefficients);
2313
+    #else
2314
+      extrapolate_unprobed_bed_level();
2315
+      print_bed_level();
2316
+    #endif
2087 2317
 
2088 2318
     #else // !AUTO_BED_LEVELING_GRID
2089 2319
 
@@ -2097,17 +2327,19 @@ inline void gcode_G28() {
2097 2327
         z_at_pt_3 = probe_pt(ABL_PROBE_PT_3_X, ABL_PROBE_PT_3_Y, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS, ProbeRetract, verbose_level);
2098 2328
       }
2099 2329
       else {
2100
-        z_at_pt_1 = probe_pt(ABL_PROBE_PT_1_X, ABL_PROBE_PT_1_Y, Z_RAISE_BEFORE_PROBING, verbose_level);
2101
-        z_at_pt_2 = probe_pt(ABL_PROBE_PT_2_X, ABL_PROBE_PT_2_Y, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS, verbose_level);
2102
-        z_at_pt_3 = probe_pt(ABL_PROBE_PT_3_X, ABL_PROBE_PT_3_Y, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS, verbose_level);
2330
+        z_at_pt_1 = probe_pt(ABL_PROBE_PT_1_X, ABL_PROBE_PT_1_Y, Z_RAISE_BEFORE_PROBING, verbose_level=verbose_level);
2331
+        z_at_pt_2 = probe_pt(ABL_PROBE_PT_2_X, ABL_PROBE_PT_2_Y, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS, verbose_level=verbose_level);
2332
+        z_at_pt_3 = probe_pt(ABL_PROBE_PT_3_X, ABL_PROBE_PT_3_Y, current_position[Z_AXIS] + Z_RAISE_BETWEEN_PROBINGS, verbose_level=verbose_level);
2103 2333
       }
2104 2334
       clean_up_after_endstop_move();
2105 2335
       set_bed_level_equation_3pts(z_at_pt_1, z_at_pt_2, z_at_pt_3);
2106 2336
 
2107 2337
     #endif // !AUTO_BED_LEVELING_GRID
2108 2338
 
2339
+    do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], Z_RAISE_AFTER_PROBING);
2109 2340
     st_synchronize();
2110 2341
 
2342
+  #ifndef DELTA
2111 2343
     if (verbose_level > 0)
2112 2344
       plan_bed_level_matrix.debug(" \n\nBed Level Correction Matrix:");
2113 2345
 
@@ -2122,15 +2354,18 @@ inline void gcode_G28() {
2122 2354
     apply_rotation_xyz(plan_bed_level_matrix, x_tmp, y_tmp, z_tmp);         //Apply the correction sending the probe offset
2123 2355
     current_position[Z_AXIS] = z_tmp - real_z + current_position[Z_AXIS];   //The difference is added to current position and sent to planner.
2124 2356
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);
2357
+  #endif
2125 2358
 
2126
-    #ifdef Z_PROBE_SLED
2127
-      dock_sled(true, -SLED_DOCKING_OFFSET); // dock the probe, correcting for over-travel
2128
-    #endif
2359
+  #ifdef Z_PROBE_SLED
2360
+    dock_sled(true, -SLED_DOCKING_OFFSET); // dock the probe, correcting for over-travel
2361
+  #elif not defined(SERVO_ENDSTOPS)
2362
+    retract_z_probe();
2363
+  #endif
2129 2364
     
2130
-    #ifdef Z_PROBE_END_SCRIPT
2131
-      enquecommands_P(PSTR(Z_PROBE_END_SCRIPT));
2132
-      st_synchronize();
2133
-    #endif
2365
+  #ifdef Z_PROBE_END_SCRIPT
2366
+    enquecommands_P(PSTR(Z_PROBE_END_SCRIPT));
2367
+    st_synchronize();
2368
+  #endif
2134 2369
   }
2135 2370
 
2136 2371
   #ifndef Z_PROBE_SLED
@@ -3287,6 +3522,13 @@ inline void gcode_M203() {
3287 3522
  *  Also sets minimum segment time in ms (B20000) to prevent buffer under-runs and M20 minimum feedrate
3288 3523
  */
3289 3524
 inline void gcode_M204() {
3525
+  if (code_seen('S'))   // Kept for legacy compatibility. Should NOT BE USED for new developments.
3526
+  {
3527
+    acceleration = code_value();
3528
+    travel_acceleration = acceleration;
3529
+    SERIAL_ECHOPAIR("Setting Printing and Travelling Acceleration: ", acceleration );
3530
+    SERIAL_EOL;
3531
+  }
3290 3532
   if (code_seen('P'))
3291 3533
   {
3292 3534
     acceleration = code_value();
@@ -3899,7 +4141,7 @@ inline void gcode_M303() {
3899 4141
  */
3900 4142
 inline void gcode_M400() { st_synchronize(); }
3901 4143
 
3902
-#if defined(ENABLE_AUTO_BED_LEVELING) && defined(SERVO_ENDSTOPS) && not defined(Z_PROBE_SLED)
4144
+#if defined(ENABLE_AUTO_BED_LEVELING) && (defined(SERVO_ENDSTOPS) || defined(Z_PROBE_ALLEN_KEY)) && not defined(Z_PROBE_SLED)
3903 4145
 
3904 4146
   /**
3905 4147
    * M401: Engage Z Servo endstop if available
@@ -4761,7 +5003,7 @@ void process_commands() {
4761 5003
         gcode_M400();
4762 5004
         break;
4763 5005
 
4764
-      #if defined(ENABLE_AUTO_BED_LEVELING) && defined(SERVO_ENDSTOPS) && not defined(Z_PROBE_SLED)
5006
+      #if defined(ENABLE_AUTO_BED_LEVELING) && (defined(SERVO_ENDSTOPS) || defined(Z_PROBE_ALLEN_KEY)) && not defined(Z_PROBE_SLED)
4765 5007
         case 401:
4766 5008
           gcode_M401();
4767 5009
           break;
@@ -4979,7 +5221,64 @@ void calculate_delta(float cartesian[3])
4979 5221
   SERIAL_ECHOPGM(" z="); SERIAL_ECHOLN(delta[Z_AXIS]);
4980 5222
   */
4981 5223
 }
4982
-#endif
5224
+
5225
+#ifdef ENABLE_AUTO_BED_LEVELING
5226
+// Adjust print surface height by linear interpolation over the bed_level array.
5227
+int delta_grid_spacing[2] = { 0, 0 };
5228
+void adjust_delta(float cartesian[3])
5229
+{
5230
+  if (delta_grid_spacing[0] == 0 || delta_grid_spacing[1] == 0)
5231
+    return; // G29 not done
5232
+
5233
+  int half = (AUTO_BED_LEVELING_GRID_POINTS - 1) / 2;
5234
+  float grid_x = max(0.001-half, min(half-0.001, cartesian[X_AXIS] / delta_grid_spacing[0]));
5235
+  float grid_y = max(0.001-half, min(half-0.001, cartesian[Y_AXIS] / delta_grid_spacing[1]));
5236
+  int floor_x = floor(grid_x);
5237
+  int floor_y = floor(grid_y);
5238
+  float ratio_x = grid_x - floor_x;
5239
+  float ratio_y = grid_y - floor_y;
5240
+  float z1 = bed_level[floor_x+half][floor_y+half];
5241
+  float z2 = bed_level[floor_x+half][floor_y+half+1];
5242
+  float z3 = bed_level[floor_x+half+1][floor_y+half];
5243
+  float z4 = bed_level[floor_x+half+1][floor_y+half+1];
5244
+  float left = (1-ratio_y)*z1 + ratio_y*z2;
5245
+  float right = (1-ratio_y)*z3 + ratio_y*z4;
5246
+  float offset = (1-ratio_x)*left + ratio_x*right;
5247
+
5248
+  delta[X_AXIS] += offset;
5249
+  delta[Y_AXIS] += offset;
5250
+  delta[Z_AXIS] += offset;
5251
+
5252
+  /*
5253
+  SERIAL_ECHOPGM("grid_x="); SERIAL_ECHO(grid_x);
5254
+  SERIAL_ECHOPGM(" grid_y="); SERIAL_ECHO(grid_y);
5255
+  SERIAL_ECHOPGM(" floor_x="); SERIAL_ECHO(floor_x);
5256
+  SERIAL_ECHOPGM(" floor_y="); SERIAL_ECHO(floor_y);
5257
+  SERIAL_ECHOPGM(" ratio_x="); SERIAL_ECHO(ratio_x);
5258
+  SERIAL_ECHOPGM(" ratio_y="); SERIAL_ECHO(ratio_y);
5259
+  SERIAL_ECHOPGM(" z1="); SERIAL_ECHO(z1);
5260
+  SERIAL_ECHOPGM(" z2="); SERIAL_ECHO(z2);
5261
+  SERIAL_ECHOPGM(" z3="); SERIAL_ECHO(z3);
5262
+  SERIAL_ECHOPGM(" z4="); SERIAL_ECHO(z4);
5263
+  SERIAL_ECHOPGM(" left="); SERIAL_ECHO(left);
5264
+  SERIAL_ECHOPGM(" right="); SERIAL_ECHO(right);
5265
+  SERIAL_ECHOPGM(" offset="); SERIAL_ECHOLN(offset);
5266
+  */
5267
+}
5268
+#endif //ENABLE_AUTO_BED_LEVELING
5269
+
5270
+void prepare_move_raw()
5271
+{
5272
+  previous_millis_cmd = millis();
5273
+  calculate_delta(destination);
5274
+  plan_buffer_line(delta[X_AXIS], delta[Y_AXIS], delta[Z_AXIS],
5275
+                   destination[E_AXIS], feedrate*feedmultiply/60/100.0,
5276
+                   active_extruder);
5277
+  for(int8_t i=0; i < NUM_AXIS; i++) {
5278
+    current_position[i] = destination[i];
5279
+  }
5280
+}
5281
+#endif //DELTA
4983 5282
 
4984 5283
 void prepare_move()
4985 5284
 {
@@ -5279,7 +5578,7 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) //default argument s
5279 5578
   
5280 5579
 #if defined(KILL_PIN) && KILL_PIN > -1
5281 5580
   static int killCount = 0;   // make the inactivity button a bit less responsive
5282
-   const int KILL_DELAY = 10000;
5581
+   const int KILL_DELAY = 750;
5283 5582
 #endif
5284 5583
 
5285 5584
 #if defined(FILRUNOUT_PIN) && FILRUNOUT_PIN > -1
@@ -5290,7 +5589,7 @@ void manage_inactivity(bool ignore_stepper_queue/*=false*/) //default argument s
5290 5589
 
5291 5590
 #if defined(HOME_PIN) && HOME_PIN > -1
5292 5591
    static int homeDebounceCount = 0;   // poor man's debouncing count
5293
-   const int HOME_DEBOUNCE_DELAY = 10000;
5592
+   const int HOME_DEBOUNCE_DELAY = 750;
5294 5593
 #endif
5295 5594
    
5296 5595
   

+ 176
- 0
Marlin/dogm_font_data_ISO10646_1.h View File

@@ -0,0 +1,176 @@
1
+/*
2
+  Fontname: ISO10646-1
3
+  Copyright: A.Hardtung, public domain
4
+  Capital A Height: 7, '1' Height: 7
5
+  Calculated Max Values w= 5 h= 9 x= 2 y= 7 dx= 6 dy= 0 ascent= 8 len= 9
6
+  Font Bounding box     w= 6 h= 9 x= 0 y=-2
7
+  Calculated Min Values           x= 0 y=-1 dx= 0 dy= 0
8
+  Pure Font   ascent = 7 descent=-1
9
+  X Font      ascent = 7 descent=-1
10
+  Max Font    ascent = 8 descent=-1
11
+*/
12
+#include <utility/u8g.h>
13
+const u8g_fntpgm_uint8_t ISO10646_1_5x7[2592] U8G_SECTION(".progmem.ISO10646_1_5x7") = {
14
+  0,6,9,0,254,7,1,146,3,33,32,255,255,8,255,7,
15
+  255,0,0,0,6,0,0,1,7,7,6,2,0,128,128,128,
16
+  128,128,0,128,3,2,2,6,1,5,160,160,5,7,7,6,
17
+  0,0,80,80,248,80,248,80,80,5,7,7,6,0,0,32,
18
+  120,160,112,40,240,32,5,7,7,6,0,0,192,200,16,32,
19
+  64,152,24,5,7,7,6,0,0,96,144,160,64,168,144,104,
20
+  2,3,3,6,1,4,192,64,128,3,7,7,6,1,0,32,
21
+  64,128,128,128,64,32,3,7,7,6,1,0,128,64,32,32,
22
+  32,64,128,5,5,5,6,0,1,32,168,112,168,32,5,5,
23
+  5,6,0,1,32,32,248,32,32,2,3,3,6,2,255,192,
24
+  64,128,5,1,1,6,0,3,248,2,2,2,6,2,0,192,
25
+  192,5,5,5,6,0,1,8,16,32,64,128,5,7,7,6,
26
+  0,0,112,136,136,136,136,136,112,3,7,7,6,1,0,64,
27
+  192,64,64,64,64,224,5,7,7,6,0,0,112,136,8,112,
28
+  128,128,248,5,7,7,6,0,0,248,16,32,16,8,8,240,
29
+  5,7,7,6,0,0,16,48,80,144,248,16,16,5,7,7,
30
+  6,0,0,248,128,240,8,8,136,112,5,7,7,6,0,0,
31
+  112,128,128,240,136,136,112,5,7,7,6,0,0,248,8,16,
32
+  32,32,32,32,5,7,7,6,0,0,112,136,136,112,136,136,
33
+  112,5,7,7,6,0,0,112,136,136,120,8,8,112,2,5,
34
+  5,6,2,0,192,192,0,192,192,2,6,6,6,2,255,192,
35
+  192,0,192,64,128,4,7,7,6,0,0,16,32,64,128,64,
36
+  32,16,5,3,3,6,0,2,248,0,248,4,7,7,6,1,
37
+  0,128,64,32,16,32,64,128,5,7,7,6,0,0,112,136,
38
+  8,16,32,0,32,5,7,7,6,0,0,112,136,8,104,168,
39
+  168,112,5,7,7,6,0,0,112,136,136,248,136,136,136,5,
40
+  7,7,6,0,0,240,136,136,240,136,136,240,5,7,7,6,
41
+  0,0,112,136,128,128,128,136,112,5,7,7,6,0,0,240,
42
+  136,136,136,136,136,240,5,7,7,6,0,0,248,128,128,240,
43
+  128,128,248,5,7,7,6,0,0,248,128,128,240,128,128,128,
44
+  5,7,7,6,0,0,112,136,128,184,136,136,112,5,7,7,
45
+  6,0,0,136,136,136,248,136,136,136,1,7,7,6,2,0,
46
+  128,128,128,128,128,128,128,5,7,7,6,0,0,56,16,16,
47
+  16,16,144,96,5,7,7,6,0,0,136,144,160,192,160,144,
48
+  136,5,7,7,6,0,0,128,128,128,128,128,128,248,5,7,
49
+  7,6,0,0,136,216,168,136,136,136,136,5,7,7,6,0,
50
+  0,136,136,200,168,152,136,136,5,7,7,6,0,0,112,136,
51
+  136,136,136,136,112,5,7,7,6,0,0,240,136,136,240,128,
52
+  128,128,5,7,7,6,0,0,112,136,136,136,168,144,104,5,
53
+  7,7,6,0,0,240,136,136,240,160,144,136,5,7,7,6,
54
+  0,0,120,128,128,112,8,8,240,5,7,7,6,0,0,248,
55
+  32,32,32,32,32,32,5,7,7,6,0,0,136,136,136,136,
56
+  136,136,112,5,7,7,6,0,0,136,136,136,136,136,80,32,
57
+  5,7,7,6,0,0,136,136,136,136,136,168,80,5,7,7,
58
+  6,0,0,136,136,80,32,80,136,136,5,7,7,6,0,0,
59
+  136,136,136,80,32,32,32,5,7,7,6,0,0,248,8,16,
60
+  32,64,128,248,3,7,7,6,1,0,224,128,128,128,128,128,
61
+  224,5,5,5,6,0,1,128,64,32,16,8,3,7,7,6,
62
+  1,0,224,32,32,32,32,32,224,5,3,3,6,0,4,32,
63
+  80,136,5,1,1,6,0,0,248,2,2,2,6,2,5,128,
64
+  64,5,5,5,6,0,0,112,8,120,136,120,5,7,7,6,
65
+  0,0,128,128,176,200,136,136,240,5,5,5,6,0,0,112,
66
+  128,128,136,112,5,7,7,6,0,0,8,8,104,152,136,136,
67
+  120,5,5,5,6,0,0,112,136,248,128,112,5,7,7,6,
68
+  0,0,48,72,224,64,64,64,64,5,6,6,6,0,255,112,
69
+  136,136,120,8,112,5,7,7,6,0,0,128,128,176,200,136,
70
+  136,136,1,7,7,6,2,0,128,0,128,128,128,128,128,3,
71
+  8,8,6,1,255,32,0,32,32,32,32,160,64,4,7,7,
72
+  6,0,0,128,128,144,160,192,160,144,3,7,7,6,1,0,
73
+  192,64,64,64,64,64,224,5,5,5,6,0,0,208,168,168,
74
+  168,168,5,5,5,6,0,0,176,200,136,136,136,5,5,5,
75
+  6,0,0,112,136,136,136,112,5,6,6,6,0,255,240,136,
76
+  136,240,128,128,5,6,6,6,0,255,120,136,136,120,8,8,
77
+  5,5,5,6,0,0,176,200,128,128,128,5,5,5,6,0,
78
+  0,112,128,112,8,240,4,7,7,6,0,0,64,64,224,64,
79
+  64,64,48,5,5,5,6,0,0,136,136,136,152,104,5,5,
80
+  5,6,0,0,136,136,136,80,32,5,5,5,6,0,0,136,
81
+  136,168,168,80,5,5,5,6,0,0,136,80,32,80,136,5,
82
+  6,6,6,0,255,136,136,136,120,8,112,5,5,5,6,0,
83
+  0,248,16,32,64,248,3,7,7,6,1,0,32,64,64,128,
84
+  64,64,32,1,7,7,6,2,0,128,128,128,128,128,128,128,
85
+  3,7,7,6,1,0,128,64,64,32,64,64,128,5,2,2,
86
+  6,0,2,104,144,0,0,0,6,0,0,0,0,0,6,0,
87
+  0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
88
+  6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
89
+  0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
90
+  0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
91
+  6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
92
+  0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
93
+  0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
94
+  6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
95
+  0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
96
+  0,0,0,0,6,0,0,0,0,0,6,0,0,0,0,0,
97
+  6,0,0,0,0,0,6,0,0,0,0,0,6,0,0,0,
98
+  0,0,6,0,0,0,0,0,6,0,0,0,0,0,6,0,
99
+  0,1,7,7,6,2,0,128,0,128,128,128,128,128,5,7,
100
+  7,6,0,0,32,112,168,160,168,112,32,5,7,7,6,0,
101
+  0,48,64,64,224,64,80,168,5,5,5,6,0,0,136,112,
102
+  80,112,136,5,7,7,6,0,0,136,80,32,248,32,248,32,
103
+  1,7,7,6,2,0,128,128,128,0,128,128,128,5,8,8,
104
+  6,0,0,48,72,32,80,80,32,144,96,3,1,1,6,1,
105
+  7,160,5,7,7,6,0,0,248,136,184,184,184,136,248,5,
106
+  7,7,6,0,1,112,8,120,136,120,0,248,5,5,5,6,
107
+  0,1,40,80,160,80,40,5,3,3,6,0,1,248,8,8,
108
+  2,2,2,6,2,6,64,128,5,7,7,6,0,0,248,136,
109
+  168,136,152,168,248,5,1,1,6,0,6,248,4,4,4,6,
110
+  0,3,96,144,144,96,5,7,7,6,0,0,32,32,248,32,
111
+  32,0,248,4,5,5,6,0,3,96,144,32,64,240,3,5,
112
+  5,6,0,3,224,32,224,32,224,2,2,2,6,2,6,64,
113
+  128,5,8,8,6,0,255,136,136,136,136,152,232,128,128,5,
114
+  7,7,6,0,0,120,152,152,120,24,24,24,2,2,2,6,
115
+  2,2,192,192,2,2,2,6,2,255,64,128,3,5,5,6,
116
+  0,3,64,192,64,64,224,5,7,7,6,0,1,112,136,136,
117
+  136,112,0,248,5,5,5,6,0,1,160,80,40,80,160,5,
118
+  7,7,6,0,0,136,144,168,88,184,8,8,5,7,7,6,
119
+  0,0,136,144,184,72,152,32,56,5,8,8,6,0,0,192,
120
+  64,192,72,216,56,8,8,5,7,7,6,0,0,32,0,32,
121
+  64,128,136,112,5,8,8,6,0,0,64,32,0,112,136,248,
122
+  136,136,5,8,8,6,0,0,16,32,0,112,136,248,136,136,
123
+  5,8,8,6,0,0,32,80,0,112,136,248,136,136,5,8,
124
+  8,6,0,0,104,144,0,112,136,248,136,136,5,8,8,6,
125
+  0,0,80,0,112,136,136,248,136,136,5,8,8,6,0,0,
126
+  32,80,32,112,136,248,136,136,5,7,7,6,0,0,56,96,
127
+  160,184,224,160,184,5,8,8,6,0,255,112,136,128,128,136,
128
+  112,32,96,5,8,8,6,0,0,64,32,0,248,128,240,128,
129
+  248,5,8,8,6,0,0,8,16,0,248,128,240,128,248,5,
130
+  8,8,6,0,0,32,80,0,248,128,240,128,248,5,7,7,
131
+  6,0,0,80,0,248,128,240,128,248,3,8,8,6,1,0,
132
+  128,64,0,224,64,64,64,224,3,8,8,6,1,0,32,64,
133
+  0,224,64,64,64,224,3,8,8,6,1,0,64,160,0,224,
134
+  64,64,64,224,3,7,7,6,1,0,160,0,224,64,64,64,
135
+  224,5,7,7,6,0,0,112,72,72,232,72,72,112,5,8,
136
+  8,6,0,0,104,144,0,136,200,168,152,136,5,8,8,6,
137
+  0,0,64,32,112,136,136,136,136,112,5,8,8,6,0,0,
138
+  16,32,112,136,136,136,136,112,5,8,8,6,0,0,32,80,
139
+  0,112,136,136,136,112,5,8,8,6,0,0,104,144,0,112,
140
+  136,136,136,112,5,8,8,6,0,0,80,0,112,136,136,136,
141
+  136,112,5,5,5,6,0,1,136,80,32,80,136,5,8,8,
142
+  6,0,255,16,112,168,168,168,168,112,64,5,8,8,6,0,
143
+  0,64,32,136,136,136,136,136,112,5,8,8,6,0,0,16,
144
+  32,136,136,136,136,136,112,5,8,8,6,0,0,32,80,0,
145
+  136,136,136,136,112,5,8,8,6,0,0,80,0,136,136,136,
146
+  136,136,112,5,8,8,6,0,0,16,32,136,80,32,32,32,
147
+  32,5,9,9,6,0,255,192,64,112,72,72,112,64,64,224,
148
+  4,8,8,6,1,255,96,144,144,160,144,144,224,128,5,8,
149
+  8,6,0,0,64,32,0,112,8,120,136,120,5,8,8,6,
150
+  0,0,16,32,0,112,8,120,136,120,5,8,8,6,0,0,
151
+  32,80,0,112,8,120,136,120,5,8,8,6,0,0,104,144,
152
+  0,112,8,120,136,120,5,7,7,6,0,0,80,0,112,8,
153
+  120,136,120,5,8,8,6,0,0,32,80,32,112,8,120,136,
154
+  120,5,6,6,6,0,0,208,40,120,160,168,80,5,6,6,
155
+  6,0,255,112,128,136,112,32,96,5,8,8,6,0,0,64,
156
+  32,0,112,136,248,128,112,5,8,8,6,0,0,16,32,0,
157
+  112,136,248,128,112,5,8,8,6,0,0,32,80,0,112,136,
158
+  248,128,112,5,7,7,6,0,0,80,0,112,136,248,128,112,
159
+  3,8,8,6,1,0,128,64,0,64,192,64,64,224,3,8,
160
+  8,6,1,0,32,64,0,64,192,64,64,224,3,8,8,6,
161
+  1,0,64,160,0,64,192,64,64,224,3,7,7,6,1,0,
162
+  160,0,64,192,64,64,224,5,7,7,6,0,0,160,64,160,
163
+  16,120,136,112,5,8,8,6,0,0,104,144,0,176,200,136,
164
+  136,136,5,8,8,6,0,0,64,32,0,112,136,136,136,112,
165
+  5,8,8,6,0,0,16,32,0,112,136,136,136,112,5,8,
166
+  8,6,0,0,32,80,0,112,136,136,136,112,5,8,8,6,
167
+  0,0,104,144,0,112,136,136,136,112,5,7,7,6,0,0,
168
+  80,0,112,136,136,136,112,5,5,5,6,0,1,32,0,248,
169
+  0,32,5,7,7,6,0,255,16,112,168,168,168,112,64,5,
170
+  8,8,6,0,0,64,32,0,136,136,136,152,104,5,8,8,
171
+  6,0,0,16,32,0,136,136,136,152,104,5,8,8,6,0,
172
+  0,32,80,0,136,136,136,152,104,5,7,7,6,0,0,80,
173
+  0,136,136,136,152,104,5,9,9,6,0,255,16,32,0,136,
174
+  136,136,248,8,112,4,7,7,6,1,255,192,64,96,80,96,
175
+  64,224,5,8,8,6,0,255,80,0,136,136,136,120,8,112
176
+  };

+ 15
- 16
Marlin/dogm_lcd_implementation.h View File

@@ -30,19 +30,15 @@
30 30
 
31 31
 #include <U8glib.h>
32 32
 #include "DOGMbitmaps.h"
33
+
33 34
 #include "ultralcd.h"
34 35
 #include "ultralcd_st7920_u8glib_rrd.h"
35 36
 #include "Configuration.h"
36 37
 
37
-
38
-#include <utility/u8g.h>
39
-#include "dogm_font_data_6x9_marlin.h"       // Height of 'A' is only 6 pixel.
40 38
 #include "dogm_font_data_Marlin_symbols.h"   // The Marlin special symbols
41
-
42
-#define FONT_STATUSMENU_NAME u8g_font_6x9    // we don't have a small font for Cyrillic, Kana
43 39
 #define FONT_SPECIAL_NAME Marlin_symbols
44 40
 
45
-// save 3120 bytes of PROGMEM by commenting out the next #define
41
+// save 3120 bytes of PROGMEM by commenting out #define USE_BIG_EDIT_FONT
46 42
 // we don't have a big font for Cyrillic, Kana
47 43
 #if defined( MAPPER_C2C3 ) || defined( MAPPER_NON )
48 44
   #define USE_BIG_EDIT_FONT
@@ -50,8 +46,8 @@
50 46
 
51 47
 #ifndef SIMULATE_ROMFONT
52 48
   #if defined( DISPLAY_CHARSET_ISO10646_1 )
53
-    #include <utility/u8g.h> // System font.
54
-    #define FONT_MENU_NAME u8g_font_6x10
49
+    #include "dogm_font_data_ISO10646_1.h"
50
+    #define FONT_MENU_NAME ISO10646_1_5x7
55 51
   #elif defined( DISPLAY_CHARSET_ISO10646_5 )
56 52
     #include "dogm_font_data_ISO10646_5_Cyrillic.h"
57 53
     #define FONT_MENU_NAME ISO10646_5_Cyrillic_5x7
@@ -59,8 +55,8 @@
59 55
     #include "dogm_font_data_ISO10646_Kana.h"
60 56
     #define FONT_MENU_NAME ISO10646_Kana_5x7
61 57
   #else // fall-back
62
-    #include <utility/u8g.h> // system font
63
-    #define FONT_MENU_NAME u8g_font_6x10
58
+    #include "dogm_font_data_ISO10646_1.h"
59
+    #define FONT_MENU_NAME ISO10646_1_5x7
64 60
   #endif
65 61
 #else // SIMULATE_ROMFONT
66 62
   #if defined( DISPLAY_CHARSET_HD44780_JAPAN )
@@ -73,11 +69,13 @@
73 69
     #include "dogm_font_data_HD44780_C.h"
74 70
     #define FONT_MENU_NAME HD44780_C_5x7
75 71
   #else // fall-back
76
-    #include <utility/u8g.h> // system font
77
-    #define FONT_MENU_NAME u8g_font_6x10
72
+    #include "dogm_font_data_ISO10646_1.h"
73
+    #define FONT_MENU_NAME ISO10646_1_5x7
78 74
   #endif
79 75
 #endif // SIMULATE_ROMFONT
80 76
 
77
+#define FONT_STATUSMENU_NAME FONT_MENU_NAME
78
+
81 79
 #define FONT_STATUSMENU 1
82 80
 #define FONT_SPECIAL 2
83 81
 #define FONT_MENU_EDIT 3
@@ -112,7 +110,7 @@
112 110
 #define LCD_STR_THERMOMETER "\x08"
113 111
 #define LCD_STR_DEGREE      "\x09"
114 112
 
115
-#define LCD_STR_SPECIAL_MAX LCD_STR_DEGREE
113
+#define LCD_STR_SPECIAL_MAX '\x09'
116 114
 // Maximum here is 0x1f because 0x20 is ' ' (space) and the normal charsets begin.
117 115
 // Better stay below 0x10 because DISPLAY_CHARSET_HD44780_WESTERN begins here.
118 116
 
@@ -148,7 +146,7 @@ static void lcd_setFont(char font_nr) {
148 146
 }
149 147
 
150 148
 char lcd_print(char c) {
151
-  if ((c > 0) && (c < ' ')) {
149
+  if ((c > 0) && (c <= LCD_STR_SPECIAL_MAX)) {
152 150
     u8g.setFont(FONT_SPECIAL_NAME);
153 151
     u8g.print(c);
154 152
     lcd_setFont(currentfont);
@@ -228,11 +226,12 @@ static void lcd_implementation_clear() { } // Automatically cleared by Picture L
228 226
 static void _draw_heater_status(int x, int heater) {
229 227
   bool isBed = heater < 0;
230 228
   int y = 17 + (isBed ? 1 : 0);
229
+
231 230
   lcd_setFont(FONT_STATUSMENU);
232
-  u8g.setPrintPos(x,6);
231
+  u8g.setPrintPos(x,7);
233 232
   lcd_print(itostr3(int((heater >= 0 ? degTargetHotend(heater) : degTargetBed()) + 0.5)));
234 233
   lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
235
-  u8g.setPrintPos(x,27);
234
+  u8g.setPrintPos(x,28);
236 235
   lcd_print(itostr3(int(heater >= 0 ? degHotend(heater) : degBed()) + 0.5));
237 236
   lcd_printPGM(PSTR(LCD_STR_DEGREE " "));
238 237
   if (!isHeatingHotend(0)) {

+ 1
- 0
Marlin/example_configurations/Hephestos/Configuration.h View File

@@ -453,6 +453,7 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
453 453
 
454 454
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
455 455
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
456
+  #define Z_RAISE_AFTER_PROBING 15    //How much the extruder will be raised after the last probing point.
456 457
 
457 458
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
458 459
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.

+ 1
- 0
Marlin/example_configurations/K8200/Configuration.h View File

@@ -458,6 +458,7 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
458 458
 
459 459
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
460 460
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
461
+  #define Z_RAISE_AFTER_PROBING 15    //How much the extruder will be raised after the last probing point.
461 462
 
462 463
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
463 464
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.

+ 1
- 0
Marlin/example_configurations/SCARA/Configuration.h View File

@@ -482,6 +482,7 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
482 482
 
483 483
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
484 484
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
485
+  #define Z_RAISE_AFTER_PROBING 15    //How much the extruder will be raised after the last probing point.
485 486
 
486 487
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
487 488
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.

+ 1
- 0
Marlin/example_configurations/WITBOX/Configuration.h View File

@@ -452,6 +452,7 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
452 452
 
453 453
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
454 454
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
455
+  #define Z_RAISE_AFTER_PROBING 15    //How much the extruder will be raised after the last probing point.
455 456
 
456 457
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
457 458
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.

Marlin/example_configurations/delta/Configuration.h → Marlin/example_configurations/delta/generic/Configuration.h View File

@@ -110,6 +110,9 @@ Here are some standard links for getting your machine calibrated:
110 110
 // Effective horizontal distance bridged by diagonal push rods.
111 111
 #define DELTA_RADIUS (DELTA_SMOOTH_ROD_OFFSET-DELTA_EFFECTOR_OFFSET-DELTA_CARRIAGE_OFFSET)
112 112
 
113
+// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
114
+#define DELTA_PRINTABLE_RADIUS 90
115
+
113 116
 
114 117
 //===========================================================================
115 118
 //============================= Thermal Settings ============================
@@ -134,7 +137,7 @@ Here are some standard links for getting your machine calibrated:
134 137
 // 10 is 100k RS thermistor 198-961 (4.7k pullup)
135 138
 // 11 is 100k beta 3950 1% thermistor (4.7k pullup)
136 139
 // 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
137
-// 13 is 100k Hisens 3950  1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE" 
140
+// 13 is 100k Hisens 3950  1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
138 141
 // 20 is the PT100 circuit found in the Ultimainboard V2.x
139 142
 // 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
140 143
 //
@@ -148,7 +151,7 @@ Here are some standard links for getting your machine calibrated:
148 151
 // 1010 is Pt1000 with 1k pullup (non standard)
149 152
 // 147 is Pt100 with 4k7 pullup
150 153
 // 110 is Pt100 with 1k pullup (non standard)
151
-// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below. 
154
+// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below.
152 155
 //     Use it for Testing or Development purposes. NEVER for production machine.
153 156
 //     #define DUMMY_THERMISTOR_998_VALUE 25
154 157
 //     #define DUMMY_THERMISTOR_999_VALUE 100
@@ -293,15 +296,15 @@ The issue: If a thermistor come off, it will read a lower temperature than actua
293 296
 The system will turn the heater on forever, burning up the filament and anything
294 297
 else around.
295 298
 
296
-After the temperature reaches the target for the first time, this feature will 
297
-start measuring for how long the current temperature stays below the target 
299
+After the temperature reaches the target for the first time, this feature will
300
+start measuring for how long the current temperature stays below the target
298 301
 minus _HYSTERESIS (set_temperature - THERMAL_RUNAWAY_PROTECTION_HYSTERESIS).
299 302
 
300 303
 If it stays longer than _PERIOD, it means the thermistor temperature
301 304
 cannot catch up with the target, so something *may be* wrong. Then, to be on the
302 305
 safe side, the system will he halt.
303 306
 
304
-Bear in mind the count down will just start AFTER the first time the 
307
+Bear in mind the count down will just start AFTER the first time the
305 308
 thermistor temperature is over the target, so you will have no problem if
306 309
 your extruder heater takes 2 minutes to hit the target on heating.
307 310
 
@@ -361,8 +364,7 @@ const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
361 364
 const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
362 365
 const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
363 366
 //#define DISABLE_MAX_ENDSTOPS
364
-// Deltas never have min endstops
365
-#define DISABLE_MIN_ENDSTOPS
367
+#define DISABLE_MIN_ENDSTOPS // Deltas only use min endstops for probing
366 368
 
367 369
 // For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
368 370
 #define X_ENABLE_ON 0
@@ -413,8 +415,80 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
413 415
 //============================= Bed Auto Leveling ===========================
414 416
 //===========================================================================
415 417
 
416
-//Bed Auto Leveling is still not compatible with Delta Kinematics
418
+//#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line)
419
+// Z-Probe Repeatability test is not supported in Deltas yet.
420
+
421
+#ifdef ENABLE_AUTO_BED_LEVELING
422
+
423
+  // Deltas only support grid mode
424
+  #define AUTO_BED_LEVELING_GRID
425
+
426
+  #define DELTA_PROBABLE_RADIUS (DELTA_PRINTABLE_RADIUS - 10)
427
+  #define LEFT_PROBE_BED_POSITION -DELTA_PROBABLE_RADIUS
428
+  #define RIGHT_PROBE_BED_POSITION DELTA_PROBABLE_RADIUS
429
+  #define BACK_PROBE_BED_POSITION DELTA_PROBABLE_RADIUS
430
+  #define FRONT_PROBE_BED_POSITION -DELTA_PROBABLE_RADIUS
431
+
432
+  // Non-linear bed leveling will be used.
433
+  // Compensate by interpolating between the nearest four Z probe values for each point.
434
+  // Useful for deltas where the print surface may appear like a bowl or dome shape.
435
+  // Works best with ACCURATE_BED_LEVELING_POINTS 5 or higher.
436
+  #define AUTO_BED_LEVELING_GRID_POINTS 9
437
+
438
+  // Offsets to the probe relative to the extruder tip (Hotend - Probe)
439
+  // X and Y offsets must be integers
440
+  #define X_PROBE_OFFSET_FROM_EXTRUDER 0     // -left  +right
441
+  #define Y_PROBE_OFFSET_FROM_EXTRUDER -10   // -front +behind
442
+  #define Z_PROBE_OFFSET_FROM_EXTRUDER -3.5  // -below (always!)
443
+
444
+  #define Z_RAISE_BEFORE_HOMING 4       // (in mm) Raise Z before homing (G28) for Probe Clearance.
445
+                                        // Be sure you have this distance over your Z_MAX_POS in case
446
+
447
+  #define XY_TRAVEL_SPEED 4000         // X and Y axis travel speed between probes, in mm/min
448
+
449
+  #define Z_RAISE_BEFORE_PROBING 15   //How much the extruder will be raised before traveling to the first probing point.
450
+  #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
451
+  #define Z_RAISE_AFTER_PROBING 50    //How much the extruder will be raised after the last probing point.
452
+  
453
+  // Allen key retractable z-probe as seen on many Kossel delta printers - http://reprap.org/wiki/Kossel#Automatic_bed_leveling_probe
454
+  // Deploys by touching z-axis belt. Retracts by pushing the probe down. Uses Z_MIN_PIN.
455
+  //#define Z_PROBE_ALLEN_KEY
456
+  #ifdef Z_PROBE_ALLEN_KEY
457
+    #define Z_PROBE_ALLEN_KEY_DEPLOY_X 30
458
+    #define Z_PROBE_ALLEN_KEY_DEPLOY_Y DELTA_PRINTABLE_RADIUS
459
+    #define Z_PROBE_ALLEN_KEY_DEPLOY_Z 100
460
+
461
+    #define Z_PROBE_ALLEN_KEY_RETRACT_X     -64
462
+    #define Z_PROBE_ALLEN_KEY_RETRACT_Y     56
463
+    #define Z_PROBE_ALLEN_KEY_RETRACT_Z     23
464
+    #define Z_PROBE_ALLEN_KEY_RETRACT_DEPTH 20
465
+  #endif
466
+
467
+  //If defined, the Probe servo will be turned on only during movement and then turned off to avoid jerk
468
+  //The value is the delay to turn the servo off after powered on - depends on the servo speed; 300ms is good value, but you can try lower it.
469
+  // You MUST HAVE the SERVO_ENDSTOPS defined to use here a value higher than zero otherwise your code will not compile.
417 470
 
471
+//  #define PROBE_SERVO_DEACTIVATION_DELAY 300
472
+
473
+
474
+//If you have enabled the Bed Auto Leveling and are using the same Z Probe for Z Homing,
475
+//it is highly recommended you let this Z_SAFE_HOMING enabled!!!
476
+
477
+  #define Z_SAFE_HOMING   // This feature is meant to avoid Z homing with probe outside the bed area.
478
+                          // When defined, it will:
479
+                          // - Allow Z homing only after X and Y homing AND stepper drivers still enabled
480
+                          // - If stepper drivers timeout, it will need X and Y homing again before Z homing
481
+                          // - Position the probe in a defined XY point before Z Homing when homing all axis (G28)
482
+                          // - Block Z homing only when the probe is outside bed area.
483
+
484
+  #ifdef Z_SAFE_HOMING
485
+
486
+    #define Z_SAFE_HOMING_X_POINT (X_MAX_LENGTH/2)    // X point for Z homing when homing all axis (G28)
487
+    #define Z_SAFE_HOMING_Y_POINT (Y_MAX_LENGTH/2)    // Y point for Z homing when homing all axis (G28)
488
+
489
+  #endif
490
+
491
+#endif // ENABLE_AUTO_BED_LEVELING
418 492
 
419 493
 
420 494
 
@@ -493,13 +567,16 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
493 567
 //==============================LCD and SD support=============================
494 568
 
495 569
 // Define your display language below. Replace (en) with your language code and uncomment.
496
-// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu
570
+// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
497 571
 // See also language.h
498
-//#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)
572
+#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)
499 573
 
500
-// Character based displays can have different extended charsets.
501
-#define DISPLAY_CHARSET_HD44780_JAPAN     // "ääööüüß23°"
502
-//#define DISPLAY_CHARSET_HD44780_WESTERN // "ÄäÖöÜüß²³°" if you see a '~' instead of a 'arrow_right' at the right of submenuitems - this is the right one.
574
+// Chose ONE of the next three charsets. This has to match your hardware. In case of a full graphic display this information is not important.
575
+// To find out what type you have - compile with (test) - upload - click to get the menu. You'll see two typical lines from the upper half of the charset.
576
+// See also documentation/LCDLanguageFont.md
577
+  #define DISPLAY_CHARSET_HD44780_JAPAN        // this is the most common hardware
578
+  //#define DISPLAY_CHARSET_HD44780_WESTERN
579
+  //#define DISPLAY_CHARSET_HD44780_CYRILLIC
503 580
 
504 581
 //#define ULTRA_LCD  //general LCD support, also 16x2
505 582
 //#define DOGLCD  // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
@@ -571,13 +648,13 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
571 648
  #define ULTRA_LCD  //general LCD support, also 16x2
572 649
  #define DOGLCD  // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
573 650
  #define ULTIMAKERCONTROLLER //as available from the Ultimaker online store.
574
- 
651
+
575 652
   #ifdef miniVIKI
576 653
    #define DEFAULT_LCD_CONTRAST 95
577 654
   #else
578 655
    #define DEFAULT_LCD_CONTRAST 40
579 656
   #endif
580
-  
657
+
581 658
  #define ENCODER_PULSES_PER_STEP 4
582 659
  #define ENCODER_STEPS_PER_MENU_ITEM 1
583 660
 #endif
@@ -668,7 +745,7 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
668 745
 // Shift register panels
669 746
 // ---------------------
670 747
 // 2 wire Non-latching LCD SR from:
671
-// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection 
748
+// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection
672 749
 
673 750
 //#define SAV_3DLCD
674 751
 #ifdef SAV_3DLCD
@@ -766,9 +843,9 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
766 843
  * Support for a filament diameter sensor
767 844
  * Also allows adjustment of diameter at print time (vs  at slicing)
768 845
  * Single extruder only at this point (extruder 0)
769
- * 
846
+ *
770 847
  * Motherboards
771
- * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector 
848
+ * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
772 849
  * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
773 850
  * 301 - Rambo  - uses Analog input 3
774 851
  * Note may require analog pins to be defined for different motherboards

Marlin/example_configurations/delta/Configuration_adv.h → Marlin/example_configurations/delta/generic/Configuration_adv.h View File

@@ -456,9 +456,27 @@ const unsigned int dropsegments=5; //everything with less than this number of st
456 456
 //===========================================================================
457 457
 
458 458
 #if defined (ENABLE_AUTO_BED_LEVELING) && defined (DELTA)
459
-  #error "Bed Auto Leveling is still not compatible with Delta Kinematics."
459
+
460
+  #if not defined(AUTO_BED_LEVELING_GRID)
461
+    #error "Only Grid Bed Auto Leveling is supported on Deltas."
462
+  #endif
463
+  
464
+  #if defined(Z_PROBE_SLED)
465
+    #error "You cannot use Z_PROBE_SLED together with DELTA."
466
+  #endif
467
+
468
+  #if defined(Z_PROBE_REPEATABILITY_TEST)
469
+    #error "Z-probe repeatability test is not supported on Deltas yet."
470
+  #endif
471
+
460 472
 #endif  
461 473
 
474
+#if defined(Z_PROBE_ALLEN_KEY)
475
+  #if !defined(AUTO_BED_LEVELING_GRID) || !defined(DELTA)
476
+    #error "Invalid use of Z_PROBE_ALLEN_KEY."
477
+  #endif
478
+#endif
479
+
462 480
 #if EXTRUDERS > 1 && defined TEMP_SENSOR_1_AS_REDUNDANT
463 481
   #error "You cannot use TEMP_SENSOR_1_AS_REDUNDANT if EXTRUDERS > 1"
464 482
 #endif

+ 880
- 0
Marlin/example_configurations/delta/kossel_mini/Configuration.h View File

@@ -0,0 +1,880 @@
1
+#ifndef CONFIGURATION_H
2
+#define CONFIGURATION_H
3
+
4
+#include "boards.h"
5
+
6
+//===========================================================================
7
+//============================= Getting Started =============================
8
+//===========================================================================
9
+/*
10
+Here are some standard links for getting your machine calibrated:
11
+ * http://reprap.org/wiki/Calibration
12
+ * http://youtu.be/wAL9d7FgInk
13
+ * http://calculator.josefprusa.cz
14
+ * http://reprap.org/wiki/Triffid_Hunter%27s_Calibration_Guide
15
+ * http://www.thingiverse.com/thing:5573
16
+ * https://sites.google.com/site/repraplogphase/calibration-of-your-reprap
17
+ * http://www.thingiverse.com/thing:298812
18
+*/
19
+
20
+// This configuration file contains the basic settings.
21
+// Advanced settings can be found in Configuration_adv.h
22
+// BASIC SETTINGS: select your board type, temperature sensor type, axis scaling, and endstop configuration
23
+
24
+//===========================================================================
25
+//============================= DELTA Printer ===============================
26
+//===========================================================================
27
+// For a Delta printer replace the configuration files with the files in the
28
+// example_configurations/delta directory.
29
+//
30
+
31
+//===========================================================================
32
+//============================= SCARA Printer ===============================
33
+//===========================================================================
34
+// For a Delta printer replace the configuration files with the files in the
35
+// example_configurations/SCARA directory.
36
+//
37
+
38
+// User-specified version info of this build to display in [Pronterface, etc] terminal window during
39
+// startup. Implementation of an idea by Prof Braino to inform user that any changes made to this
40
+// build by the user have been successfully uploaded into firmware.
41
+#define STRING_VERSION "1.0.2"
42
+#define STRING_URL "reprap.org"
43
+#define STRING_VERSION_CONFIG_H __DATE__ " " __TIME__ // build date and time
44
+#define STRING_CONFIG_H_AUTHOR "(none, default config)" // Who made the changes.
45
+#define STRING_SPLASH_LINE1 "v" STRING_VERSION // will be shown during bootup in line 1
46
+//#define STRING_SPLASH_LINE2 STRING_VERSION_CONFIG_H // will be shown during bootup in line2
47
+
48
+// SERIAL_PORT selects which serial port should be used for communication with the host.
49
+// This allows the connection of wireless adapters (for instance) to non-default port pins.
50
+// Serial port 0 is still used by the Arduino bootloader regardless of this setting.
51
+#define SERIAL_PORT 0
52
+
53
+// This determines the communication speed of the printer
54
+#define BAUDRATE 250000
55
+
56
+// This enables the serial port associated to the Bluetooth interface
57
+//#define BTENABLED              // Enable BT interface on AT90USB devices
58
+
59
+// The following define selects which electronics board you have.
60
+// Please choose the name from boards.h that matches your setup
61
+#ifndef MOTHERBOARD
62
+  #define MOTHERBOARD BOARD_RAMPS_13_EFB
63
+#endif
64
+
65
+// Define this to set a custom name for your generic Mendel,
66
+#define CUSTOM_MENDEL_NAME "Mini Kossel"
67
+
68
+// Define this to set a unique identifier for this printer, (Used by some programs to differentiate between machines)
69
+// You can use an online service to generate a random UUID. (eg http://www.uuidgenerator.net/version4)
70
+// #define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
71
+
72
+// This defines the number of extruders
73
+#define EXTRUDERS 1
74
+
75
+//// The following define selects which power supply you have. Please choose the one that matches your setup
76
+// 1 = ATX
77
+// 2 = X-Box 360 203Watts (the blue wire connected to PS_ON and the red wire to VCC)
78
+
79
+#define POWER_SUPPLY 1
80
+
81
+// Define this to have the electronics keep the power supply off on startup. If you don't know what this is leave it.
82
+// #define PS_DEFAULT_OFF
83
+
84
+
85
+//===========================================================================
86
+//============================== Delta Settings =============================
87
+//===========================================================================
88
+// Enable DELTA kinematics and most of the default configuration for Deltas
89
+#define DELTA
90
+
91
+// Make delta curves from many straight lines (linear interpolation).
92
+// This is a trade-off between visible corners (not enough segments)
93
+// and processor overload (too many expensive sqrt calls).
94
+#define DELTA_SEGMENTS_PER_SECOND 200
95
+
96
+// NOTE NB all values for DELTA_* values MUST be floating point, so always have a decimal point in them
97
+
98
+// Center-to-center distance of the holes in the diagonal push rods.
99
+#define DELTA_DIAGONAL_ROD 215.0 // mm
100
+
101
+// Horizontal offset from middle of printer to smooth rod center.
102
+#define DELTA_SMOOTH_ROD_OFFSET 145.0 // mm
103
+
104
+// Horizontal offset of the universal joints on the end effector.
105
+#define DELTA_EFFECTOR_OFFSET 19.9 // mm
106
+
107
+// Horizontal offset of the universal joints on the carriages.
108
+#define DELTA_CARRIAGE_OFFSET 19.5 // mm
109
+
110
+
111
+// Horizontal distance bridged by diagonal push rods when effector is centered.
112
+#define DELTA_RADIUS (DELTA_SMOOTH_ROD_OFFSET-DELTA_EFFECTOR_OFFSET-DELTA_CARRIAGE_OFFSET)
113
+
114
+// Print surface diameter/2 minus unreachable space (avoid collisions with vertical towers).
115
+#define DELTA_PRINTABLE_RADIUS 90
116
+
117
+
118
+//===========================================================================
119
+//============================= Thermal Settings ============================
120
+//===========================================================================
121
+//
122
+//--NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
123
+//
124
+//// Temperature sensor settings:
125
+// -2 is thermocouple with MAX6675 (only for sensor 0)
126
+// -1 is thermocouple with AD595
127
+// 0 is not used
128
+// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
129
+// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
130
+// 3 is Mendel-parts thermistor (4.7k pullup)
131
+// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
132
+// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
133
+// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
134
+// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
135
+// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
136
+// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
137
+// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
138
+// 10 is 100k RS thermistor 198-961 (4.7k pullup)
139
+// 11 is 100k beta 3950 1% thermistor (4.7k pullup)
140
+// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
141
+// 13 is 100k Hisens 3950  1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
142
+// 20 is the PT100 circuit found in the Ultimainboard V2.x
143
+// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
144
+//
145
+//    1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k
146
+//                          (but gives greater accuracy and more stable PID)
147
+// 51 is 100k thermistor - EPCOS (1k pullup)
148
+// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
149
+// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
150
+//
151
+// 1047 is Pt1000 with 4k7 pullup
152
+// 1010 is Pt1000 with 1k pullup (non standard)
153
+// 147 is Pt100 with 4k7 pullup
154
+// 110 is Pt100 with 1k pullup (non standard)
155
+// 998 and 999 are Dummy Tables. They will ALWAYS read 25°C or the temperature defined below.
156
+//     Use it for Testing or Development purposes. NEVER for production machine.
157
+//     #define DUMMY_THERMISTOR_998_VALUE 25
158
+//     #define DUMMY_THERMISTOR_999_VALUE 100
159
+
160
+#define TEMP_SENSOR_0 7
161
+#define TEMP_SENSOR_1 0
162
+#define TEMP_SENSOR_2 0
163
+#define TEMP_SENSOR_3 0
164
+#define TEMP_SENSOR_BED 11
165
+
166
+// This makes temp sensor 1 a redundant sensor for sensor 0. If the temperatures difference between these sensors is to high the print will be aborted.
167
+//#define TEMP_SENSOR_1_AS_REDUNDANT
168
+#define MAX_REDUNDANT_TEMP_SENSOR_DIFF 5
169
+
170
+// Actual temperature must be close to target for this long before M109 returns success
171
+#define TEMP_RESIDENCY_TIME 10  // (seconds)
172
+#define TEMP_HYSTERESIS 3       // (degC) range of +/- temperatures considered "close" to the target one
173
+#define TEMP_WINDOW     1       // (degC) Window around target to start the residency timer x degC early.
174
+
175
+// The minimal temperature defines the temperature below which the heater will not be enabled It is used
176
+// to check that the wiring to the thermistor is not broken.
177
+// Otherwise this would lead to the heater being powered on all the time.
178
+#define HEATER_0_MINTEMP 5
179
+#define HEATER_1_MINTEMP 5
180
+#define HEATER_2_MINTEMP 5
181
+#define HEATER_3_MINTEMP 5
182
+#define BED_MINTEMP 5
183
+
184
+// When temperature exceeds max temp, your heater will be switched off.
185
+// This feature exists to protect your hotend from overheating accidentally, but *NOT* from thermistor short/failure!
186
+// You should use MINTEMP for thermistor short/failure protection.
187
+#define HEATER_0_MAXTEMP 275
188
+#define HEATER_1_MAXTEMP 275
189
+#define HEATER_2_MAXTEMP 275
190
+#define HEATER_3_MAXTEMP 275
191
+#define BED_MAXTEMP 150
192
+
193
+// If your bed has low resistance e.g. .6 ohm and throws the fuse you can duty cycle it to reduce the
194
+// average current. The value should be an integer and the heat bed will be turned on for 1 interval of
195
+// HEATER_BED_DUTY_CYCLE_DIVIDER intervals.
196
+//#define HEATER_BED_DUTY_CYCLE_DIVIDER 4
197
+
198
+// If you want the M105 heater power reported in watts, define the BED_WATTS, and (shared for all extruders) EXTRUDER_WATTS
199
+//#define EXTRUDER_WATTS (12.0*12.0/6.7) //  P=I^2/R
200
+//#define BED_WATTS (12.0*12.0/1.1)      // P=I^2/R
201
+
202
+//===========================================================================
203
+//============================= PID Settings ================================
204
+//===========================================================================
205
+// PID Tuning Guide here: http://reprap.org/wiki/PID_Tuning
206
+
207
+// Comment the following line to disable PID and enable bang-bang.
208
+#define PIDTEMP
209
+#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
210
+#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
211
+#ifdef PIDTEMP
212
+  //#define PID_DEBUG // Sends debug data to the serial port.
213
+  //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
214
+  //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
215
+  //#define PID_PARAMS_PER_EXTRUDER // Uses separate PID parameters for each extruder (useful for mismatched extruders)
216
+                                    // Set/get with gcode: M301 E[extruder number, 0-2]
217
+  #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
218
+                                  // is more then PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
219
+  #define PID_INTEGRAL_DRIVE_MAX PID_MAX  //limit for the integral term
220
+  #define K1 0.95 //smoothing factor within the PID
221
+  #define PID_dT ((OVERSAMPLENR * 10.0)/(F_CPU / 64.0 / 256.0)) //sampling period of the temperature routine
222
+
223
+// If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
224
+// Ultimaker
225
+    #define  DEFAULT_Kp 22.2
226
+    #define  DEFAULT_Ki 1.08
227
+    #define  DEFAULT_Kd 114
228
+
229
+// MakerGear
230
+//    #define  DEFAULT_Kp 7.0
231
+//    #define  DEFAULT_Ki 0.1
232
+//    #define  DEFAULT_Kd 12
233
+
234
+// Mendel Parts V9 on 12V
235
+//    #define  DEFAULT_Kp 63.0
236
+//    #define  DEFAULT_Ki 2.25
237
+//    #define  DEFAULT_Kd 440
238
+#endif // PIDTEMP
239
+
240
+//===========================================================================
241
+//============================= PID > Bed Temperature Control ===============
242
+//===========================================================================
243
+// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
244
+//
245
+// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder.
246
+// If your PID_dT above is the default, and correct for your hardware/configuration, that means 7.689Hz,
247
+// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating.
248
+// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater.
249
+// If your configuration is significantly different than this and you don't understand the issues involved, you probably
250
+// shouldn't use bed PID until someone else verifies your hardware works.
251
+// If this is enabled, find your own PID constants below.
252
+//#define PIDTEMPBED
253
+//
254
+//#define BED_LIMIT_SWITCHING
255
+
256
+// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option.
257
+// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis)
258
+// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did,
259
+// so you shouldn't use it unless you are OK with PWM on your bed.  (see the comment on enabling PIDTEMPBED)
260
+#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
261
+
262
+#ifdef PIDTEMPBED
263
+//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
264
+//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
265
+    #define  DEFAULT_bedKp 10.00
266
+    #define  DEFAULT_bedKi .023
267
+    #define  DEFAULT_bedKd 305.4
268
+
269
+//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
270
+//from pidautotune
271
+//    #define  DEFAULT_bedKp 97.1
272
+//    #define  DEFAULT_bedKi 1.41
273
+//    #define  DEFAULT_bedKd 1675.16
274
+
275
+// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
276
+#endif // PIDTEMPBED
277
+
278
+
279
+//this prevents dangerous Extruder moves, i.e. if the temperature is under the limit
280
+//can be software-disabled for whatever purposes by
281
+#define PREVENT_DANGEROUS_EXTRUDE
282
+//if PREVENT_DANGEROUS_EXTRUDE is on, you can still disable (uncomment) very long bits of extrusion separately.
283
+#define PREVENT_LENGTHY_EXTRUDE
284
+
285
+#define EXTRUDE_MINTEMP 170
286
+#define EXTRUDE_MAXLENGTH (X_MAX_LENGTH+Y_MAX_LENGTH) //prevent extrusion of very large distances.
287
+
288
+//===========================================================================
289
+//============================= Thermal Runaway Protection ==================
290
+//===========================================================================
291
+/*
292
+This is a feature to protect your printer from burn up in flames if it has
293
+a thermistor coming off place (this happened to a friend of mine recently and
294
+motivated me writing this feature).
295
+
296
+The issue: If a thermistor come off, it will read a lower temperature than actual.
297
+The system will turn the heater on forever, burning up the filament and anything
298
+else around.
299
+
300
+After the temperature reaches the target for the first time, this feature will
301
+start measuring for how long the current temperature stays below the target
302
+minus _HYSTERESIS (set_temperature - THERMAL_RUNAWAY_PROTECTION_HYSTERESIS).
303
+
304
+If it stays longer than _PERIOD, it means the thermistor temperature
305
+cannot catch up with the target, so something *may be* wrong. Then, to be on the
306
+safe side, the system will he halt.
307
+
308
+Bear in mind the count down will just start AFTER the first time the
309
+thermistor temperature is over the target, so you will have no problem if
310
+your extruder heater takes 2 minutes to hit the target on heating.
311
+
312
+*/
313
+// If you want to enable this feature for all your extruder heaters,
314
+// uncomment the 2 defines below:
315
+
316
+// Parameters for all extruder heaters
317
+//#define THERMAL_RUNAWAY_PROTECTION_PERIOD 40 //in seconds
318
+//#define THERMAL_RUNAWAY_PROTECTION_HYSTERESIS 4 // in degree Celsius
319
+
320
+// If you want to enable this feature for your bed heater,
321
+// uncomment the 2 defines below:
322
+
323
+// Parameters for the bed heater
324
+//#define THERMAL_RUNAWAY_PROTECTION_BED_PERIOD 20 //in seconds
325
+//#define THERMAL_RUNAWAY_PROTECTION_BED_HYSTERESIS 2 // in degree Celsius
326
+
327
+
328
+//===========================================================================
329
+//============================= Mechanical Settings =========================
330
+//===========================================================================
331
+
332
+// Uncomment this option to enable CoreXY kinematics
333
+// #define COREXY
334
+
335
+// Enable this option for Toshiba steppers
336
+// #define CONFIG_STEPPERS_TOSHIBA
337
+
338
+// coarse Endstop Settings
339
+#define ENDSTOPPULLUPS // Comment this out (using // at the start of the line) to disable the endstop pullup resistors
340
+
341
+#ifndef ENDSTOPPULLUPS
342
+  // fine endstop settings: Individual pullups. will be ignored if ENDSTOPPULLUPS is defined
343
+  // #define ENDSTOPPULLUP_XMAX
344
+  // #define ENDSTOPPULLUP_YMAX
345
+  // #define ENDSTOPPULLUP_ZMAX
346
+  // #define ENDSTOPPULLUP_XMIN
347
+  // #define ENDSTOPPULLUP_YMIN
348
+  // #define ENDSTOPPULLUP_ZMIN
349
+#endif
350
+
351
+#ifdef ENDSTOPPULLUPS
352
+  #define ENDSTOPPULLUP_XMAX
353
+  #define ENDSTOPPULLUP_YMAX
354
+  #define ENDSTOPPULLUP_ZMAX
355
+  #define ENDSTOPPULLUP_XMIN
356
+  #define ENDSTOPPULLUP_YMIN
357
+  #define ENDSTOPPULLUP_ZMIN
358
+#endif
359
+
360
+// The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins.
361
+const bool X_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
362
+const bool Y_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
363
+const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
364
+const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
365
+const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
366
+const bool Z_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop.
367
+//#define DISABLE_MAX_ENDSTOPS
368
+//#define DISABLE_MIN_ENDSTOPS // Deltas only use min endstops for probing
369
+
370
+// For Inverting Stepper Enable Pins (Active Low) use 0, Non Inverting (Active High) use 1
371
+#define X_ENABLE_ON 0
372
+#define Y_ENABLE_ON 0
373
+#define Z_ENABLE_ON 0
374
+#define E_ENABLE_ON 0 // For all extruders
375
+
376
+// Disables axis when it's not being used.
377
+#define DISABLE_X false
378
+#define DISABLE_Y false
379
+#define DISABLE_Z false
380
+#define DISABLE_E false // For all extruders
381
+#define DISABLE_INACTIVE_EXTRUDER true //disable only inactive extruders and keep active extruder enabled
382
+
383
+#define INVERT_X_DIR false // DELTA does not invert
384
+#define INVERT_Y_DIR false
385
+#define INVERT_Z_DIR false
386
+
387
+#define INVERT_E0_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false
388
+#define INVERT_E1_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false
389
+#define INVERT_E2_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false
390
+#define INVERT_E3_DIR false   // for direct drive extruder v9 set to true, for geared extruder set to false
391
+
392
+// ENDSTOP SETTINGS:
393
+// Sets direction of endstops when homing; 1=MAX, -1=MIN
394
+// deltas always home to max
395
+#define X_HOME_DIR 1
396
+#define Y_HOME_DIR 1
397
+#define Z_HOME_DIR 1
398
+
399
+#define min_software_endstops true // If true, axis won't move to coordinates less than HOME_POS.
400
+#define max_software_endstops true  // If true, axis won't move to coordinates greater than the defined lengths below.
401
+
402
+// Travel limits after homing (units are in mm)
403
+#define X_MAX_POS DELTA_PRINTABLE_RADIUS
404
+#define X_MIN_POS -DELTA_PRINTABLE_RADIUS
405
+#define Y_MAX_POS DELTA_PRINTABLE_RADIUS
406
+#define Y_MIN_POS -DELTA_PRINTABLE_RADIUS
407
+#define Z_MAX_POS MANUAL_Z_HOME_POS
408
+#define Z_MIN_POS 0
409
+
410
+#define X_MAX_LENGTH (X_MAX_POS - X_MIN_POS)
411
+#define Y_MAX_LENGTH (Y_MAX_POS - Y_MIN_POS)
412
+#define Z_MAX_LENGTH (Z_MAX_POS - Z_MIN_POS)
413
+
414
+
415
+//===========================================================================
416
+//============================= Bed Auto Leveling ===========================
417
+//===========================================================================
418
+
419
+#define ENABLE_AUTO_BED_LEVELING // Delete the comment to enable (remove // at the start of the line)
420
+// Z-Probe Repeatability test is not supported in Deltas yet.
421
+
422
+#ifdef ENABLE_AUTO_BED_LEVELING
423
+
424
+  // Deltas only support grid mode
425
+  #define AUTO_BED_LEVELING_GRID
426
+
427
+  #define DELTA_PROBABLE_RADIUS (DELTA_PRINTABLE_RADIUS - 10)
428
+  #define LEFT_PROBE_BED_POSITION -DELTA_PROBABLE_RADIUS
429
+  #define RIGHT_PROBE_BED_POSITION DELTA_PROBABLE_RADIUS
430
+  #define BACK_PROBE_BED_POSITION DELTA_PROBABLE_RADIUS
431
+  #define FRONT_PROBE_BED_POSITION -DELTA_PROBABLE_RADIUS
432
+
433
+  #define MIN_PROBE_EDGE 10 // The probe square sides can be no smaller than this
434
+
435
+  // Non-linear bed leveling will be used.
436
+  // Compensate by interpolating between the nearest four Z probe values for each point.
437
+  // Useful for deltas where the print surface may appear like a bowl or dome shape.
438
+  // Works best with ACCURATE_BED_LEVELING_POINTS 5 or higher.
439
+  #define AUTO_BED_LEVELING_GRID_POINTS 9
440
+
441
+  // Offsets to the probe relative to the extruder tip (Hotend - Probe)
442
+  // X and Y offsets must be integers
443
+  #define X_PROBE_OFFSET_FROM_EXTRUDER 0     // -left  +right
444
+  #define Y_PROBE_OFFSET_FROM_EXTRUDER -10   // -front +behind
445
+  #define Z_PROBE_OFFSET_FROM_EXTRUDER -3.5  // -below (always!)
446
+
447
+  #define Z_RAISE_BEFORE_HOMING 15      // (in mm) Raise Z before homing (G28) for Probe Clearance.
448
+                                        // Be sure you have this distance over your Z_MAX_POS in case
449
+
450
+  #define XY_TRAVEL_SPEED 4000         // X and Y axis travel speed between probes, in mm/min
451
+
452
+  #define Z_RAISE_BEFORE_PROBING 15   //How much the extruder will be raised before traveling to the first probing point.
453
+  #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
454
+  #define Z_RAISE_AFTER_PROBING 50    //How much the extruder will be raised after the last probing point.
455
+
456
+  // Allen key retractable z-probe as seen on many Kossel delta printers - http://reprap.org/wiki/Kossel#Automatic_bed_leveling_probe
457
+  // Deploys by touching z-axis belt. Retracts by pushing the probe down. Uses Z_MIN_PIN.
458
+  #define Z_PROBE_ALLEN_KEY
459
+  #ifdef Z_PROBE_ALLEN_KEY
460
+    #define Z_PROBE_ALLEN_KEY_DEPLOY_X 30
461
+    #define Z_PROBE_ALLEN_KEY_DEPLOY_Y DELTA_PRINTABLE_RADIUS
462
+    #define Z_PROBE_ALLEN_KEY_DEPLOY_Z 100
463
+
464
+    #define Z_PROBE_ALLEN_KEY_RETRACT_X     -64
465
+    #define Z_PROBE_ALLEN_KEY_RETRACT_Y     56
466
+    #define Z_PROBE_ALLEN_KEY_RETRACT_Z     23
467
+    #define Z_PROBE_ALLEN_KEY_RETRACT_DEPTH 20
468
+  #endif
469
+
470
+  //If defined, the Probe servo will be turned on only during movement and then turned off to avoid jerk
471
+  //The value is the delay to turn the servo off after powered on - depends on the servo speed; 300ms is good value, but you can try lower it.
472
+  // You MUST HAVE the SERVO_ENDSTOPS defined to use here a value higher than zero otherwise your code will not compile.
473
+
474
+//  #define PROBE_SERVO_DEACTIVATION_DELAY 300
475
+
476
+
477
+//If you have enabled the Bed Auto Leveling and are using the same Z Probe for Z Homing,
478
+//it is highly recommended you let this Z_SAFE_HOMING enabled!!!
479
+
480
+  #define Z_SAFE_HOMING   // This feature is meant to avoid Z homing with probe outside the bed area.
481
+                          // When defined, it will:
482
+                          // - Allow Z homing only after X and Y homing AND stepper drivers still enabled
483
+                          // - If stepper drivers timeout, it will need X and Y homing again before Z homing
484
+                          // - Position the probe in a defined XY point before Z Homing when homing all axis (G28)
485
+                          // - Block Z homing only when the probe is outside bed area.
486
+
487
+  #ifdef Z_SAFE_HOMING
488
+
489
+    #define Z_SAFE_HOMING_X_POINT (X_MAX_LENGTH/2)    // X point for Z homing when homing all axis (G28)
490
+    #define Z_SAFE_HOMING_Y_POINT (Y_MAX_LENGTH/2)    // Y point for Z homing when homing all axis (G28)
491
+
492
+  #endif
493
+
494
+#endif // ENABLE_AUTO_BED_LEVELING
495
+
496
+
497
+
498
+// The position of the homing switches
499
+#define MANUAL_HOME_POSITIONS  // If defined, MANUAL_*_HOME_POS below will be used
500
+#define BED_CENTER_AT_0_0  // If defined, the center of the bed is at (X=0, Y=0)
501
+
502
+//Manual homing switch locations:
503
+// For deltabots this means top and center of the Cartesian print volume.
504
+#define MANUAL_X_HOME_POS 0
505
+#define MANUAL_Y_HOME_POS 0
506
+#define MANUAL_Z_HOME_POS 250 // For delta: Distance between nozzle and print surface after homing.
507
+
508
+//// MOVEMENT SETTINGS
509
+#define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E
510
+
511
+// delta homing speeds must be the same on xyz
512
+#define HOMING_FEEDRATE {200*60, 200*60, 200*60, 0}  // set the homing speeds (mm/min)
513
+
514
+// default settings
515
+// delta speeds must be the same on xyz
516
+#define DEFAULT_AXIS_STEPS_PER_UNIT   {80, 80, 80, 760*1.1}  // default steps per unit for Kossel (GT2, 20 tooth)
517
+#define DEFAULT_MAX_FEEDRATE          {500, 500, 500, 25}    // (mm/sec)
518
+#define DEFAULT_MAX_ACCELERATION      {9000,9000,9000,10000}    // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for skeinforge 40+, for older versions raise them a lot.
519
+
520
+#define DEFAULT_ACCELERATION          3000    // X, Y, Z and E max acceleration in mm/s^2 for printing moves
521
+#define DEFAULT_RETRACT_ACCELERATION  3000   // X, Y, Z and E max acceleration in mm/s^2 for retracts
522
+#define DEFAULT_TRAVEL_ACCELERATION   3000    // X, Y, Z acceleration in mm/s^2 for travel (non printing) moves
523
+
524
+// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
525
+// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
526
+// For the other hotends it is their distance from the extruder 0 hotend.
527
+// #define EXTRUDER_OFFSET_X {0.0, 20.00} // (in mm) for each extruder, offset of the hotend on the X axis
528
+// #define EXTRUDER_OFFSET_Y {0.0, 5.00}  // (in mm) for each extruder, offset of the hotend on the Y axis
529
+
530
+// The speed change that does not require acceleration (i.e. the software might assume it can be done instantaneously)
531
+#define DEFAULT_XYJERK                20.0    // (mm/sec)
532
+#define DEFAULT_ZJERK                 20.0    // (mm/sec) Must be same as XY for delta
533
+#define DEFAULT_EJERK                 5.0    // (mm/sec)
534
+
535
+
536
+//=============================================================================
537
+//============================= Additional Features ===========================
538
+//=============================================================================
539
+
540
+// Custom M code points
541
+#define CUSTOM_M_CODES
542
+#ifdef CUSTOM_M_CODES
543
+  #define CUSTOM_M_CODE_SET_Z_PROBE_OFFSET 851
544
+  #define Z_PROBE_OFFSET_RANGE_MIN -15
545
+  #define Z_PROBE_OFFSET_RANGE_MAX -5
546
+#endif
547
+
548
+
549
+// EEPROM
550
+// The microcontroller can store settings in the EEPROM, e.g. max velocity...
551
+// M500 - stores parameters in EEPROM
552
+// M501 - reads parameters from EEPROM (if you need reset them after you changed them temporarily).
553
+// M502 - reverts to the default "factory settings".  You still need to store them in EEPROM afterwards if you want to.
554
+//define this to enable EEPROM support
555
+//#define EEPROM_SETTINGS
556
+//to disable EEPROM Serial responses and decrease program space by ~1700 byte: comment this out:
557
+// please keep turned on if you can.
558
+//#define EEPROM_CHITCHAT
559
+
560
+// Preheat Constants
561
+#define PLA_PREHEAT_HOTEND_TEMP 180
562
+#define PLA_PREHEAT_HPB_TEMP 70
563
+#define PLA_PREHEAT_FAN_SPEED 255   // Insert Value between 0 and 255
564
+
565
+#define ABS_PREHEAT_HOTEND_TEMP 240
566
+#define ABS_PREHEAT_HPB_TEMP 100
567
+#define ABS_PREHEAT_FAN_SPEED 255   // Insert Value between 0 and 255
568
+
569
+//==============================LCD and SD support=============================
570
+
571
+// Define your display language below. Replace (en) with your language code and uncomment.
572
+// en, pl, fr, de, es, ru, it, pt, pt-br, fi, an, nl, ca, eu, kana, kana_utf8, test
573
+// See also language.h
574
+#define LANGUAGE_INCLUDE GENERATE_LANGUAGE_INCLUDE(en)
575
+
576
+// Chose ONE of the next three charsets. This has to match your hardware. In case of a full graphic display this information is not important.
577
+// To find out what type you have - compile with (test) - upload - click to get the menu. You'll see two typical lines from the upper half of the charset.
578
+// See also documentation/LCDLanguageFont.md
579
+  #define DISPLAY_CHARSET_HD44780_JAPAN        // this is the most common hardware
580
+  //#define DISPLAY_CHARSET_HD44780_WESTERN
581
+  //#define DISPLAY_CHARSET_HD44780_CYRILLIC
582
+
583
+//#define ULTRA_LCD  //general LCD support, also 16x2
584
+//#define DOGLCD  // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
585
+//#define SDSUPPORT // Enable SD Card Support in Hardware Console
586
+//#define SDSLOW // Use slower SD transfer mode (not normally needed - uncomment if you're getting volume init error)
587
+//#define SD_CHECK_AND_RETRY // Use CRC checks and retries on the SD communication
588
+//#define ENCODER_PULSES_PER_STEP 1 // Increase if you have a high resolution encoder
589
+//#define ENCODER_STEPS_PER_MENU_ITEM 5 // Set according to ENCODER_PULSES_PER_STEP or your liking
590
+//#define ULTIMAKERCONTROLLER //as available from the Ultimaker online store.
591
+//#define ULTIPANEL  //the UltiPanel as on Thingiverse
592
+//#define LCD_FEEDBACK_FREQUENCY_HZ 1000	// this is the tone frequency the buzzer plays when on UI feedback. ie Screen Click
593
+//#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100 // the duration the buzzer plays the UI feedback sound. ie Screen Click
594
+
595
+// PanelOne from T3P3 (via RAMPS 1.4 AUX2/AUX3)
596
+// http://reprap.org/wiki/PanelOne
597
+#define PANEL_ONE
598
+
599
+// The MaKr3d Makr-Panel with graphic controller and SD support
600
+// http://reprap.org/wiki/MaKr3d_MaKrPanel
601
+//#define MAKRPANEL
602
+
603
+// The Panucatt Devices Viki 2.0 and mini Viki with Graphic LCD
604
+// http://panucatt.com
605
+// ==> REMEMBER TO INSTALL U8glib to your ARDUINO library folder: http://code.google.com/p/u8glib/wiki/u8glib
606
+//#define VIKI2
607
+//#define miniVIKI
608
+
609
+// The RepRapDiscount Smart Controller (white PCB)
610
+// http://reprap.org/wiki/RepRapDiscount_Smart_Controller
611
+//#define REPRAP_DISCOUNT_SMART_CONTROLLER
612
+
613
+// The GADGETS3D G3D LCD/SD Controller (blue PCB)
614
+// http://reprap.org/wiki/RAMPS_1.3/1.4_GADGETS3D_Shield_with_Panel
615
+//#define G3D_PANEL
616
+
617
+// The RepRapDiscount FULL GRAPHIC Smart Controller (quadratic white PCB)
618
+// http://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
619
+//
620
+// ==> REMEMBER TO INSTALL U8glib to your ARDUINO library folder: http://code.google.com/p/u8glib/wiki/u8glib
621
+//#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
622
+
623
+// The RepRapWorld REPRAPWORLD_KEYPAD v1.1
624
+// http://reprapworld.com/?products_details&products_id=202&cPath=1591_1626
625
+//#define REPRAPWORLD_KEYPAD
626
+//#define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0 // how much should be moved when a key is pressed, eg 10.0 means 10mm per click
627
+
628
+// The Elefu RA Board Control Panel
629
+// http://www.elefu.com/index.php?route=product/product&product_id=53
630
+// REMEMBER TO INSTALL LiquidCrystal_I2C.h in your ARDUINO library folder: https://github.com/kiyoshigawa/LiquidCrystal_I2C
631
+//#define RA_CONTROL_PANEL
632
+
633
+// Delta calibration menu
634
+// uncomment to add three points calibration menu option.
635
+// See http://minow.blogspot.com/index.html#4918805519571907051
636
+// If needed, adjust the X, Y, Z calibration coordinates
637
+// in ultralcd.cpp@lcd_delta_calibrate_menu()
638
+// #define DELTA_CALIBRATION_MENU
639
+
640
+//automatic expansion
641
+#if defined (MAKRPANEL)
642
+ #define DOGLCD
643
+ #define SDSUPPORT
644
+ #define ULTIPANEL
645
+ #define NEWPANEL
646
+ #define DEFAULT_LCD_CONTRAST 17
647
+#endif
648
+
649
+#if defined(miniVIKI) || defined(VIKI2)
650
+ #define ULTRA_LCD  //general LCD support, also 16x2
651
+ #define DOGLCD  // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
652
+ #define ULTIMAKERCONTROLLER //as available from the Ultimaker online store.
653
+
654
+  #ifdef miniVIKI
655
+   #define DEFAULT_LCD_CONTRAST 95
656
+  #else
657
+   #define DEFAULT_LCD_CONTRAST 40
658
+  #endif
659
+
660
+ #define ENCODER_PULSES_PER_STEP 4
661
+ #define ENCODER_STEPS_PER_MENU_ITEM 1
662
+#endif
663
+
664
+#if defined (PANEL_ONE)
665
+ #define SDSUPPORT
666
+ #define ULTIMAKERCONTROLLER
667
+#endif
668
+
669
+#if defined (REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER)
670
+ #define DOGLCD
671
+ #define U8GLIB_ST7920
672
+ #define REPRAP_DISCOUNT_SMART_CONTROLLER
673
+#endif
674
+
675
+#if defined(ULTIMAKERCONTROLLER) || defined(REPRAP_DISCOUNT_SMART_CONTROLLER) || defined(G3D_PANEL)
676
+ #define ULTIPANEL
677
+ #define NEWPANEL
678
+#endif
679
+
680
+#if defined(REPRAPWORLD_KEYPAD)
681
+  #define NEWPANEL
682
+  #define ULTIPANEL
683
+#endif
684
+#if defined(RA_CONTROL_PANEL)
685
+ #define ULTIPANEL
686
+ #define NEWPANEL
687
+ #define LCD_I2C_TYPE_PCA8574
688
+ #define LCD_I2C_ADDRESS 0x27   // I2C Address of the port expander
689
+#endif
690
+
691
+//I2C PANELS
692
+
693
+//#define LCD_I2C_SAINSMART_YWROBOT
694
+#ifdef LCD_I2C_SAINSMART_YWROBOT
695
+  // This uses the LiquidCrystal_I2C library ( https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home )
696
+  // Make sure it is placed in the Arduino libraries directory.
697
+  #define LCD_I2C_TYPE_PCF8575
698
+  #define LCD_I2C_ADDRESS 0x27   // I2C Address of the port expander
699
+  #define NEWPANEL
700
+  #define ULTIPANEL
701
+#endif
702
+
703
+// PANELOLU2 LCD with status LEDs, separate encoder and click inputs
704
+//#define LCD_I2C_PANELOLU2
705
+#ifdef LCD_I2C_PANELOLU2
706
+  // This uses the LiquidTWI2 library v1.2.3 or later ( https://github.com/lincomatic/LiquidTWI2 )
707
+  // Make sure the LiquidTWI2 directory is placed in the Arduino or Sketchbook libraries subdirectory.
708
+  // (v1.2.3 no longer requires you to define PANELOLU in the LiquidTWI2.h library header file)
709
+  // Note: The PANELOLU2 encoder click input can either be directly connected to a pin
710
+  //       (if BTN_ENC defined to != -1) or read through I2C (when BTN_ENC == -1).
711
+  #define LCD_I2C_TYPE_MCP23017
712
+  #define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
713
+  #define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD
714
+  #define NEWPANEL
715
+  #define ULTIPANEL
716
+
717
+  #ifndef ENCODER_PULSES_PER_STEP
718
+	#define ENCODER_PULSES_PER_STEP 4
719
+  #endif
720
+
721
+  #ifndef ENCODER_STEPS_PER_MENU_ITEM
722
+	#define ENCODER_STEPS_PER_MENU_ITEM 1
723
+  #endif
724
+
725
+
726
+  #ifdef LCD_USE_I2C_BUZZER
727
+	#define LCD_FEEDBACK_FREQUENCY_HZ 1000
728
+	#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
729
+  #endif
730
+
731
+#endif
732
+
733
+// Panucatt VIKI LCD with status LEDs, integrated click & L/R/U/P buttons, separate encoder inputs
734
+//#define LCD_I2C_VIKI
735
+#ifdef LCD_I2C_VIKI
736
+  // This uses the LiquidTWI2 library v1.2.3 or later ( https://github.com/lincomatic/LiquidTWI2 )
737
+  // Make sure the LiquidTWI2 directory is placed in the Arduino or Sketchbook libraries subdirectory.
738
+  // Note: The pause/stop/resume LCD button pin should be connected to the Arduino
739
+  //       BTN_ENC pin (or set BTN_ENC to -1 if not used)
740
+  #define LCD_I2C_TYPE_MCP23017
741
+  #define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
742
+  #define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD (requires LiquidTWI2 v1.2.3 or later)
743
+  #define NEWPANEL
744
+  #define ULTIPANEL
745
+#endif
746
+
747
+// Shift register panels
748
+// ---------------------
749
+// 2 wire Non-latching LCD SR from:
750
+// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection
751
+
752
+//#define SAV_3DLCD
753
+#ifdef SAV_3DLCD
754
+   #define SR_LCD_2W_NL    // Non latching 2 wire shiftregister
755
+   #define NEWPANEL
756
+   #define ULTIPANEL
757
+#endif
758
+
759
+
760
+#ifdef ULTIPANEL
761
+//  #define NEWPANEL  //enable this if you have a click-encoder panel
762
+  #define SDSUPPORT
763
+  #define ULTRA_LCD
764
+  #ifdef DOGLCD // Change number of lines to match the DOG graphic display
765
+    #define LCD_WIDTH 22
766
+    #define LCD_HEIGHT 5
767
+  #else
768
+    #define LCD_WIDTH 20
769
+    #define LCD_HEIGHT 4
770
+  #endif
771
+#else //no panel but just LCD
772
+  #ifdef ULTRA_LCD
773
+  #ifdef DOGLCD // Change number of lines to match the 128x64 graphics display
774
+    #define LCD_WIDTH 22
775
+    #define LCD_HEIGHT 5
776
+  #else
777
+    #define LCD_WIDTH 16
778
+    #define LCD_HEIGHT 2
779
+  #endif
780
+  #endif
781
+#endif
782
+
783
+// default LCD contrast for dogm-like LCD displays
784
+#ifdef DOGLCD
785
+# ifndef DEFAULT_LCD_CONTRAST
786
+#  define DEFAULT_LCD_CONTRAST 32
787
+# endif
788
+#endif
789
+
790
+// Increase the FAN pwm frequency. Removes the PWM noise but increases heating in the FET/Arduino
791
+//#define FAST_PWM_FAN
792
+
793
+// Temperature status LEDs that display the hotend and bet temperature.
794
+// If all hotends and bed temperature and temperature setpoint are < 54C then the BLUE led is on.
795
+// Otherwise the RED led is on. There is 1C hysteresis.
796
+//#define TEMP_STAT_LEDS
797
+
798
+// Use software PWM to drive the fan, as for the heaters. This uses a very low frequency
799
+// which is not ass annoying as with the hardware PWM. On the other hand, if this frequency
800
+// is too low, you should also increment SOFT_PWM_SCALE.
801
+//#define FAN_SOFT_PWM
802
+
803
+// Incrementing this by 1 will double the software PWM frequency,
804
+// affecting heaters, and the fan if FAN_SOFT_PWM is enabled.
805
+// However, control resolution will be halved for each increment;
806
+// at zero value, there are 128 effective control positions.
807
+#define SOFT_PWM_SCALE 0
808
+
809
+// M240  Triggers a camera by emulating a Canon RC-1 Remote
810
+// Data from: http://www.doc-diy.net/photo/rc-1_hacked/
811
+// #define PHOTOGRAPH_PIN     23
812
+
813
+// SF send wrong arc g-codes when using Arc Point as fillet procedure
814
+//#define SF_ARC_FIX
815
+
816
+// Support for the BariCUDA Paste Extruder.
817
+//#define BARICUDA
818
+
819
+//define BlinkM/CyzRgb Support
820
+//#define BLINKM
821
+
822
+/*********************************************************************\
823
+* R/C SERVO support
824
+* Sponsored by TrinityLabs, Reworked by codexmas
825
+**********************************************************************/
826
+
827
+// Number of servos
828
+//
829
+// If you select a configuration below, this will receive a default value and does not need to be set manually
830
+// set it manually if you have more servos than extruders and wish to manually control some
831
+// leaving it undefined or defining as 0 will disable the servo subsystem
832
+// If unsure, leave commented / disabled
833
+//
834
+//#define NUM_SERVOS 3 // Servo index starts with 0 for M280 command
835
+
836
+// Servo Endstops
837
+//
838
+// This allows for servo actuated endstops, primary usage is for the Z Axis to eliminate calibration or bed height changes.
839
+// Use M206 command to correct for switch height offset to actual nozzle height. Store that setting with M500.
840
+//
841
+//#define SERVO_ENDSTOPS {-1, -1, 0} // Servo index for X, Y, Z. Disable with -1
842
+//#define SERVO_ENDSTOP_ANGLES {0,0, 0,0, 70,0} // X,Y,Z Axis Extend and Retract angles
843
+
844
+/**********************************************************************\
845
+ * Support for a filament diameter sensor
846
+ * Also allows adjustment of diameter at print time (vs  at slicing)
847
+ * Single extruder only at this point (extruder 0)
848
+ *
849
+ * Motherboards
850
+ * 34 - RAMPS1.4 - uses Analog input 5 on the AUX2 connector
851
+ * 81 - Printrboard - Uses Analog input 2 on the Exp1 connector (version B,C,D,E)
852
+ * 301 - Rambo  - uses Analog input 3
853
+ * Note may require analog pins to be defined for different motherboards
854
+ **********************************************************************/
855
+// Uncomment below to enable
856
+//#define FILAMENT_SENSOR
857
+
858
+#define FILAMENT_SENSOR_EXTRUDER_NUM	0  //The number of the extruder that has the filament sensor (0,1,2)
859
+#define MEASUREMENT_DELAY_CM			14  //measurement delay in cm.  This is the distance from filament sensor to middle of barrel
860
+
861
+#define DEFAULT_NOMINAL_FILAMENT_DIA  3.0  //Enter the diameter (in mm) of the filament generally used (3.0 mm or 1.75 mm) - this is then used in the slicer software.  Used for sensor reading validation
862
+#define MEASURED_UPPER_LIMIT          3.30  //upper limit factor used for sensor reading validation in mm
863
+#define MEASURED_LOWER_LIMIT          1.90  //lower limit factor for sensor reading validation in mm
864
+#define MAX_MEASUREMENT_DELAY			20  //delay buffer size in bytes (1 byte = 1cm)- limits maximum measurement delay allowable (must be larger than MEASUREMENT_DELAY_CM  and lower number saves RAM)
865
+
866
+//defines used in the code
867
+#define DEFAULT_MEASURED_FILAMENT_DIA  DEFAULT_NOMINAL_FILAMENT_DIA  //set measured to nominal initially 
868
+
869
+//When using an LCD, uncomment the line below to display the Filament sensor data on the last line instead of status.  Status will appear for 5 sec.
870
+//#define FILAMENT_LCD_DISPLAY
871
+
872
+
873
+
874
+
875
+
876
+
877
+#include "Configuration_adv.h"
878
+#include "thermistortables.h"
879
+
880
+#endif //__CONFIGURATION_H

+ 547
- 0
Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h View File

@@ -0,0 +1,547 @@
1
+#ifndef CONFIGURATION_ADV_H
2
+#define CONFIGURATION_ADV_H
3
+
4
+//===========================================================================
5
+//=============================Thermal Settings  ============================
6
+//===========================================================================
7
+
8
+#ifdef BED_LIMIT_SWITCHING
9
+  #define BED_HYSTERESIS 2 //only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
10
+#endif
11
+#define BED_CHECK_INTERVAL 5000 //ms between checks in bang-bang control
12
+
13
+//// Heating sanity check:
14
+// This waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature
15
+// If the temperature has not increased at the end of that period, the target temperature is set to zero. 
16
+// It can be reset with another M104/M109. This check is also only triggered if the target temperature and the current temperature
17
+//  differ by at least 2x WATCH_TEMP_INCREASE
18
+//#define WATCH_TEMP_PERIOD 40000 //40 seconds
19
+//#define WATCH_TEMP_INCREASE 10  //Heat up at least 10 degree in 20 seconds
20
+
21
+#ifdef PIDTEMP
22
+  // this adds an experimental additional term to the heatingpower, proportional to the extrusion speed.
23
+  // if Kc is choosen well, the additional required power due to increased melting should be compensated.
24
+  #define PID_ADD_EXTRUSION_RATE  
25
+  #ifdef PID_ADD_EXTRUSION_RATE
26
+    #define  DEFAULT_Kc (1) //heatingpower=Kc*(e_speed)
27
+  #endif
28
+#endif
29
+
30
+
31
+//automatic temperature: The hot end target temperature is calculated by all the buffered lines of gcode.
32
+//The maximum buffered steps/sec of the extruder motor are called "se".
33
+//You enter the autotemp mode by a M109 S<mintemp> T<maxtemp> F<factor>
34
+// the target temperature is set to mintemp+factor*se[steps/sec] and limited by mintemp and maxtemp
35
+// you exit the value by any M109 without F*
36
+// Also, if the temperature is set to a value <mintemp, it is not changed by autotemp.
37
+// on an ultimaker, some initial testing worked with M109 S215 B260 F1 in the start.gcode
38
+#define AUTOTEMP
39
+#ifdef AUTOTEMP
40
+  #define AUTOTEMP_OLDWEIGHT 0.98
41
+#endif
42
+
43
+//Show Temperature ADC value
44
+//The M105 command return, besides traditional information, the ADC value read from temperature sensors.
45
+//#define SHOW_TEMP_ADC_VALUES
46
+
47
+//  extruder run-out prevention. 
48
+//if the machine is idle, and the temperature over MINTEMP, every couple of SECONDS some filament is extruded
49
+//#define EXTRUDER_RUNOUT_PREVENT  
50
+#define EXTRUDER_RUNOUT_MINTEMP 190  
51
+#define EXTRUDER_RUNOUT_SECONDS 30.
52
+#define EXTRUDER_RUNOUT_ESTEPS 14. //mm filament
53
+#define EXTRUDER_RUNOUT_SPEED 1500.  //extrusion speed
54
+#define EXTRUDER_RUNOUT_EXTRUDE 100
55
+
56
+//These defines help to calibrate the AD595 sensor in case you get wrong temperature measurements.
57
+//The measured temperature is defined as "actualTemp = (measuredTemp * TEMP_SENSOR_AD595_GAIN) + TEMP_SENSOR_AD595_OFFSET"
58
+#define TEMP_SENSOR_AD595_OFFSET 0.0
59
+#define TEMP_SENSOR_AD595_GAIN   1.0
60
+
61
+//This is for controlling a fan to cool down the stepper drivers
62
+//it will turn on when any driver is enabled
63
+//and turn off after the set amount of seconds from last driver being disabled again
64
+#define CONTROLLERFAN_PIN -1 //Pin used for the fan to cool controller (-1 to disable)
65
+#define CONTROLLERFAN_SECS 60 //How many seconds, after all motors were disabled, the fan should run
66
+#define CONTROLLERFAN_SPEED 255  // == full speed
67
+
68
+// When first starting the main fan, run it at full speed for the
69
+// given number of milliseconds.  This gets the fan spinning reliably
70
+// before setting a PWM value. (Does not work with software PWM for fan on Sanguinololu)
71
+//#define FAN_KICKSTART_TIME 100
72
+
73
+// Extruder cooling fans
74
+// Configure fan pin outputs to automatically turn on/off when the associated
75
+// extruder temperature is above/below EXTRUDER_AUTO_FAN_TEMPERATURE.
76
+// Multiple extruders can be assigned to the same pin in which case 
77
+// the fan will turn on when any selected extruder is above the threshold.
78
+#define EXTRUDER_0_AUTO_FAN_PIN   -1
79
+#define EXTRUDER_1_AUTO_FAN_PIN   -1
80
+#define EXTRUDER_2_AUTO_FAN_PIN   -1
81
+#define EXTRUDER_3_AUTO_FAN_PIN   -1
82
+#define EXTRUDER_AUTO_FAN_TEMPERATURE 50
83
+#define EXTRUDER_AUTO_FAN_SPEED   255  // == full speed
84
+
85
+
86
+//===========================================================================
87
+//=============================Mechanical Settings===========================
88
+//===========================================================================
89
+
90
+#define ENDSTOPS_ONLY_FOR_HOMING // If defined the endstops will only be used for homing
91
+
92
+
93
+//// AUTOSET LOCATIONS OF LIMIT SWITCHES
94
+//// Added by ZetaPhoenix 09-15-2012
95
+#ifdef MANUAL_HOME_POSITIONS  // Use manual limit switch locations
96
+  #define X_HOME_POS MANUAL_X_HOME_POS
97
+  #define Y_HOME_POS MANUAL_Y_HOME_POS
98
+  #define Z_HOME_POS MANUAL_Z_HOME_POS
99
+#else //Set min/max homing switch positions based upon homing direction and min/max travel limits
100
+  //X axis
101
+  #if X_HOME_DIR == -1
102
+    #ifdef BED_CENTER_AT_0_0
103
+      #define X_HOME_POS X_MAX_LENGTH * -0.5
104
+    #else
105
+      #define X_HOME_POS X_MIN_POS
106
+    #endif //BED_CENTER_AT_0_0
107
+  #else    
108
+    #ifdef BED_CENTER_AT_0_0
109
+      #define X_HOME_POS X_MAX_LENGTH * 0.5
110
+    #else
111
+      #define X_HOME_POS X_MAX_POS
112
+    #endif //BED_CENTER_AT_0_0
113
+  #endif //X_HOME_DIR == -1
114
+  
115
+  //Y axis
116
+  #if Y_HOME_DIR == -1
117
+    #ifdef BED_CENTER_AT_0_0
118
+      #define Y_HOME_POS Y_MAX_LENGTH * -0.5
119
+    #else
120
+      #define Y_HOME_POS Y_MIN_POS
121
+    #endif //BED_CENTER_AT_0_0
122
+  #else    
123
+    #ifdef BED_CENTER_AT_0_0
124
+      #define Y_HOME_POS Y_MAX_LENGTH * 0.5
125
+    #else
126
+      #define Y_HOME_POS Y_MAX_POS
127
+    #endif //BED_CENTER_AT_0_0
128
+  #endif //Y_HOME_DIR == -1
129
+  
130
+  // Z axis
131
+  #if Z_HOME_DIR == -1 //BED_CENTER_AT_0_0 not used
132
+    #define Z_HOME_POS Z_MIN_POS
133
+  #else    
134
+    #define Z_HOME_POS Z_MAX_POS
135
+  #endif //Z_HOME_DIR == -1
136
+#endif //End auto min/max positions
137
+//END AUTOSET LOCATIONS OF LIMIT SWITCHES -ZP
138
+
139
+
140
+//#define Z_LATE_ENABLE // Enable Z the last moment. Needed if your Z driver overheats.
141
+
142
+// A single Z stepper driver is usually used to drive 2 stepper motors.
143
+// Uncomment this define to utilize a separate stepper driver for each Z axis motor.
144
+// Only a few motherboards support this, like RAMPS, which have dual extruder support (the 2nd, often unused, extruder driver is used
145
+// to control the 2nd Z axis stepper motor). The pins are currently only defined for a RAMPS motherboards.
146
+// On a RAMPS (or other 5 driver) motherboard, using this feature will limit you to using 1 extruder.
147
+//#define Z_DUAL_STEPPER_DRIVERS
148
+
149
+#ifdef Z_DUAL_STEPPER_DRIVERS
150
+  #undef EXTRUDERS
151
+  #define EXTRUDERS 1
152
+#endif
153
+
154
+// Same again but for Y Axis.
155
+//#define Y_DUAL_STEPPER_DRIVERS
156
+
157
+// Define if the two Y drives need to rotate in opposite directions
158
+#define INVERT_Y2_VS_Y_DIR true
159
+
160
+#ifdef Y_DUAL_STEPPER_DRIVERS
161
+  #undef EXTRUDERS
162
+  #define EXTRUDERS 1
163
+#endif
164
+
165
+#if defined (Z_DUAL_STEPPER_DRIVERS) && defined (Y_DUAL_STEPPER_DRIVERS)
166
+  #error "You cannot have dual drivers for both Y and Z"
167
+#endif
168
+
169
+// Enable this for dual x-carriage printers. 
170
+// A dual x-carriage design has the advantage that the inactive extruder can be parked which
171
+// prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
172
+// allowing faster printing speeds.
173
+//#define DUAL_X_CARRIAGE
174
+#ifdef DUAL_X_CARRIAGE
175
+// Configuration for second X-carriage
176
+// Note: the first x-carriage is defined as the x-carriage which homes to the minimum endstop;
177
+// the second x-carriage always homes to the maximum endstop.
178
+#define X2_MIN_POS 80     // set minimum to ensure second x-carriage doesn't hit the parked first X-carriage
179
+#define X2_MAX_POS 353    // set maximum to the distance between toolheads when both heads are homed 
180
+#define X2_HOME_DIR 1     // the second X-carriage always homes to the maximum endstop position
181
+#define X2_HOME_POS X2_MAX_POS // default home position is the maximum carriage position 
182
+    // However: In this mode the EXTRUDER_OFFSET_X value for the second extruder provides a software 
183
+    // override for X2_HOME_POS. This also allow recalibration of the distance between the two endstops
184
+    // without modifying the firmware (through the "M218 T1 X???" command).
185
+    // Remember: you should set the second extruder x-offset to 0 in your slicer.
186
+
187
+// Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
188
+#define X2_ENABLE_PIN 29
189
+#define X2_STEP_PIN 25
190
+#define X2_DIR_PIN 23
191
+
192
+// There are a few selectable movement modes for dual x-carriages using M605 S<mode>
193
+//    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
194
+//                           as long as it supports dual x-carriages. (M605 S0)
195
+//    Mode 1: Auto-park mode. The firmware will automatically park and unpark the x-carriages on tool changes so
196
+//                           that additional slicer support is not required. (M605 S1)
197
+//    Mode 2: Duplication mode. The firmware will transparently make the second x-carriage and extruder copy all  
198
+//                           actions of the first x-carriage. This allows the printer to print 2 arbitrary items at
199
+//                           once. (2nd extruder x offset and temp offset are set using: M605 S2 [Xnnn] [Rmmm])
200
+
201
+// This is the default power-up mode which can be later using M605. 
202
+#define DEFAULT_DUAL_X_CARRIAGE_MODE 0 
203
+
204
+// Default settings in "Auto-park Mode" 
205
+#define TOOLCHANGE_PARK_ZLIFT   0.2      // the distance to raise Z axis when parking an extruder
206
+#define TOOLCHANGE_UNPARK_ZLIFT 1        // the distance to raise Z axis when unparking an extruder
207
+
208
+// Default x offset in duplication mode (typically set to half print bed width)
209
+#define DEFAULT_DUPLICATION_X_OFFSET 100
210
+
211
+#endif //DUAL_X_CARRIAGE
212
+    
213
+//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
214
+#define X_HOME_RETRACT_MM 5 
215
+#define Y_HOME_RETRACT_MM 5 
216
+#define Z_HOME_RETRACT_MM 5 // deltas need the same for all three axis
217
+#define HOMING_BUMP_DIVISOR {10, 10, 20}  // Re-Bump Speed Divisor (Divides the Homing Feedrate)
218
+
219
+//#define QUICK_HOME  //if this is defined, if both x and y are to be homed, a diagonal move will be performed initially.
220
+
221
+#define AXIS_RELATIVE_MODES {false, false, false, false}
222
+
223
+#define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step)
224
+
225
+//By default pololu step drivers require an active high signal. However, some high power drivers require an active low signal as step.
226
+#define INVERT_X_STEP_PIN false
227
+#define INVERT_Y_STEP_PIN false
228
+#define INVERT_Z_STEP_PIN false
229
+#define INVERT_E_STEP_PIN false
230
+
231
+//default stepper release if idle. Set to 0 to deactivate.
232
+#define DEFAULT_STEPPER_DEACTIVE_TIME 60
233
+
234
+#define DEFAULT_MINIMUMFEEDRATE       0.0     // minimum feedrate
235
+#define DEFAULT_MINTRAVELFEEDRATE     0.0
236
+
237
+// Feedrates for manual moves along X, Y, Z, E from panel
238
+#ifdef ULTIPANEL
239
+#define MANUAL_FEEDRATE {50*60, 50*60, 4*60, 60}  // set the speeds for manual moves (mm/min)
240
+#endif
241
+
242
+// minimum time in microseconds that a movement needs to take if the buffer is emptied.
243
+#define DEFAULT_MINSEGMENTTIME        20000
244
+
245
+// If defined the movements slow down when the look ahead buffer is only half full
246
+//#define SLOWDOWN
247
+
248
+// Frequency limit
249
+// See nophead's blog for more info
250
+// Not working O
251
+//#define XY_FREQUENCY_LIMIT  15
252
+
253
+// Minimum planner junction speed. Sets the default minimum speed the planner plans for at the end
254
+// of the buffer and all stops. This should not be much greater than zero and should only be changed
255
+// if unwanted behavior is observed on a user's machine when running at very slow speeds.
256
+#define MINIMUM_PLANNER_SPEED 0.05// (mm/sec)
257
+
258
+// MS1 MS2 Stepper Driver Microstepping mode table
259
+#define MICROSTEP1 LOW,LOW
260
+#define MICROSTEP2 HIGH,LOW
261
+#define MICROSTEP4 LOW,HIGH
262
+#define MICROSTEP8 HIGH,HIGH
263
+#define MICROSTEP16 HIGH,HIGH
264
+
265
+// Microstep setting (Only functional when stepper driver microstep pins are connected to MCU.
266
+#define MICROSTEP_MODES {16,16,16,16,16} // [1,2,4,8,16]
267
+
268
+// Motor Current setting (Only functional when motor driver current ref pins are connected to a digital trimpot on supported boards)
269
+#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
270
+
271
+// uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
272
+//#define DIGIPOT_I2C
273
+// Number of channels available for I2C digipot, For Azteeg X3 Pro we have 8
274
+#define DIGIPOT_I2C_NUM_CHANNELS 8
275
+// actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
276
+#define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}
277
+
278
+//===========================================================================
279
+//=============================Additional Features===========================
280
+//===========================================================================
281
+
282
+#define ENCODER_RATE_MULTIPLIER         // If defined, certain menu edit operations automatically multiply the steps when the encoder is moved quickly
283
+#define ENCODER_10X_STEPS_PER_SEC 75    // If the encoder steps per sec exceed this value, multiple the steps moved by ten to quickly advance the value
284
+#define ENCODER_100X_STEPS_PER_SEC 160  // If the encoder steps per sec exceed this value, multiple the steps moved by 100 to really quickly advance the value
285
+//#define ENCODER_RATE_MULTIPLIER_DEBUG  // If defined, output the encoder steps per second value
286
+
287
+//#define CHDK 4        //Pin for triggering CHDK to take a picture see how to use it here http://captain-slow.dk/2014/03/09/3d-printing-timelapses/
288
+#define CHDK_DELAY 50 //How long in ms the pin should stay HIGH before going LOW again
289
+
290
+#define SD_FINISHED_STEPPERRELEASE true  //if sd support and the file is finished: disable steppers?
291
+#define SD_FINISHED_RELEASECOMMAND "M84 X Y Z E" // You might want to keep the z enabled so your bed stays in place.
292
+
293
+#define SDCARD_RATHERRECENTFIRST  //reverse file order of sd card menu display. Its sorted practically after the filesystem block order. 
294
+// if a file is deleted, it frees a block. hence, the order is not purely cronological. To still have auto0.g accessible, there is again the option to do that.
295
+// using:
296
+//#define MENU_ADDAUTOSTART
297
+
298
+// Show a progress bar on the LCD when printing from SD
299
+//#define LCD_PROGRESS_BAR
300
+
301
+#ifdef LCD_PROGRESS_BAR
302
+  // Amount of time (ms) to show the bar
303
+  #define PROGRESS_BAR_BAR_TIME 2000
304
+  // Amount of time (ms) to show the status message
305
+  #define PROGRESS_BAR_MSG_TIME 2000
306
+  // Amount of time (ms) to retain the status message (0=forever)
307
+  #define PROGRESS_MSG_EXPIRE   0
308
+  // Enable this to show messages for MSG_TIME then hide them
309
+  //#define PROGRESS_MSG_ONCE
310
+#endif
311
+
312
+// The hardware watchdog should reset the Microcontroller disabling all outputs, in case the firmware gets stuck and doesn't do temperature regulation.
313
+//#define USE_WATCHDOG
314
+
315
+#ifdef USE_WATCHDOG
316
+// If you have a watchdog reboot in an ArduinoMega2560 then the device will hang forever, as a watchdog reset will leave the watchdog on.
317
+// The "WATCHDOG_RESET_MANUAL" goes around this by not using the hardware reset.
318
+//  However, THIS FEATURE IS UNSAFE!, as it will only work if interrupts are disabled. And the code could hang in an interrupt routine with interrupts disabled.
319
+//#define WATCHDOG_RESET_MANUAL
320
+#endif
321
+
322
+// Enable the option to stop SD printing when hitting and endstops, needs to be enabled from the LCD menu when this option is enabled.
323
+//#define ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED
324
+
325
+// Babystepping enables the user to control the axis in tiny amounts, independently from the normal printing process
326
+// it can e.g. be used to change z-positions in the print startup phase in realtime
327
+// does not respect endstops!
328
+//#define BABYSTEPPING
329
+#ifdef BABYSTEPPING
330
+  #define BABYSTEP_XY  //not only z, but also XY in the menu. more clutter, more functions
331
+  #define BABYSTEP_INVERT_Z false  //true for inverse movements in Z
332
+  #define BABYSTEP_Z_MULTIPLICATOR 2 //faster z movements
333
+  
334
+  #ifdef COREXY
335
+    #error BABYSTEPPING not implemented for COREXY yet.
336
+  #endif
337
+
338
+  #ifdef DELTA
339
+    #ifdef BABYSTEP_XY
340
+      #error BABYSTEPPING only implemented for Z axis on deltabots.
341
+    #endif
342
+  #endif
343
+#endif
344
+
345
+// extruder advance constant (s2/mm3)
346
+//
347
+// advance (steps) = STEPS_PER_CUBIC_MM_E * EXTRUDER_ADVANCE_K * cubic mm per second ^ 2
348
+//
349
+// hooke's law says:		force = k * distance
350
+// Bernoulli's principle says:	v ^ 2 / 2 + g . h + pressure / density = constant
351
+// so: v ^ 2 is proportional to number of steps we advance the extruder
352
+//#define ADVANCE
353
+
354
+#ifdef ADVANCE
355
+  #define EXTRUDER_ADVANCE_K .0
356
+
357
+  #define D_FILAMENT 2.85
358
+  #define STEPS_MM_E 836
359
+  #define EXTRUSION_AREA (0.25 * D_FILAMENT * D_FILAMENT * 3.14159)
360
+  #define STEPS_PER_CUBIC_MM_E (axis_steps_per_unit[E_AXIS]/ EXTRUSION_AREA)
361
+
362
+#endif // ADVANCE
363
+
364
+// Arc interpretation settings:
365
+#define MM_PER_ARC_SEGMENT 1
366
+#define N_ARC_CORRECTION 25
367
+
368
+const unsigned int dropsegments=5; //everything with less than this number of steps will be ignored as move and joined with the next movement
369
+
370
+// If you are using a RAMPS board or cheap E-bay purchased boards that do not detect when an SD card is inserted
371
+// You can get round this by connecting a push button or single throw switch to the pin defined as SDCARDCARDDETECT 
372
+// in the pins.h file.  When using a push button pulling the pin to ground this will need inverted.  This setting should
373
+// be commented out otherwise
374
+#define SDCARDDETECTINVERTED 
375
+
376
+#ifdef ULTIPANEL
377
+ #undef SDCARDDETECTINVERTED
378
+#endif
379
+
380
+// Power Signal Control Definitions
381
+// By default use ATX definition
382
+#ifndef POWER_SUPPLY
383
+  #define POWER_SUPPLY 1
384
+#endif
385
+// 1 = ATX
386
+#if (POWER_SUPPLY == 1) 
387
+  #define PS_ON_AWAKE  LOW
388
+  #define PS_ON_ASLEEP HIGH
389
+#endif
390
+// 2 = X-Box 360 203W
391
+#if (POWER_SUPPLY == 2) 
392
+  #define PS_ON_AWAKE  HIGH
393
+  #define PS_ON_ASLEEP LOW
394
+#endif
395
+
396
+// Control heater 0 and heater 1 in parallel.
397
+//#define HEATERS_PARALLEL
398
+
399
+//===========================================================================
400
+//=============================Buffers           ============================
401
+//===========================================================================
402
+
403
+// The number of linear motions that can be in the plan at any give time.  
404
+// THE BLOCK_BUFFER_SIZE NEEDS TO BE A POWER OF 2, i.g. 8,16,32 because shifts and ors are used to do the ringbuffering.
405
+#if defined SDSUPPORT
406
+  #define BLOCK_BUFFER_SIZE 16   // SD,LCD,Buttons take more memory, block buffer needs to be smaller
407
+#else
408
+  #define BLOCK_BUFFER_SIZE 16 // maximize block buffer
409
+#endif
410
+
411
+
412
+//The ASCII buffer for recieving from the serial:
413
+#define MAX_CMD_SIZE 96
414
+#define BUFSIZE 4
415
+
416
+
417
+// Firmware based and LCD controled retract
418
+// M207 and M208 can be used to define parameters for the retraction. 
419
+// The retraction can be called by the slicer using G10 and G11
420
+// until then, intended retractions can be detected by moves that only extrude and the direction. 
421
+// the moves are than replaced by the firmware controlled ones.
422
+
423
+// #define FWRETRACT  //ONLY PARTIALLY TESTED
424
+#ifdef FWRETRACT
425
+  #define MIN_RETRACT 0.1                //minimum extruded mm to accept a automatic gcode retraction attempt
426
+  #define RETRACT_LENGTH 3               //default retract length (positive mm)
427
+  #define RETRACT_LENGTH_SWAP 13         //default swap retract length (positive mm), for extruder change
428
+  #define RETRACT_FEEDRATE 45            //default feedrate for retracting (mm/s)
429
+  #define RETRACT_ZLIFT 0                //default retract Z-lift
430
+  #define RETRACT_RECOVER_LENGTH 0       //default additional recover length (mm, added to retract length when recovering)
431
+  #define RETRACT_RECOVER_LENGTH_SWAP 0  //default additional swap recover length (mm, added to retract length when recovering from extruder change)
432
+  #define RETRACT_RECOVER_FEEDRATE 8     //default feedrate for recovering from retraction (mm/s)
433
+#endif
434
+
435
+//adds support for experimental filament exchange support M600; requires display
436
+#ifdef ULTIPANEL
437
+  #define FILAMENTCHANGEENABLE
438
+  #ifdef FILAMENTCHANGEENABLE
439
+    #define FILAMENTCHANGE_XPOS 3
440
+    #define FILAMENTCHANGE_YPOS 3
441
+    #define FILAMENTCHANGE_ZADD 10
442
+    #define FILAMENTCHANGE_FIRSTRETRACT -2
443
+    #define FILAMENTCHANGE_FINALRETRACT -100
444
+  #endif
445
+#endif
446
+
447
+#ifdef FILAMENTCHANGEENABLE
448
+  #ifdef EXTRUDER_RUNOUT_PREVENT
449
+    #error EXTRUDER_RUNOUT_PREVENT currently incompatible with FILAMENTCHANGE
450
+  #endif 
451
+#endif
452
+ 
453
+//===========================================================================
454
+//=============================  Define Defines  ============================
455
+//===========================================================================
456
+
457
+#if defined (ENABLE_AUTO_BED_LEVELING) && defined (DELTA)
458
+
459
+  #if not defined(AUTO_BED_LEVELING_GRID)
460
+    #error "Only Grid Bed Auto Leveling is supported on Deltas."
461
+  #endif
462
+  
463
+  #if defined(Z_PROBE_SLED)
464
+    #error "You cannot use Z_PROBE_SLED together with DELTA."
465
+  #endif
466
+
467
+  #if defined(Z_PROBE_REPEATABILITY_TEST)
468
+    #error "Z-probe repeatability test is not supported on Deltas yet."
469
+  #endif
470
+
471
+#endif  
472
+
473
+#if defined(Z_PROBE_ALLEN_KEY)
474
+  #if !defined(AUTO_BED_LEVELING_GRID) || !defined(DELTA)
475
+    #error "Invalid use of Z_PROBE_ALLEN_KEY."
476
+  #endif
477
+#endif
478
+
479
+#if EXTRUDERS > 1 && defined TEMP_SENSOR_1_AS_REDUNDANT
480
+  #error "You cannot use TEMP_SENSOR_1_AS_REDUNDANT if EXTRUDERS > 1"
481
+#endif
482
+
483
+#if EXTRUDERS > 1 && defined HEATERS_PARALLEL
484
+  #error "You cannot use HEATERS_PARALLEL if EXTRUDERS > 1"
485
+#endif
486
+
487
+#if TEMP_SENSOR_0 > 0
488
+  #define THERMISTORHEATER_0 TEMP_SENSOR_0
489
+  #define HEATER_0_USES_THERMISTOR
490
+#endif
491
+#if TEMP_SENSOR_1 > 0
492
+  #define THERMISTORHEATER_1 TEMP_SENSOR_1
493
+  #define HEATER_1_USES_THERMISTOR
494
+#endif
495
+#if TEMP_SENSOR_2 > 0
496
+  #define THERMISTORHEATER_2 TEMP_SENSOR_2
497
+  #define HEATER_2_USES_THERMISTOR
498
+#endif
499
+#if TEMP_SENSOR_3 > 0
500
+  #define THERMISTORHEATER_3 TEMP_SENSOR_3
501
+  #define HEATER_3_USES_THERMISTOR
502
+#endif
503
+#if TEMP_SENSOR_BED > 0
504
+  #define THERMISTORBED TEMP_SENSOR_BED
505
+  #define BED_USES_THERMISTOR
506
+#endif
507
+#if TEMP_SENSOR_0 == -1
508
+  #define HEATER_0_USES_AD595
509
+#endif
510
+#if TEMP_SENSOR_1 == -1
511
+  #define HEATER_1_USES_AD595
512
+#endif
513
+#if TEMP_SENSOR_2 == -1
514
+  #define HEATER_2_USES_AD595
515
+#endif
516
+#if TEMP_SENSOR_3 == -1
517
+  #define HEATER_3_USES_AD595
518
+#endif
519
+#if TEMP_SENSOR_BED == -1
520
+  #define BED_USES_AD595
521
+#endif
522
+#if TEMP_SENSOR_0 == -2
523
+  #define HEATER_0_USES_MAX6675
524
+#endif
525
+#if TEMP_SENSOR_0 == 0
526
+  #undef HEATER_0_MINTEMP
527
+  #undef HEATER_0_MAXTEMP
528
+#endif
529
+#if TEMP_SENSOR_1 == 0
530
+  #undef HEATER_1_MINTEMP
531
+  #undef HEATER_1_MAXTEMP
532
+#endif
533
+#if TEMP_SENSOR_2 == 0
534
+  #undef HEATER_2_MINTEMP
535
+  #undef HEATER_2_MAXTEMP
536
+#endif
537
+#if TEMP_SENSOR_3 == 0
538
+  #undef HEATER_3_MINTEMP
539
+  #undef HEATER_3_MAXTEMP
540
+#endif
541
+#if TEMP_SENSOR_BED == 0
542
+  #undef BED_MINTEMP
543
+  #undef BED_MAXTEMP
544
+#endif
545
+
546
+
547
+#endif //__CONFIGURATION_ADV_H

+ 1
- 0
Marlin/example_configurations/makibox/Configuration.h View File

@@ -450,6 +450,7 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
450 450
 
451 451
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
452 452
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
453
+  #define Z_RAISE_AFTER_PROBING 15    //How much the extruder will be raised after the last probing point.
453 454
 
454 455
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
455 456
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.

+ 1
- 0
Marlin/example_configurations/tvrrug/Round2/Configuration.h View File

@@ -452,6 +452,7 @@ const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of
452 452
 
453 453
   #define Z_RAISE_BEFORE_PROBING 15    //How much the extruder will be raised before traveling to the first probing point.
454 454
   #define Z_RAISE_BETWEEN_PROBINGS 5  //How much the extruder will be raised when traveling from between next probing points
455
+  #define Z_RAISE_AFTER_PROBING 15    //How much the extruder will be raised after the last probing point.
455 456
 
456 457
   //#define Z_PROBE_SLED // turn on if you have a z-probe mounted on a sled like those designed by Charles Bell
457 458
   //#define SLED_DOCKING_OFFSET 5 // the extra distance the X axis must travel to pickup the sled. 0 should be fine but you can push it further if you'd like.

BIN
Marlin/fonts/ISO10646-1.fon View File


+ 1
- 1
Marlin/fonts/README.fonts View File

@@ -1,6 +1,6 @@
1 1
 The fonts are created with Fony.exe (http://hukka.ncn.fi/?fony) because Fontforge didn't do what I want (probably lack off experience). 
2 2
 In Fony export the fonts to bdf-format. Maybe another one can edit them with Fontforge.
3 3
 Then run make_fonts.bat what calls bdf2u8g.exe with the needed parameters to produce the .h files.
4
-The .h files must be edited to replace '#include "u8g.h"' with '#include <utility/u8g.h>', replace 'U8G_FONT_SECTION' with 'U8G_SECTION', inset '.progmem.' right behind the first '"' and moved to the main directory.
4
+The .h files must be edited to replace '#include "u8g.h"' with '#include <utility/u8g.h>', replace 'U8G_FONT_SECTION' with 'U8G_SECTION', insert '.progmem.' right behind the first '"' and moved to the main directory.
5 5
 
6 6
 Especially the Kana and Cyrillic fonts should be revised by someone who knows what he/she does. I am only a west-European with very little knowledge about this scripts.

+ 1
- 0
Marlin/fonts/make_fonts.bat View File

@@ -2,5 +2,6 @@
2 2
 .\bdf2u8g.exe -b 16 -e 255 HD44780_W.bdf HD44780_W_5x7 dogm_font_data_HD44780_W.h
3 3
 .\bdf2u8g.exe -b 32 -e 255 HD44780_C.bdf HD44780_C_5x7 dogm_font_data_HD44780_C.h
4 4
 .\bdf2u8g.exe -b 32 -e 255 HD44780_J.bdf HD44780_J_5x7 dogm_font_data_HD44780_J.h
5
+.\bdf2u8g.exe -b 32 -e 255 ISO10646-1.bdf ISO10646_1_5x7 dogm_font_data_ISO10646_1.h
5 6
 .\bdf2u8g.exe -b 32 -e 255 ISO10646_5_Cyrillic.bdf ISO10646_5_Cyrillic_5x7 dogm_font_data_ISO10646_5_Cyrillic.h
6 7
 .\bdf2u8g.exe -b 32 -e 255 ISO10646_Kana.bdf ISO10646_Kana_5x7 dogm_font_data_ISO10646_Kana.h

+ 1
- 1
Marlin/planner.cpp View File

@@ -1063,7 +1063,7 @@ Having the real displacement of the head, we can calculate the total movement le
1063 1063
   st_wake_up();
1064 1064
 }
1065 1065
 
1066
-#ifdef ENABLE_AUTO_BED_LEVELING
1066
+#if defined(ENABLE_AUTO_BED_LEVELING) && not defined(DELTA)
1067 1067
 vector_3 plan_get_position() {
1068 1068
 	vector_3 position = vector_3(st_get_position_mm(X_AXIS), st_get_position_mm(Y_AXIS), st_get_position_mm(Z_AXIS));
1069 1069
 

+ 4
- 2
Marlin/planner.h View File

@@ -85,8 +85,10 @@ void plan_init();
85 85
 #ifdef ENABLE_AUTO_BED_LEVELING
86 86
 void plan_buffer_line(float x, float y, float z, const float &e, float feed_rate, const uint8_t &extruder);
87 87
 
88
-// Get the position applying the bed level matrix if enabled
89
-vector_3 plan_get_position();
88
+  #ifndef DELTA
89
+  // Get the position applying the bed level matrix if enabled
90
+  vector_3 plan_get_position();
91
+  #endif
90 92
 #else
91 93
 void plan_buffer_line(const float &x, const float &y, const float &z, const float &e, float feed_rate, const uint8_t &extruder);
92 94
 #endif // ENABLE_AUTO_BED_LEVELING

+ 40
- 39
Marlin/stepper.cpp View File

@@ -413,48 +413,49 @@ ISR(TIMER1_COMPA_vect) {
413 413
       #else
414 414
         // Head direction in -X axis for CoreXY bots.
415 415
         // If DeltaX == -DeltaY, the movement is only in Y axis
416
-        if (TEST(out_bits, X_HEAD) && (current_block->steps_x != current_block->steps_y || (TEST(out_bits, X_AXIS) == TEST(out_bits, Y_AXIS))))
416
+        if (current_block->steps_x != current_block->steps_y || (TEST(out_bits, X_AXIS) == TEST(out_bits, Y_AXIS)))      
417
+            if (TEST(out_bits, X_HEAD))
417 418
       #endif
418
-        { // -direction
419
-          #ifdef DUAL_X_CARRIAGE
420
-            // with 2 x-carriages, endstops are only checked in the homing direction for the active extruder
421
-            if ((current_block->active_extruder == 0 && X_HOME_DIR == -1) || (current_block->active_extruder != 0 && X2_HOME_DIR == -1))
422
-          #endif          
423
-            {
424
-              #if defined(X_MIN_PIN) && X_MIN_PIN >= 0
425
-                UPDATE_ENDSTOP(x, X, min, MIN);
419
+            { // -direction
420
+              #ifdef DUAL_X_CARRIAGE
421
+                // with 2 x-carriages, endstops are only checked in the homing direction for the active extruder
422
+                if ((current_block->active_extruder == 0 && X_HOME_DIR == -1) || (current_block->active_extruder != 0 && X2_HOME_DIR == -1))
423
+              #endif          
424
+                {
425
+                  #if defined(X_MIN_PIN) && X_MIN_PIN >= 0
426
+                    UPDATE_ENDSTOP(x, X, min, MIN);
427
+                  #endif
428
+                }
429
+            }
430
+            else { // +direction
431
+              #ifdef DUAL_X_CARRIAGE
432
+                // with 2 x-carriages, endstops are only checked in the homing direction for the active extruder
433
+                if ((current_block->active_extruder == 0 && X_HOME_DIR == 1) || (current_block->active_extruder != 0 && X2_HOME_DIR == 1))
426 434
               #endif
435
+                {
436
+                  #if defined(X_MAX_PIN) && X_MAX_PIN >= 0
437
+                    UPDATE_ENDSTOP(x, X, max, MAX);
438
+                  #endif
439
+                }
427 440
             }
428
-        }
429
-        else { // +direction
430
-          #ifdef DUAL_X_CARRIAGE
431
-            // with 2 x-carriages, endstops are only checked in the homing direction for the active extruder
432
-            if ((current_block->active_extruder == 0 && X_HOME_DIR == 1) || (current_block->active_extruder != 0 && X2_HOME_DIR == 1))
433
-          #endif
434
-            {
435
-              #if defined(X_MAX_PIN) && X_MAX_PIN >= 0
436
-                UPDATE_ENDSTOP(x, X, max, MAX);
441
+      #ifndef COREXY
442
+        if (TEST(out_bits, Y_AXIS))   // -direction
443
+      #else
444
+        // Head direction in -Y axis for CoreXY bots.
445
+        // If DeltaX == DeltaY, the movement is only in X axis
446
+        if (current_block->steps_x != current_block->steps_y || (TEST(out_bits, X_AXIS) != TEST(out_bits, Y_AXIS)))
447
+            if (TEST(out_bits, Y_HEAD))             
448
+      #endif
449
+            { // -direction
450
+              #if defined(Y_MIN_PIN) && Y_MIN_PIN >= 0
451
+                UPDATE_ENDSTOP(y, Y, min, MIN);
452
+              #endif
453
+            }
454
+            else { // +direction
455
+              #if defined(Y_MAX_PIN) && Y_MAX_PIN >= 0
456
+                UPDATE_ENDSTOP(y, Y, max, MAX);
437 457
               #endif
438 458
             }
439
-        }
440
-
441
-        #ifndef COREXY
442
-          if (TEST(out_bits, Y_AXIS))   // -direction
443
-        #else
444
-          // Head direction in -Y axis for CoreXY bots.
445
-          // If DeltaX == DeltaY, the movement is only in X axis
446
-          if (TEST(out_bits, Y_HEAD) && (current_block->steps_x != current_block->steps_y || (TEST(out_bits, X_AXIS) != TEST(out_bits, Y_AXIS))))
447
-        #endif
448
-        { // -direction
449
-          #if defined(Y_MIN_PIN) && Y_MIN_PIN >= 0
450
-            UPDATE_ENDSTOP(y, Y, min, MIN);
451
-          #endif
452
-        }
453
-        else { // +direction
454
-          #if defined(Y_MAX_PIN) && Y_MAX_PIN >= 0
455
-            UPDATE_ENDSTOP(y, Y, max, MAX);
456
-          #endif
457
-        }
458 459
     }
459 460
 
460 461
     if (TEST(out_bits, Z_AXIS)) {   // -direction
@@ -528,10 +529,10 @@ ISR(TIMER1_COMPA_vect) {
528 529
         #endif
529 530
 
530 531
         #define STEP_IF_COUNTER(axis, AXIS) \
531
-          if (counter_## axis > 0) {
532
+          if (counter_## axis > 0) { \
532 533
             counter_## axis -= current_block->step_event_count; \
533 534
             count_position[AXIS ##_AXIS] += count_direction[AXIS ##_AXIS]; \
534
-            AXIS ##_STEP_WRITE(LOW);
535
+            AXIS ##_STEP_WRITE(LOW); \
535 536
           }
536 537
 
537 538
         STEP_IF_COUNTER(x, X);

+ 6
- 6
Marlin/ultralcd.cpp View File

@@ -61,7 +61,9 @@ static void lcd_control_volumetric_menu();
61 61
 #ifdef DOGLCD
62 62
 static void lcd_set_contrast();
63 63
 #endif
64
+#ifdef FWRETRACT
64 65
 static void lcd_control_retract_menu();
66
+#endif
65 67
 static void lcd_sdcard_menu();
66 68
 
67 69
 #ifdef DELTA_CALIBRATION_MENU
@@ -402,7 +404,7 @@ static void lcd_main_menu() {
402 404
   END_MENU();
403 405
 }
404 406
 
405
-#ifdef SDSUPPORT
407
+#if defined( SDSUPPORT ) && defined( MENU_ADDAUTOSTART )
406 408
   static void lcd_autostart_sd() {
407 409
     card.autostart_index = 0;
408 410
     card.setroot();
@@ -587,10 +589,8 @@ void lcd_cooldown() {
587 589
 static void lcd_prepare_menu() {
588 590
   START_MENU();
589 591
   MENU_ITEM(back, MSG_MAIN, lcd_main_menu);
590
-  #ifdef SDSUPPORT
591
-    #ifdef MENU_ADDAUTOSTART
592
-      MENU_ITEM(function, MSG_AUTOSTART, lcd_autostart_sd);
593
-    #endif
592
+  #if defined( SDSUPPORT ) && defined( MENU_ADDAUTOSTART )
593
+    MENU_ITEM(function, MSG_AUTOSTART, lcd_autostart_sd);
594 594
   #endif
595 595
   MENU_ITEM(gcode, MSG_DISABLE_STEPPERS, PSTR("M84"));
596 596
   MENU_ITEM(gcode, MSG_AUTO_HOME, PSTR("G28"));
@@ -1246,7 +1246,7 @@ void lcd_update() {
1246 1246
     }
1247 1247
   #endif//CARDINSERTED
1248 1248
 
1249
-  long ms = millis();
1249
+  uint32_t ms = millis();
1250 1250
   if (ms > lcd_next_update_millis) {
1251 1251
 
1252 1252
     #ifdef ULTIPANEL

Loading…
Cancel
Save