Browse Source

Cleanup temperature code

- Get rid of unused temp states in the ISR, resulting in more frequent
temperature reading with fewer sensors
- Shrink code slightly in min/max testing
Scott Lahteine 10 years ago
parent
commit
6bdee87be3
1 changed files with 132 additions and 83 deletions
  1. 132
    83
      Marlin/temperature.cpp

+ 132
- 83
Marlin/temperature.cpp View File

1240
 enum TempState {
1240
 enum TempState {
1241
   PrepareTemp_0,
1241
   PrepareTemp_0,
1242
   MeasureTemp_0,
1242
   MeasureTemp_0,
1243
-  PrepareTemp_BED,
1244
-  MeasureTemp_BED,
1245
-  PrepareTemp_1,
1246
-  MeasureTemp_1,
1247
-  PrepareTemp_2,
1248
-  MeasureTemp_2,
1249
-  PrepareTemp_3,
1250
-  MeasureTemp_3,
1251
-  Prepare_FILWIDTH,
1252
-  Measure_FILWIDTH,
1243
+  #if HAS_TEMP_BED
1244
+    PrepareTemp_BED,
1245
+    MeasureTemp_BED,
1246
+  #endif
1247
+  #if HAS_TEMP_1
1248
+    PrepareTemp_1,
1249
+    MeasureTemp_1,
1250
+  #endif
1251
+  #if HAS_TEMP_2
1252
+    PrepareTemp_2,
1253
+    MeasureTemp_2,
1254
+  #endif
1255
+  #if HAS_TEMP_3
1256
+    PrepareTemp_3,
1257
+    MeasureTemp_3,
1258
+  #endif
1259
+  #if HAS_FILAMENT_SENSOR
1260
+    Prepare_FILWIDTH,
1261
+    Measure_FILWIDTH,
1262
+  #endif
1253
   StartupDelay // Startup, delay initial temp reading a tiny bit so the hardware can settle
1263
   StartupDelay // Startup, delay initial temp reading a tiny bit so the hardware can settle
1254
 };
1264
 };
1255
 
1265
 
1473
       #if HAS_TEMP_0
1483
       #if HAS_TEMP_0
1474
         raw_temp_value[0] += ADC;
1484
         raw_temp_value[0] += ADC;
1475
       #endif
1485
       #endif
1476
-      temp_state = PrepareTemp_BED;
1486
+      temp_state =
1487
+        #if HAS_TEMP_BED
1488
+          PrepareTemp_BED
1489
+        #elif HAS_TEMP_1
1490
+          PrepareTemp_1
1491
+        #elif HAS_TEMP_2
1492
+          PrepareTemp_2
1493
+        #elif HAS_TEMP_3
1494
+          PrepareTemp_3
1495
+        #elif HAS_FILAMENT_SENSOR
1496
+          Prepare_FILWIDTH
1497
+        #else
1498
+          PrepareTemp_0
1499
+        #endif
1500
+      ;
1477
       break;
1501
       break;
1478
-    case PrepareTemp_BED:
1479
-      #if HAS_TEMP_BED
1502
+
1503
+    #if HAS_TEMP_BED
1504
+      case PrepareTemp_BED:
1480
         START_ADC(TEMP_BED_PIN);
1505
         START_ADC(TEMP_BED_PIN);
1481
-      #endif
1482
-      lcd_buttons_update();
1483
-      temp_state = MeasureTemp_BED;
1484
-      break;
1485
-    case MeasureTemp_BED:
1486
-      #if HAS_TEMP_BED
1506
+        lcd_buttons_update();
1507
+        temp_state = MeasureTemp_BED;
1508
+        break;
1509
+      case MeasureTemp_BED:
1487
         raw_temp_bed_value += ADC;
1510
         raw_temp_bed_value += ADC;
