Browse Source

Correct HOTENDS for SWITCHING_EXTRUDER

Scott Lahteine 6 years ago
parent
commit
0ca9db7051

+ 0
- 2
.travis.yml View File

@@ -167,7 +167,6 @@ script:
167 167
   - opt_set EXTRUDERS 2
168 168
   - opt_enable NUM_SERVOS
169 169
   - opt_set NUM_SERVOS 1
170
-  - opt_set TEMP_SENSOR_1 1
171 170
   - opt_enable SWITCHING_EXTRUDER ULTIMAKERCONTROLLER
172 171
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
173 172
   #
@@ -421,7 +420,6 @@ script:
421 420
   - opt_set EXTRUDERS 2
422 421
   - opt_enable NUM_SERVOS
423 422
   - opt_set NUM_SERVOS 1
424
-  - opt_set TEMP_SENSOR_1 1
425 423
   - opt_enable SWITCHING_EXTRUDER ULTIMAKERCONTROLLER
426 424
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
427 425
   #

+ 21
- 4
Marlin/src/Marlin.cpp View File

@@ -427,8 +427,16 @@ void manage_inactivity(const bool ignore_stepper_queue/*=false*/) {
427 427
       && !planner.has_blocks_queued()
428 428
     ) {
429 429
       #if ENABLED(SWITCHING_EXTRUDER)
430
-        const bool oldstatus = E0_ENABLE_READ;
431
-        enable_E0();
430
+        bool oldstatus;
431
+        switch (active_extruder) {
432
+          default: oldstatus = E0_ENABLE_READ; enable_E0(); break;
433
+          #if E_STEPPERS > 1
434
+            case 2: case 3: oldstatus = E1_ENABLE_READ; enable_E1(); break;
435
+            #if E_STEPPERS > 2
436
+              case 4: oldstatus = E2_ENABLE_READ; enable_E2(); break;
437
+            #endif // E_STEPPERS > 2
438
+          #endif // E_STEPPERS > 1
439
+        }
432 440
       #else // !SWITCHING_EXTRUDER
433 441
         bool oldstatus;
434 442
         switch (active_extruder) {
@@ -454,9 +462,18 @@ void manage_inactivity(const bool ignore_stepper_queue/*=false*/) {
454 462
       current_position[E_AXIS] = olde;
455 463
       planner.set_e_position_mm(olde);
456 464
       planner.synchronize();
465
+
457 466
       #if ENABLED(SWITCHING_EXTRUDER)
458
-        E0_ENABLE_WRITE(oldstatus);
459
-      #else
467
+        switch (active_extruder) {
468
+          default: oldstatus = E0_ENABLE_WRITE(oldstatus); break;
469
+          #if E_STEPPERS > 1
470
+            case 2: case 3: oldstatus = E1_ENABLE_WRITE(oldstatus); break;
471
+            #if E_STEPPERS > 2
472
+              case 4: oldstatus = E2_ENABLE_WRITE(oldstatus); break;
473
+            #endif // E_STEPPERS > 2
474
+          #endif // E_STEPPERS > 1
475
+        }
476
+      #else // !SWITCHING_EXTRUDER
460 477
         switch (active_extruder) {
461 478
           case 0: E0_ENABLE_WRITE(oldstatus); break;
462 479
           #if E_STEPPERS > 1

+ 13
- 15
Marlin/src/inc/Conditionals_LCD.h View File

@@ -406,23 +406,8 @@
406 406
  *  E_MANUAL     - Number of E steppers for LCD move options
407 407
  *
408 408
  */
409
-#if ENABLED(SINGLENOZZLE) || ENABLED(MIXING_EXTRUDER)         // One hotend, one thermistor, no XY offset
410
-  #define HOTENDS       1
411
-  #undef TEMP_SENSOR_1_AS_REDUNDANT
412
-  #undef HOTEND_OFFSET_X
413
-  #undef HOTEND_OFFSET_Y
414
-#else                                                         // Two hotends
415
-  #define HOTENDS       EXTRUDERS
416
-#endif
417
-
418 409
 #define HOTEND_LOOP() for (int8_t e = 0; e < HOTENDS; e++)
419 410
 
420
-#if HOTENDS == 1
421
-  #define HOTEND_INDEX  0
422
-#else
423
-  #define HOTEND_INDEX  e
424
-#endif
425
-
426 411
 #if ENABLED(SWITCHING_EXTRUDER)                               // One stepper for every two EXTRUDERS
427 412
   #if EXTRUDERS > 4
428 413
     #define E_STEPPERS    3
@@ -431,6 +416,7 @@
431 416
   #else
432 417
     #define E_STEPPERS    1
433 418
   #endif
419
+  #define HOTENDS         E_STEPPERS
434 420
   #define E_MANUAL        EXTRUDERS
435 421
 #elif ENABLED(MIXING_EXTRUDER)
436 422
   #define E_STEPPERS      MIXING_STEPPERS
@@ -440,6 +426,18 @@
440 426
   #define E_MANUAL        EXTRUDERS
441 427
 #endif
442 428
 
429
+#if ENABLED(SINGLENOZZLE) || ENABLED(MIXING_EXTRUDER)         // One hotend, one thermistor, no XY offset
430
+  #undef HOTENDS
431
+  #define HOTENDS       1
432
+  #undef TEMP_SENSOR_1_AS_REDUNDANT
433
+  #undef HOTEND_OFFSET_X
434
+  #undef HOTEND_OFFSET_Y
435
+#endif
436
+
437
+#ifndef HOTENDS
438
+  #define HOTENDS EXTRUDERS
439
+#endif
440
+
443 441
 #define DO_SWITCH_EXTRUDER (ENABLED(SWITCHING_EXTRUDER) && (DISABLED(SWITCHING_NOZZLE) || SWITCHING_EXTRUDER_SERVO_NR != SWITCHING_NOZZLE_SERVO_NR))
444 442
 
445 443
 /**

+ 2
- 6
Marlin/src/inc/SanityCheck.h View File

@@ -582,12 +582,8 @@ static_assert(X_MAX_LENGTH >= X_BED_SIZE && Y_MAX_LENGTH >= Y_BED_SIZE,
582 582
 /**
583 583
  * Single Stepper Dual Extruder with switching servo
584 584
  */
585
-#if ENABLED(SWITCHING_EXTRUDER)
586
-  #if ENABLED(SINGLENOZZLE)
587
-    #error "SWITCHING_EXTRUDER and SINGLENOZZLE are incompatible."
588
-  #elif NUM_SERVOS < 1
589
-    #error "SWITCHING_EXTRUDER requires NUM_SERVOS >= 1."
590
-  #endif
585
+#if ENABLED(SWITCHING_EXTRUDER) && NUM_SERVOS < 1
586
+  #error "SWITCHING_EXTRUDER requires NUM_SERVOS >= 1."
591 587
 #endif
592 588
 
593 589
 /**

+ 2
- 4
Marlin/src/module/stepper.cpp View File

@@ -1841,10 +1841,8 @@ uint32_t Stepper::stepper_block_phase_isr() {
1841 1841
         current_adv_steps++;
1842 1842
         interval = eISR_Rate;
1843 1843
       }
1844
-      else {
1845
-        interval = ADV_NEVER;
1846
-        eISR_Rate = ADV_NEVER;
1847
-      }
1844
+      else
1845
+        interval = eISR_Rate = ADV_NEVER;
1848 1846
     }
1849 1847
     else
1850 1848
       interval = ADV_NEVER;

+ 6
- 0
Marlin/src/module/temperature.h View File

@@ -42,6 +42,12 @@
42 42
   #define SOFT_PWM_SCALE 0
43 43
 #endif
44 44
 
45
+#if HOTENDS == 1
46
+  #define HOTEND_INDEX  0
47
+#else
48
+  #define HOTEND_INDEX  e
49
+#endif
50
+
45 51
 /**
46 52
  * States for ADC reading in the ISR
47 53
  */

Loading…
Cancel
Save