|
@@ -145,7 +145,7 @@ static volatile bool temp_meas_ready = false;
|
145
|
145
|
static float temp_iState_min_bed;
|
146
|
146
|
static float temp_iState_max_bed;
|
147
|
147
|
#else //PIDTEMPBED
|
148
|
|
- static unsigned long previous_millis_bed_heater;
|
|
148
|
+ static unsigned long previous_millis_bed_heater;
|
149
|
149
|
#endif //PIDTEMPBED
|
150
|
150
|
static unsigned char soft_pwm[EXTRUDERS];
|
151
|
151
|
|
|
@@ -243,7 +243,7 @@ void PID_autotune(float temp, int extruder, int ncycles)
|
243
|
243
|
SERIAL_ECHOLN(MSG_PID_BAD_EXTRUDER_NUM);
|
244
|
244
|
return;
|
245
|
245
|
}
|
246
|
|
-
|
|
246
|
+
|
247
|
247
|
SERIAL_ECHOLN(MSG_PID_AUTOTUNE_START);
|
248
|
248
|
|
249
|
249
|
disable_heater(); // switch off all heaters.
|
|
@@ -755,8 +755,8 @@ void manage_heater() {
|
755
|
755
|
#ifdef FILAMENT_SENSOR
|
756
|
756
|
if (filament_sensor) {
|
757
|
757
|
meas_shift_index = delay_index1 - meas_delay_cm;
|
758
|
|
- if (meas_shift_index < 0) meas_shift_index += MAX_MEASUREMENT_DELAY + 1; //loop around buffer if needed
|
759
|
|
-
|
|
758
|
+ if (meas_shift_index < 0) meas_shift_index += MAX_MEASUREMENT_DELAY + 1; //loop around buffer if needed
|
|
759
|
+
|
760
|
760
|
// Get the delayed info and add 100 to reconstitute to a percent of
|
761
|
761
|
// the nominal filament diameter then square it to get an area
|
762
|
762
|
meas_shift_index = constrain(meas_shift_index, 0, MAX_MEASUREMENT_DELAY);
|
|
@@ -1259,10 +1259,7 @@ enum TempState {
|
1259
|
1259
|
ISR(TIMER0_COMPB_vect) {
|
1260
|
1260
|
//these variables are only accesible from the ISR, but static, so they don't lose their value
|
1261
|
1261
|
static unsigned char temp_count = 0;
|
1262
|
|
- static unsigned long raw_temp_0_value = 0;
|
1263
|
|
- static unsigned long raw_temp_1_value = 0;
|
1264
|
|
- static unsigned long raw_temp_2_value = 0;
|
1265
|
|
- static unsigned long raw_temp_3_value = 0;
|
|
1262
|
+ static unsigned long raw_temp_value[EXTRUDERS] = { 0 };
|
1266
|
1263
|
static unsigned long raw_temp_bed_value = 0;
|
1267
|
1264
|
static TempState temp_state = StartupDelay;
|
1268
|
1265
|
static unsigned char pwm_count = BIT(SOFT_PWM_SCALE);
|
|
@@ -1474,7 +1471,7 @@ ISR(TIMER0_COMPB_vect) {
|
1474
|
1471
|
break;
|
1475
|
1472
|
case MeasureTemp_0:
|
1476
|
1473
|
#if HAS_TEMP_0
|
1477
|
|
- raw_temp_0_value += ADC;
|
|
1474
|
+ raw_temp_value[0] += ADC;
|
1478
|
1475
|
#endif
|
1479
|
1476
|
temp_state = PrepareTemp_BED;
|
1480
|
1477
|
break;
|
|
@@ -1500,7 +1497,7 @@ ISR(TIMER0_COMPB_vect) {
|
1500
|
1497
|
break;
|
1501
|
1498
|
case MeasureTemp_1:
|
1502
|
1499
|
#if HAS_TEMP_1
|
1503
|
|
- raw_temp_1_value += ADC;
|
|
1500
|
+ raw_temp_value[1] += ADC;
|
1504
|
1501
|
#endif
|
1505
|
1502
|
temp_state = PrepareTemp_2;
|
1506
|
1503
|
break;
|
|
@@ -1513,7 +1510,7 @@ ISR(TIMER0_COMPB_vect) {
|
1513
|
1510
|
break;
|
1514
|
1511
|
case MeasureTemp_2:
|
1515
|
1512
|
#if HAS_TEMP_2
|
1516
|
|
- raw_temp_2_value += ADC;
|
|
1513
|
+ raw_temp_value[2] += ADC;
|
1517
|
1514
|
#endif
|
1518
|
1515
|
temp_state = PrepareTemp_3;
|
1519
|
1516
|
break;
|
|
@@ -1526,7 +1523,7 @@ ISR(TIMER0_COMPB_vect) {
|
1526
|
1523
|
break;
|
1527
|
1524
|
case MeasureTemp_3:
|
1528
|
1525
|
#if HAS_TEMP_3
|
1529
|
|
- raw_temp_3_value += ADC;
|
|
1526
|
+ raw_temp_value[3] += ADC;
|
1530
|
1527
|
#endif
|
1531
|
1528
|
temp_state = Prepare_FILWIDTH;
|
1532
|
1529
|
break;
|
|
@@ -1561,19 +1558,19 @@ ISR(TIMER0_COMPB_vect) {
|
1561
|
1558
|
if (temp_count >= OVERSAMPLENR) { // 10 * 16 * 1/(16000000/64/256) = 164ms.
|
1562
|
1559
|
if (!temp_meas_ready) { //Only update the raw values if they have been read. Else we could be updating them during reading.
|
1563
|
1560
|
#ifndef HEATER_0_USES_MAX6675
|
1564
|
|
- current_temperature_raw[0] = raw_temp_0_value;
|
|
1561
|
+ current_temperature_raw[0] = raw_temp_value[0];
|
1565
|
1562
|
#endif
|
1566
|
1563
|
#if EXTRUDERS > 1
|
1567
|
|
- current_temperature_raw[1] = raw_temp_1_value;
|
|
1564
|
+ current_temperature_raw[1] = raw_temp_value[1];
|
1568
|
1565
|
#if EXTRUDERS > 2
|
1569
|
|
- current_temperature_raw[2] = raw_temp_2_value;
|
|
1566
|
+ current_temperature_raw[2] = raw_temp_value[2];
|
1570
|
1567
|
#if EXTRUDERS > 3
|
1571
|
|
- current_temperature_raw[3] = raw_temp_3_value;
|
|
1568
|
+ current_temperature_raw[3] = raw_temp_value[3];
|
1572
|
1569
|
#endif
|
1573
|
1570
|
#endif
|
1574
|
1571
|
#endif
|
1575
|
1572
|
#ifdef TEMP_SENSOR_1_AS_REDUNDANT
|
1576
|
|
- redundant_temperature_raw = raw_temp_1_value;
|
|
1573
|
+ redundant_temperature_raw = raw_temp_value[1];
|
1577
|
1574
|
#endif
|
1578
|
1575
|
current_temperature_bed_raw = raw_temp_bed_value;
|
1579
|
1576
|
} //!temp_meas_ready
|
|
@@ -1585,31 +1582,67 @@ ISR(TIMER0_COMPB_vect) {
|
1585
|
1582
|
|
1586
|
1583
|
temp_meas_ready = true;
|
1587
|
1584
|
temp_count = 0;
|
1588
|
|
- raw_temp_0_value = 0;
|
1589
|
|
- raw_temp_1_value = 0;
|
1590
|
|
- raw_temp_2_value = 0;
|
1591
|
|
- raw_temp_3_value = 0;
|
|
1585
|
+ for (int i = 0; i < EXTRUDERS; i++) raw_temp_value[i] = 0;
|
1592
|
1586
|
raw_temp_bed_value = 0;
|
1593
|
1587
|
|
1594
|
1588
|
#if HEATER_0_RAW_LO_TEMP > HEATER_0_RAW_HI_TEMP
|
1595
|
|
- #define MAXTEST <=
|
1596
|
|
- #define MINTEST >=
|
|
1589
|
+ #define GE0 <=
|
|
1590
|
+ #define LE0 >=
|
1597
|
1591
|
#else
|
1598
|
|
- #define MAXTEST >=
|
1599
|
|
- #define MINTEST <=
|
|
1592
|
+ #define GE0 >=
|
|
1593
|
+ #define LE0 <=
|
1600
|
1594
|
#endif
|
|
1595
|
+ if (current_temperature_raw[0] GE0 maxttemp_raw[0]) max_temp_error(0);
|
|
1596
|
+ if (current_temperature_raw[0] LE0 minttemp_raw[0]) min_temp_error(0);
|
|
1597
|
+
|
|
1598
|
+ #if EXTRUDERS > 1
|
|
1599
|
+ #if HEATER_1_RAW_LO_TEMP > HEATER_1_RAW_HI_TEMP
|
|
1600
|
+ #define GE1 <=
|
|
1601
|
+ #define LE1 >=
|
|
1602
|
+ #else
|
|
1603
|
+ #define GE1 >=
|
|
1604
|
+ #define LE1 <=
|
|
1605
|
+ #endif
|
|
1606
|
+ if (current_temperature_raw[1] GE1 maxttemp_raw[1]) max_temp_error(1);
|
|
1607
|
+ if (current_temperature_raw[1] LE1 minttemp_raw[1]) min_temp_error(1);
|
|
1608
|
+ #if EXTRUDERS > 2
|
|
1609
|
+ #if HEATER_2_RAW_LO_TEMP > HEATER_2_RAW_HI_TEMP
|
|
1610
|
+ #define GE2 <=
|
|
1611
|
+ #define LE2 >=
|
|
1612
|
+ #else
|
|
1613
|
+ #define GE2 >=
|
|
1614
|
+ #define LE2 <=
|
|
1615
|
+ #endif
|
|
1616
|
+ if (current_temperature_raw[2] GE2 maxttemp_raw[2]) max_temp_error(2);
|
|
1617
|
+ if (current_temperature_raw[2] LE2 minttemp_raw[2]) min_temp_error(2);
|
|
1618
|
+ #if EXTRUDERS > 3
|
|
1619
|
+ #if HEATER_3_RAW_LO_TEMP > HEATER_3_RAW_HI_TEMP
|
|
1620
|
+ #define GE3 <=
|
|
1621
|
+ #define LE3 >=
|
|
1622
|
+ #else
|
|
1623
|
+ #define GE3 >=
|
|
1624
|
+ #define LE3 <=
|
|
1625
|
+ #endif
|
|
1626
|
+ if (current_temperature_raw[3] GE3 maxttemp_raw[3]) max_temp_error(3);
|
|
1627
|
+ if (current_temperature_raw[3] LE3 minttemp_raw[3]) min_temp_error(3);
|
|
1628
|
+ #endif // EXTRUDERS > 3
|
|
1629
|
+ #endif // EXTRUDERS > 2
|
|
1630
|
+ #endif // EXTRUDERS > 1
|
1601
|
1631
|
|
1602
|
|
- for (int i=0; i<EXTRUDERS; i++) {
|
1603
|
|
- if (current_temperature_raw[i] MAXTEST maxttemp_raw[i]) max_temp_error(i);
|
1604
|
|
- else if (current_temperature_raw[i] MINTEST minttemp_raw[i]) min_temp_error(i);
|
1605
|
|
- }
|
1606
|
|
- /* No bed MINTEMP error? */
|
1607
|
1632
|
#if defined(BED_MAXTEMP) && (TEMP_SENSOR_BED != 0)
|
1608
|
|
- if (current_temperature_bed_raw MAXTEST bed_maxttemp_raw) {
|
1609
|
|
- target_temperature_bed = 0;
|
1610
|
|
- bed_max_temp_error();
|
1611
|
|
- }
|
|
1633
|
+ #if HEATER_BED_RAW_LO_TEMP > HEATER_BED_RAW_HI_TEMP
|
|
1634
|
+ #define GEBED <=
|
|
1635
|
+ #define LEBED >=
|
|
1636
|
+ #else
|
|
1637
|
+ #define GEBED >=
|
|
1638
|
+ #define LEBED <=
|
|
1639
|
+ #endif
|
|
1640
|
+ if (current_temperature_bed_raw GEBED bed_maxttemp_raw) {
|
|
1641
|
+ target_temperature_bed = 0;
|
|
1642
|
+ bed_max_temp_error();
|
|
1643
|
+ }
|
1612
|
1644
|
#endif
|
|
1645
|
+
|
1613
|
1646
|
} // temp_count >= OVERSAMPLENR
|
1614
|
1647
|
|
1615
|
1648
|
#ifdef BABYSTEPPING
|