Browse Source

Merge pull request #4621 from thinkyhead/rc_fan_set_output

Init PWM-able AUTO_FAN pins with SET_OUTPUT
Scott Lahteine 8 years ago
parent
commit
dcd26b0403
2 changed files with 76 additions and 46 deletions
  1. 8
    2
      Marlin/Conditionals_post.h
  2. 68
    44
      Marlin/temperature.cpp

+ 8
- 2
Marlin/Conditionals_post.h View File

440
   #define HAS_AUTO_FAN_1 (PIN_EXISTS(EXTRUDER_1_AUTO_FAN))
440
   #define HAS_AUTO_FAN_1 (PIN_EXISTS(EXTRUDER_1_AUTO_FAN))
441
   #define HAS_AUTO_FAN_2 (PIN_EXISTS(EXTRUDER_2_AUTO_FAN))
441
   #define HAS_AUTO_FAN_2 (PIN_EXISTS(EXTRUDER_2_AUTO_FAN))
442
   #define HAS_AUTO_FAN_3 (PIN_EXISTS(EXTRUDER_3_AUTO_FAN))
442
   #define HAS_AUTO_FAN_3 (PIN_EXISTS(EXTRUDER_3_AUTO_FAN))
443
+  #define AUTO_1_IS_0 (EXTRUDER_1_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN)
444
+  #define AUTO_2_IS_0 (EXTRUDER_2_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN)
445
+  #define AUTO_2_IS_1 (EXTRUDER_2_AUTO_FAN_PIN == EXTRUDER_1_AUTO_FAN_PIN)
446
+  #define AUTO_3_IS_0 (EXTRUDER_3_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN)
447
+  #define AUTO_3_IS_1 (EXTRUDER_3_AUTO_FAN_PIN == EXTRUDER_1_AUTO_FAN_PIN)
448
+  #define AUTO_3_IS_2 (EXTRUDER_3_AUTO_FAN_PIN == EXTRUDER_2_AUTO_FAN_PIN)
443
   #define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3)
449
   #define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3)
444
   #define HAS_FAN0 (PIN_EXISTS(FAN))
450
   #define HAS_FAN0 (PIN_EXISTS(FAN))
445
-  #define HAS_FAN1 (PIN_EXISTS(FAN1) && CONTROLLERFAN_PIN != FAN1_PIN && EXTRUDER_0_AUTO_FAN_PIN != FAN1_PIN && EXTRUDER_1_AUTO_FAN_PIN != FAN1_PIN && EXTRUDER_2_AUTO_FAN_PIN != FAN1_PIN)
446
-  #define HAS_FAN2 (PIN_EXISTS(FAN2) && CONTROLLERFAN_PIN != FAN2_PIN && EXTRUDER_0_AUTO_FAN_PIN != FAN2_PIN && EXTRUDER_1_AUTO_FAN_PIN != FAN2_PIN && EXTRUDER_2_AUTO_FAN_PIN != FAN2_PIN)
451
+  #define HAS_FAN1 (PIN_EXISTS(FAN1) && CONTROLLERFAN_PIN != FAN1_PIN && EXTRUDER_0_AUTO_FAN_PIN != FAN1_PIN && EXTRUDER_1_AUTO_FAN_PIN != FAN1_PIN && EXTRUDER_2_AUTO_FAN_PIN != FAN1_PIN && EXTRUDER_3_AUTO_FAN_PIN != FAN1_PIN)
452
+  #define HAS_FAN2 (PIN_EXISTS(FAN2) && CONTROLLERFAN_PIN != FAN2_PIN && EXTRUDER_0_AUTO_FAN_PIN != FAN2_PIN && EXTRUDER_1_AUTO_FAN_PIN != FAN2_PIN && EXTRUDER_2_AUTO_FAN_PIN != FAN2_PIN && EXTRUDER_3_AUTO_FAN_PIN != FAN2_PIN)
447
   #define HAS_CONTROLLERFAN (PIN_EXISTS(CONTROLLERFAN))