1488
-      #endif
1489
-      temp_state = PrepareTemp_1;
1490
-      break;
1491
-    case PrepareTemp_1:
1492
-      #if HAS_TEMP_1
1511
+        temp_state =
1512
+          #if HAS_TEMP_1
1513
+            PrepareTemp_1
1514
+          #elif HAS_TEMP_2
1515
+            PrepareTemp_2
1516
+          #elif HAS_TEMP_3
1517
+            PrepareTemp_3
1518
+          #elif HAS_FILAMENT_SENSOR
1519
+            Prepare_FILWIDTH
1520
+          #else
1521
+            PrepareTemp_0
1522
+          #endif
1523
+        ;
1524
+        break;
1525
+    #endif
1526
+
1527
+    #if HAS_TEMP_1
1528
+      case PrepareTemp_1:
1493
         START_ADC(TEMP_1_PIN);
1529
         START_ADC(TEMP_1_PIN);
1494
-      #endif
1495
-      lcd_buttons_update();
1496
-      temp_state = MeasureTemp_1;
1497
-      break;
1498
-    case MeasureTemp_1:
1499
-      #if HAS_TEMP_1
1530
+        lcd_buttons_update();
1531
+        temp_state = MeasureTemp_1;
1532
+        break;
1533
+      case MeasureTemp_1:
1500
         raw_temp_value[1] += ADC;
1534
         raw_temp_value[1] += ADC;
1501
-      #endif
1502
-      temp_state = PrepareTemp_2;
1503
-      break;
1504
-    case PrepareTemp_2:
1505
-      #if HAS_TEMP_2
1535
+        temp_state =
1536
+          #if HAS_TEMP_2
1537
+            PrepareTemp_2
1538
+          #elif HAS_TEMP_3
1539
+            PrepareTemp_3
1540
+          #elif HAS_FILAMENT_SENSOR
1541
+            Prepare_FILWIDTH
1542
+          #else
1543
+            PrepareTemp_0
1544
+          #endif
1545
+        ;
1546
+        break;
1547
+    #endif
1548
+
1549
+    #if HAS_TEMP_2
1550
+      case PrepareTemp_2:
1506
         START_ADC(TEMP_2_PIN);
1551
         START_ADC(TEMP_2_PIN);
1507
-      #endif
1508
-      lcd_buttons_update();
1509
-      temp_state = MeasureTemp_2;
1510
-      break;
1511
-    case MeasureTemp_2:
1512
-      #if HAS_TEMP_2
1552
+        lcd_buttons_update();
1553
+        temp_state = MeasureTemp_2;
1554
+        break;
1555
+      case MeasureTemp_2:
1513
         raw_temp_value[2] += ADC;
1556
         raw_temp_value[2] += ADC;
1514
-      #endif
1515
-      temp_state = PrepareTemp_3;
1516
-      break;
1517
-    case PrepareTemp_3:
1518
-      #if HAS_TEMP_3
1557
+        temp_state =
1558
+          #if HAS_TEMP_3
1559
+            PrepareTemp_3
1560
+          #elif HAS_FILAMENT_SENSOR
1561
+            Prepare_FILWIDTH
1562
+          #else
1563
+            PrepareTemp_0
1564
+          #endif
1565
+        ;
1566
+        break;
1567
+    #endif
1568
+
1569
+    #if HAS_TEMP_3
1570
+      case PrepareTemp_3:
1519
         START_ADC(TEMP_3_PIN);
1571
         START_ADC(TEMP_3_PIN);
1520
-      #endif
1521
-      lcd_buttons_update();
1522
-      temp_state = MeasureTemp_3;
1523
-      break;
1524
-    case MeasureTemp_3:
1525
-      #if HAS_TEMP_3
1572
+        lcd_buttons_update();
1573
+        temp_state = MeasureTemp_3;
1574
+        break;
1575
+      case MeasureTemp_3:
1526
         raw_temp_value[3] += ADC;
1576
         raw_temp_value[3] += ADC;
1527
-      #endif
1528
-      temp_state = Prepare_FILWIDTH;
1529
-      break;
1530
-    case Prepare_FILWIDTH:
1531
-      #if HAS_FILAMENT_SENSOR
1577
+        temp_state =
1578
+          #if HAS_FILAMENT_SENSOR
1579
+            Prepare_FILWIDTH
1580
+          #else
1581
+            PrepareTemp_0
1582
+          #endif
1583
+        ;
1584
+        break;
1585
+    #endif
1586
+
1587
+    #if HAS_FILAMENT_SENSOR
1588
+      case Prepare_FILWIDTH:
1532
         START_ADC(FILWIDTH_PIN);