453
   #define HAS_CONTROLLERFAN (PIN_EXISTS(CONTROLLERFAN))
448
   #define HAS_SERVOS (defined(NUM_SERVOS) && NUM_SERVOS > 0)
454
   #define HAS_SERVOS (defined(NUM_SERVOS) && NUM_SERVOS > 0)
449
   #define HAS_SERVO_0 (PIN_EXISTS(SERVO0))
455
   #define HAS_SERVO_0 (PIN_EXISTS(SERVO0))

+ 68
- 44
Marlin/temperature.cpp View File

185
 #endif
185
 #endif
186
 
186
 
187
 #if HAS_AUTO_FAN
187
 #if HAS_AUTO_FAN
188
-  millis_t Temperature::next_auto_fan_check_ms;
188
+  millis_t Temperature::next_auto_fan_check_ms = 0;
189
 #endif
189
 #endif
190
 
190
 
191
 unsigned char Temperature::soft_pwm[HOTENDS];
191
 unsigned char Temperature::soft_pwm[HOTENDS];
465
 
465
 
466
   void Temperature::checkExtruderAutoFans() {
466
   void Temperature::checkExtruderAutoFans() {
467
     const int8_t fanPin[] = { EXTRUDER_0_AUTO_FAN_PIN, EXTRUDER_1_AUTO_FAN_PIN, EXTRUDER_2_AUTO_FAN_PIN, EXTRUDER_3_AUTO_FAN_PIN };
467
     const int8_t fanPin[] = { EXTRUDER_0_AUTO_FAN_PIN, EXTRUDER_1_AUTO_FAN_PIN, EXTRUDER_2_AUTO_FAN_PIN, EXTRUDER_3_AUTO_FAN_PIN };
468
-    const int fanBit[] = { 0,
469
-      EXTRUDER_1_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN ? 0 : 1,
470
-      EXTRUDER_2_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN ? 0 :
471
-      EXTRUDER_2_AUTO_FAN_PIN == EXTRUDER_1_AUTO_FAN_PIN ? 1 : 2,
472
-      EXTRUDER_3_AUTO_FAN_PIN == EXTRUDER_0_AUTO_FAN_PIN ? 0 :
473
-      EXTRUDER_3_AUTO_FAN_PIN == EXTRUDER_1_AUTO_FAN_PIN ? 1 :
474
-      EXTRUDER_3_AUTO_FAN_PIN == EXTRUDER_2_AUTO_FAN_PIN ? 2 : 3
468
+    const int fanBit[] = {
469
+                    0,
470
+      AUTO_1_IS_0 ? 0 :               1,
471
+      AUTO_2_IS_0 ? 0 : AUTO_2_IS_1 ? 1 :               2,
472
+      AUTO_3_IS_0 ? 0 : AUTO_3_IS_1 ? 1 : AUTO_3_IS_2 ? 2 : 3
475
     };
473
     };
476
     uint8_t fanState = 0;
474
     uint8_t fanState = 0;
475
+ 
477
     HOTEND_LOOP() {
476
     HOTEND_LOOP() {
478
       if (current_temperature[e] > EXTRUDER_AUTO_FAN_TEMPERATURE)
477
       if (current_temperature[e] > EXTRUDER_AUTO_FAN_TEMPERATURE)
479
         SBI(fanState, fanBit[e]);
478
         SBI(fanState, fanBit[e]);
480
     }
479
     }
480
+ 
481
     uint8_t fanDone = 0;
481
     uint8_t fanDone = 0;
482
-    for (int8_t f = 0; f <= 3; f++) {
482
+    for (int8_t f = 0; f < COUNT(fanPin); f++) {
483
       int8_t pin = fanPin[f];
483
       int8_t pin = fanPin[f];
484
       if (pin >= 0 && !TEST(fanDone, fanBit[f])) {
484
       if (pin >= 0 && !TEST(fanDone, fanBit[f])) {
485
         unsigned char newFanSpeed = TEST(fanState, fanBit[f]) ? EXTRUDER_AUTO_FAN_SPEED : 0;
485
         unsigned char newFanSpeed = TEST(fanState, fanBit[f]) ? EXTRUDER_AUTO_FAN_SPEED : 0;
987
     SET_OUTPUT(HEATER_BED_PIN);
987
     SET_OUTPUT(HEATER_BED_PIN);
988
   #endif
988
   #endif
989
 
989
 
990
-  #if ENABLED(FAST_PWM_FAN) || ENABLED(FAN_SOFT_PWM)
991
-
992
-    #if HAS_FAN0
993
-      SET_OUTPUT(FAN_PIN);
994
-      #if ENABLED(FAST_PWM_FAN)
995
-        setPwmFrequency(FAN_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
996
-      #endif
997
-      #if ENABLED(FAN_SOFT_PWM)
998
-        soft_pwm_fan[0] = fanSpeedSoftPwm[0] / 2;
999
-      #endif
990
+  #if HAS_FAN0
991
+    SET_OUTPUT(FAN_PIN);
992
+    #if ENABLED(FAST_PWM_FAN)
993
+      setPwmFrequency(FAN_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
1000
     #endif
994
     #endif
1001
-
1002
-    #if HAS_FAN1
1003
-      SET_OUTPUT(FAN1_PIN);
1004
-      #if ENABLED(FAST_PWM_FAN)
1005
-        setPwmFrequency(FAN1_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
1006
-      #endif
1007
-      #if ENABLED(FAN_SOFT_PWM)
1008
-        soft_pwm_fan[1] = fanSpeedSoftPwm[1] / 2;
1009
-      #endif
995
+    #if ENABLED(FAN_SOFT_PWM)
996
+      soft_pwm_fan[0] = fanSpeedSoftPwm[0] / 2;
1010
     #endif
997
     #endif
998
+  #endif
1011
 
999
 
1012
-    #if HAS_FAN2
1013
-      SET_OUTPUT(FAN2_PIN);
1014
-      #if ENABLED(FAST_PWM_FAN)
1015
-        setPwmFrequency(FAN2_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
1016
-      #endif
1017
-      #if ENABLED(FAN_SOFT_PWM)
1018
-        soft_pwm_fan[2] = fanSpeedSoftPwm[2] / 2;
1019
-      #endif
1000
+  #if HAS_FAN1
1001
+    SET_OUTPUT(FAN1_PIN);
1002
+    #if ENABLED(FAST_PWM_FAN)
1003
+      setPwmFrequency(FAN1_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
1004
+    #endif
1005
+    #if ENABLED(FAN_SOFT_PWM)
1006
+      soft_pwm_fan[1] = fanSpeedSoftPwm[1] / 2;
1020
     #endif
1007
     #endif
1008
+  #endif
1021
 
1009
 
1022
-  #endif // FAST_PWM_FAN || FAN_SOFT_PWM
1010
+  #if HAS_FAN2
1011
+    SET_OUTPUT(FAN2_PIN);
1012
+    #if ENABLED(FAST_PWM_FAN)
1013
+      setPwmFrequency(FAN2_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
1014
+    #endif
1015
+    #if ENABLED(FAN_SOFT_PWM)
1016
+      soft_pwm_fan[2] = fanSpeedSoftPwm[2] / 2;
1017
+    #endif
1018
+  #endif
1023
 
1019
 
1024
   #if ENABLED(HEATER_0_USES_MAX6675)
1020
   #if ENABLED(HEATER_0_USES_MAX6675)
1025
 
1021
 
1068
   #endif
1064
   #endif
1069
 
1065
 
1070
   #if HAS_AUTO_FAN_0
1066
   #if HAS_AUTO_FAN_0
1071
-    pinMode(EXTRUDER_0_AUTO_FAN_PIN, OUTPUT);
1067
+    #if EXTRUDER_0_AUTO_FAN_PIN == FAN1_PIN
1068
+      SET_OUTPUT(EXTRUDER_0_AUTO_FAN_PIN);
1069
+      #if ENABLED(FAST_PWM_FAN)
1070
+        setPwmFrequency(EXTRUDER_0_AUTO_FAN_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
1071
+      #endif
1072
+    #else
1073
+      pinMode(EXTRUDER_0_AUTO_FAN_PIN, OUTPUT);
1074
+    #endif
1072
   #endif
1075
   #endif
1073
-  #if HAS_AUTO_FAN_1 && (EXTRUDER_1_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN)
1074
-    pinMode(EXTRUDER_1_AUTO_FAN_PIN, OUTPUT);
1076
+  #if HAS_AUTO_FAN_1 && !AUTO_1_IS_0
1077
+    #if EXTRUDER_1_AUTO_FAN_PIN == FAN1_PIN
1078
+      SET_OUTPUT(EXTRUDER_1_AUTO_FAN_PIN);
1079
+      #if ENABLED(FAST_PWM_FAN)
1080
+        setPwmFrequency(EXTRUDER_1_AUTO_FAN_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
1081
+      #endif
1082
+    #else
1083
+      pinMode(EXTRUDER_1_AUTO_FAN_PIN, OUTPUT);
1084
+    #endif
1075
   #endif
1085
   #endif
1076
-  #if HAS_AUTO_FAN_2 && (EXTRUDER_2_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN) && (EXTRUDER_2_AUTO_FAN_PIN != EXTRUDER_1_AUTO_FAN_PIN)
1077
-    pinMode(EXTRUDER_2_AUTO_FAN_PIN, OUTPUT);
1086
+  #if HAS_AUTO_FAN_2 && !AUTO_2_IS_0 && !AUTO_2_IS_1
1087
+    #if EXTRUDER_2_AUTO_FAN_PIN == FAN1_PIN
1088
+      SET_OUTPUT(EXTRUDER_2_AUTO_FAN_PIN);
1089
+      #if ENABLED(FAST_PWM_FAN)
1090
+        setPwmFrequency(EXTRUDER_2_AUTO_FAN_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
1091
+      #endif
1092
+    #else
1093
+      pinMode(EXTRUDER_2_AUTO_FAN_PIN, OUTPUT);
1094
+    #endif
1078
   #endif
1095
   #endif
1079
-  #if HAS_AUTO_FAN_3 && (EXTRUDER_3_AUTO_FAN_PIN != EXTRUDER_0_AUTO_FAN_PIN) && (EXTRUDER_3_AUTO_FAN_PIN != EXTRUDER_1_AUTO_FAN_PIN) && (EXTRUDER_3_AUTO_FAN_PIN != EXTRUDER_2_AUTO_FAN_PIN)
1080
-    pinMode(EXTRUDER_3_AUTO_FAN_PIN, OUTPUT);
1096
+  #if HAS_AUTO_FAN_3 && !AUTO_3_IS_0 && !AUTO_3_IS_1 && !AUTO_3_IS_2
1097
+    #if EXTRUDER_3_AUTO_FAN_PIN == FAN1_PIN
1098
+      SET_OUTPUT(EXTRUDER_3_AUTO_FAN_PIN);
1099
+      #if ENABLED(FAST_PWM_FAN)
1100
+        setPwmFrequency(EXTRUDER_3_AUTO_FAN_PIN, 1); // No prescaling. Pwm frequency = F_CPU/256/8
1101
+      #endif
1102
+    #else
1103
+      pinMode(EXTRUDER_3_AUTO_FAN_PIN, OUTPUT);
1104
+    #endif
1081
   #endif
1105
   #endif
1082
 
1106
 
1083
   // Use timer0 for temperature measurement
1107
   // Use timer0 for temperature measurement

Loading…
Cancel
Save