1589
         START_ADC(FILWIDTH_PIN);
1533
-      #endif
1534
-      lcd_buttons_update();
1535
-      temp_state = Measure_FILWIDTH;
1536
-      break;
1537
-    case Measure_FILWIDTH:
1538
-      #if HAS_FILAMENT_SENSOR
1590
+        lcd_buttons_update();
1591
+        temp_state = Measure_FILWIDTH;
1592
+        break;
1593
+      case Measure_FILWIDTH:
1539
         // raw_filwidth_value += ADC;  //remove to use an IIR filter approach
1594
         // raw_filwidth_value += ADC;  //remove to use an IIR filter approach
1540
         if (ADC > 102) { //check that ADC is reading a voltage > 0.5 volts, otherwise don't take in the data.
1595
         if (ADC > 102) { //check that ADC is reading a voltage > 0.5 volts, otherwise don't take in the data.
1541
           raw_filwidth_value -= (raw_filwidth_value>>7);  //multiply raw_filwidth_value by 127/128
1596
           raw_filwidth_value -= (raw_filwidth_value>>7);  //multiply raw_filwidth_value by 127/128
1542
           raw_filwidth_value += ((unsigned long)ADC<<7);  //add new ADC reading
1597
           raw_filwidth_value += ((unsigned long)ADC<<7);  //add new ADC reading
1543
         }
1598
         }
1544
-      #endif
1545
-      temp_state = PrepareTemp_0;
1546
-      temp_count++;
1547
-      break;
1599
+        temp_state = PrepareTemp_0;
1600
+        temp_count++;
1601
+        break;
1602
+    #endif
1603
+
1548
     case StartupDelay:
1604
     case StartupDelay:
1549
       temp_state = PrepareTemp_0;
1605
       temp_state = PrepareTemp_0;
1550
       break;
1606
       break;
1554
     //   SERIAL_ERRORLNPGM("Temp measurement error!");
1610
     //   SERIAL_ERRORLNPGM("Temp measurement error!");
1555
     //   break;
1611
     //   break;
1556
   } // switch(temp_state)
1612
   } // switch(temp_state)
1557
-    
1613
+
1558
   if (temp_count >= OVERSAMPLENR) { // 10 * 16 * 1/(16000000/64/256)  = 164ms.
1614
   if (temp_count >= OVERSAMPLENR) { // 10 * 16 * 1/(16000000/64/256)  = 164ms.
1559
     if (!temp_meas_ready) { //Only update the raw values if they have been read. Else we could be updating them during reading.
1615
     if (!temp_meas_ready) { //Only update the raw values if they have been read. Else we could be updating them during reading.
1560
       #ifndef HEATER_0_USES_MAX6675
1616
       #ifndef HEATER_0_USES_MAX6675
1579
     #if HAS_FILAMENT_SENSOR
1635
     #if HAS_FILAMENT_SENSOR
1580
       current_raw_filwidth = raw_filwidth_value >> 10;  // Divide to get to 0-16384 range since we used 1/128 IIR filter approach
1636
       current_raw_filwidth = raw_filwidth_value >> 10;  // Divide to get to 0-16384 range since we used 1/128 IIR filter approach
1581
     #endif
1637
     #endif
1582
-    
1638
+
1583
     temp_meas_ready = true;
1639
     temp_meas_ready = true;
1584
     temp_count = 0;
1640
     temp_count = 0;
1585
     for (int i = 0; i < EXTRUDERS; i++) raw_temp_value[i] = 0;
1641
     for (int i = 0; i < EXTRUDERS; i++) raw_temp_value[i] = 0;
1587
 
1643
 
1588
     #if HEATER_0_RAW_LO_TEMP > HEATER_0_RAW_HI_TEMP
1644
     #if HEATER_0_RAW_LO_TEMP > HEATER_0_RAW_HI_TEMP
1589
       #define GE0 <=
1645
       #define GE0 <=
1590
-      #define LE0 >=
1591
     #else
1646
     #else
1592
       #define GE0 >=
1647
       #define GE0 >=
1593
-      #define LE0 <=
1594
     #endif
1648
     #endif
1595
     if (current_temperature_raw[0] GE0 maxttemp_raw[0]) max_temp_error(0);
1649
     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);
1650
+    if (minttemp_raw[0] GE0 current_temperature_raw[0]) min_temp_error(0);
1597
 
1651
 
1598
     #if EXTRUDERS > 1
1652
     #if EXTRUDERS > 1
1599
       #if HEATER_1_RAW_LO_TEMP > HEATER_1_RAW_HI_TEMP
1653
       #if HEATER_1_RAW_LO_TEMP > HEATER_1_RAW_HI_TEMP
1600
         #define GE1 <=
1654
         #define GE1 <=
1601
-        #define LE1 >=
1602
       #else
1655
       #else
1603
         #define GE1 >=
1656
         #define GE1 >=
1604
-        #define LE1 <=
1605
       #endif
1657
       #endif
1606
       if (current_temperature_raw[1] GE1 maxttemp_raw[1]) max_temp_error(1);
1658
       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);
1659
+      if (minttemp_raw[1] GE0 current_temperature_raw[1]) min_temp_error(1);
1660
+
1608
       #if EXTRUDERS > 2
1661
       #if EXTRUDERS > 2
1609
         #if HEATER_2_RAW_LO_TEMP > HEATER_2_RAW_HI_TEMP
1662
         #if HEATER_2_RAW_LO_TEMP > HEATER_2_RAW_HI_TEMP
1610
           #define GE2 <=
1663
           #define GE2 <=
1611
-          #define LE2 >=
1612
         #else
1664
         #else
1613
           #define GE2 >=
1665
           #define GE2 >=
1614
-          #define LE2 <=
1615
         #endif
1666
         #endif
1616
         if (current_temperature_raw[2] GE2 maxttemp_raw[2]) max_temp_error(2);
1667
         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);
1668
+        if (minttemp_raw[2] GE0 current_temperature_raw[2]) min_temp_error(2);
1669
+
1618
         #if EXTRUDERS > 3
1670
         #if EXTRUDERS > 3
1619
           #if HEATER_3_RAW_LO_TEMP > HEATER_3_RAW_HI_TEMP
1671
           #if HEATER_3_RAW_LO_TEMP > HEATER_3_RAW_HI_TEMP
1620
             #define GE3 <=
1672
             #define GE3 <=
1621
-            #define LE3 >=
1622
           #else
1673
           #else
1623
             #define GE3 >=
1674
             #define GE3 >=
1624
-            #define LE3 <=
1625
           #endif
1675
           #endif
1626
           if (current_temperature_raw[3] GE3 maxttemp_raw[3]) max_temp_error(3);
1676
           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);
1677
+          if (minttemp_raw[3] GE0 current_temperature_raw[3]) min_temp_error(3);
1678
+
1628
         #endif // EXTRUDERS > 3
1679
         #endif // EXTRUDERS > 3
1629
       #endif // EXTRUDERS > 2
1680
       #endif // EXTRUDERS > 2
1630
     #endif // EXTRUDERS > 1
1681
     #endif // EXTRUDERS > 1
1632
     #if defined(BED_MAXTEMP) && (TEMP_SENSOR_BED != 0)
1683
     #if defined(BED_MAXTEMP) && (TEMP_SENSOR_BED != 0)
1633
       #if HEATER_BED_RAW_LO_TEMP > HEATER_BED_RAW_HI_TEMP
1684
       #if HEATER_BED_RAW_LO_TEMP > HEATER_BED_RAW_HI_TEMP
1634
         #define GEBED <=
1685
         #define GEBED <=
1635
-        #define LEBED >=
1636
       #else
1686
       #else
1637
         #define GEBED >=
1687
         #define GEBED >=
1638
-        #define LEBED <=
1639
       #endif
1688
       #endif
1640
       if (current_temperature_bed_raw GEBED bed_maxttemp_raw) {
1689
       if (current_temperature_bed_raw GEBED bed_maxttemp_raw) {
1641
         target_temperature_bed = 0;
1690
         target_temperature_bed = 0;

Loading…
Cancel
Save