chiark / gitweb /
refactured temperature.cpp so that there are now abstract functions to access tempera...
authorBernhard Kubicek <kubicek@gmx.at>
Sun, 6 Nov 2011 13:03:41 +0000 (14:03 +0100)
committerBernhard Kubicek <kubicek@gmx.at>
Sun, 6 Nov 2011 13:03:41 +0000 (14:03 +0100)
Marlin/Configuration.h
Marlin/Marlin.pde
Marlin/temperature.cpp
Marlin/temperature.h
Marlin/ultralcd.pde

index 65c4f32a3c65758d9a67ce4a2d33cfe1676afcfc..8ad0e2282920e2b1657d3d3a7c05ca5e4392411b 100644 (file)
@@ -157,6 +157,7 @@ const int dropsegments=5; //everything with this number of steps  will be ignore
 //// Experimental watchdog and minimal temp
 // The watchdog waits for the watchperiod in milliseconds whenever an M104 or M109 increases the target temperature
 // If the temperature has not increased at the end of that period, the target temperature is set to zero. It can be reset with another M104/M109
+/// CURRENTLY NOT IMPLEMENTED AND UNUSEABLE
 //#define WATCHPERIOD 5000 //5 seconds
 
 // Actual temperature must be close to target for this long before M109 returns success
@@ -245,4 +246,4 @@ const int dropsegments=5; //everything with this number of steps  will be ignore
 #endif
 
 
-#endif\r
+#endif
index 92907a2d240c75cf55884ab1b033d3533daa0d93..698b137803fcf9b406b85d5bcdbfb2f3eb9846af 100644 (file)
@@ -150,10 +150,7 @@ extern float HeaterPower;
 const int sensitive_pins[] = SENSITIVE_PINS; // Sensitive pin list for M42
 
 float tt = 0, bt = 0;
-#ifdef WATCHPERIOD
-int watch_raw = -1000;
-unsigned long watchmillis = 0;
-#endif //WATCHPERIOD
+
 
 //Inactivity shutdown variables
 unsigned long previous_millis_cmd = 0;
@@ -817,28 +814,18 @@ inline void process_commands()
         }
         break;
       case 104: // M104
-                if (code_seen('S')) target_raw[TEMPSENSOR_HOTEND_0] = temp2analog(code_value());
-#ifdef PIDTEMP
-                pid_setpoint = code_value();
-#endif //PIDTEM
-        #ifdef WATCHPERIOD
-            if(target_raw[TEMPSENSOR_HOTEND_0] > current_raw[TEMPSENSOR_HOTEND_0]){
-                watchmillis = max(1,millis());
-                watch_raw[TEMPSENSOR_HOTEND_0] = current_raw[TEMPSENSOR_HOTEND_0];
-            }else{
-                watchmillis = 0;
-            }
-        #endif
+       if (code_seen('S')) setTargetHotend0(code_value());
+        setWatch();
         break;
       case 140: // M140 set bed temp
-                if (code_seen('S')) target_raw[TEMPSENSOR_BED] = temp2analogBed(code_value());
+       if (code_seen('S')) setTargetBed(code_value());
         break;
       case 105: // M105
         #if (TEMP_0_PIN > -1) || defined (HEATER_USES_AD595)
-                tt = analog2temp(current_raw[TEMPSENSOR_HOTEND_0]);
+                tt = degHotend0();
         #endif
         #if TEMP_1_PIN > -1
-                bt = analog2tempBed(current_raw[TEMPSENSOR_BED]);
+                bt = degBed();
         #endif
         #if (TEMP_0_PIN > -1) || defined (HEATER_USES_AD595)
             Serial.print("ok T:");
@@ -866,36 +853,27 @@ inline void process_commands()
         //break;
       case 109: {// M109 - Wait for extruder heater to reach target.
             LCD_MESSAGE("Heating...");
-               if (code_seen('S')) target_raw[TEMPSENSOR_HOTEND_0] = temp2analog(code_value());
-            #ifdef PIDTEMP
-            pid_setpoint = code_value();
-            #endif //PIDTEM
-            #ifdef WATCHPERIOD
-          if(target_raw[TEMPSENSOR_HOTEND_0]>current_raw[TEMPSENSOR_HOTEND_0]){
-              watchmillis = max(1,millis());
-              watch_raw[TEMPSENSOR_HOTEND_0] = current_raw[TEMPSENSOR_HOTEND_0];
-            } else {
-              watchmillis = 0;
-            }
-            #endif //WATCHPERIOD
+               if (code_seen('S')) setTargetHotend0(code_value());
+            
+            setWatch();
             codenum = millis(); 
      
                /* See if we are heating up or cooling down */
-              bool target_direction = (current_raw[TEMPSENSOR_HOTEND_0] < target_raw[TEMPSENSOR_HOTEND_0]); // true if heating, false if cooling
+              bool target_direction = isHeatingHotend0(); // true if heating, false if cooling
 
             #ifdef TEMP_RESIDENCY_TIME
             long residencyStart;
             residencyStart = -1;
             /* continue to loop until we have reached the target temp   
               _and_ until TEMP_RESIDENCY_TIME hasn't passed since we reached it */
-            while((target_direction ? (current_raw[TEMPSENSOR_HOTEND_0] < target_raw[TEMPSENSOR_HOTEND_0]) : (current_raw[TEMPSENSOR_HOTEND_0] > target_raw[TEMPSENSOR_HOTEND_0])) ||
+            while((target_direction ? (isHeatingHotend0()) : (isCoolingHotend0()) ||
                     (residencyStart > -1 && (millis() - residencyStart) < TEMP_RESIDENCY_TIME*1000) ) {
             #else
-            while ( target_direction ? (current_raw[TEMPSENSOR_HOTEND_0] < target_raw[TEMPSENSOR_HOTEND_0]) : (current_raw[TEMPSENSOR_HOTEND_0] > target_raw[TEMPSENSOR_HOTEND_0]) ) {
+            while ( target_direction ? (isHeatingHotend0()) : (isCoolingHotend0()) ) {
             #endif //TEMP_RESIDENCY_TIME
               if( (millis() - codenum) > 1000 ) { //Print Temp Reading every 1 second while heating up/cooling down
                 Serial.print("T:");
-              Serial.println( analog2temp(current_raw[TEMPSENSOR_HOTEND_0]) ); 
+              Serial.println( degHotend0() ); 
                 codenum = millis();
               }
               manage_heater();
@@ -903,9 +881,9 @@ inline void process_commands()
               #ifdef TEMP_RESIDENCY_TIME
                /* start/restart the TEMP_RESIDENCY_TIME timer whenever we reach target temp for the first time
                   or when current temp falls outside the hysteresis after target temp was reached */
-              if ((residencyStart == -1 &&  target_direction && current_raw[TEMPSENSOR_HOTEND_0] >= target_raw[TEMPSENSOR_HOTEND_0]) ||
-                  (residencyStart == -1 && !target_direction && current_raw[TEMPSENSOR_HOTEND_0] <= target_raw[TEMPSENSOR_HOTEND_0]) ||
-                  (residencyStart > -1 && labs(analog2temp(current_raw[TEMPSENSOR_HOTEND_0]) - analog2temp(target_raw[TEMPSENSOR_HOTEND_0])) > TEMP_HYSTERESIS) ) {
+              if ((residencyStart == -1 &&  target_direction && !isHeatingHotend0()) ||
+                  (residencyStart == -1 && !target_direction && !isCoolingHotend0()) ||
+                  (residencyStart > -1 && labs(degHotend0() - degTargetHotend0()) > TEMP_HYSTERESIS) ) {
                 residencyStart = millis();
               }
               #endif //TEMP_RESIDENCY_TIME
@@ -915,23 +893,23 @@ inline void process_commands()
           break;
       case 190: // M190 - Wait bed for heater to reach target.
       #if TEMP_1_PIN > -1
-          if (code_seen('S')) target_raw[TEMPSENSOR_BED] = temp2analog(code_value());
-        codenum = millis(); 
-          while(current_raw[TEMPSENSOR_BED] < target_raw[TEMPSENSOR_BED]) 
-                                {
-          if( (millis()-codenum) > 1000 ) //Print Temp Reading every 1 second while heating up.
+          if (code_seen('S')) setTargetBed(code_value());
+         codenum = millis(); 
+          while(isHeatingBed()) 
           {
-            float tt=analog2temp(current_raw[TEMPSENSOR_HOTEND_0]);
-            Serial.print("T:");
-            Serial.println( tt );
-            Serial.print("ok T:");
-            Serial.print( tt ); 
-            Serial.print(" B:");
-            Serial.println( analog2temp(current_raw[TEMPSENSOR_BED]) ); 
-            codenum = millis(); 
-          }
+           if( (millis()-codenum) > 1000 ) //Print Temp Reading every 1 second while heating up.
+           {
+             float tt=degHotend0();
+             Serial.print("T:");
+             Serial.println( tt );
+             Serial.print("ok T:");
+             Serial.print( tt ); 
+             Serial.print(" B:");
+             Serial.println( degBed() ); 
+             codenum = millis(); 
+           }
             manage_heater();
-        }
+         }
       #endif
       break;
 #if FAN_PIN > -1
@@ -1331,24 +1309,8 @@ void wd_reset() {
 
 inline void kill()
 {
-  #if TEMP_0_PIN > -1
-  target_raw[0]=0;
-   #if HEATER_0_PIN > -1  
-     WRITE(HEATER_0_PIN,LOW);
-   #endif
-  #endif
-  #if TEMP_1_PIN > -1
-  target_raw[1]=0;
-  #if HEATER_1_PIN > -1 
-    WRITE(HEATER_1_PIN,LOW);
-  #endif
-  #endif
-  #if TEMP_2_PIN > -1
-  target_raw[2]=0;
-  #if HEATER_2_PIN > -1  
-    WRITE(HEATER_2_PIN,LOW);
-  #endif
-  #endif
+  disable_heater();
+
   disable_x();
   disable_y();
   disable_z();
@@ -1369,4 +1331,4 @@ void manage_inactivity(byte debug) {
   }
   check_axes_activity();
 }
-\r
+
index b55573d93cd495e26a5a1ada4a200642fe0539c7..0c5a2e4ce2cf3b89e0eb959374f1efe9f4d64b51 100644 (file)
 #include "streaming.h"\r
 #include "temperature.h"\r
 \r
-int target_bed_raw = 0;\r
-int current_bed_raw = 0;\r
 \r
 int target_raw[3] = {0, 0, 0};\r
 int current_raw[3] = {0, 0, 0};\r
-unsigned char temp_meas_ready = false;\r
+\r
+bool temp_meas_ready = false;\r
 \r
 unsigned long previous_millis_heater, previous_millis_bed_heater;\r
 \r
 #ifdef PIDTEMP\r
-  double temp_iState = 0;\r
-  double temp_dState = 0;\r
-  double pTerm;\r
-  double iTerm;\r
-  double dTerm;\r
+  float temp_iState = 0;\r
+  float temp_dState = 0;\r
+  float pTerm;\r
+  float iTerm;\r
+  float dTerm;\r
       //int output;\r
-  double pid_error;\r
-  double temp_iState_min;\r
-  double temp_iState_max;\r
-  double pid_setpoint = 0.0;\r
-  double pid_input;\r
-  double pid_output;\r
+  float pid_error;\r
+  float temp_iState_min;\r
+  float temp_iState_max;\r
+  float pid_setpoint = 0.0;\r
+  float pid_input;\r
+  float pid_output;\r
   bool pid_reset;\r
   float HeaterPower;\r
   \r
@@ -67,6 +66,11 @@ unsigned long previous_millis_heater, previous_millis_bed_heater;
   float Kd=DEFAULT_Kd;\r
   float Kc=DEFAULT_Kc;\r
 #endif //PIDTEMP\r
+  \r
+#ifdef WATCHPERIOD\r
+  int watch_raw[3] = {-1000,-1000,-1000};\r
+  unsigned long watchmillis = 0;\r
+#endif //WATCHPERIOD\r
 \r
 #ifdef HEATER_0_MINTEMP\r
 int minttemp_0 = temp2analog(HEATER_0_MINTEMP);\r
@@ -91,9 +95,9 @@ int bed_maxttemp = temp2analog(BED_MAXTEMP);
 \r
 void manage_heater()\r
 {\r
-#ifdef USE_WATCHDOG\r
-  wd_reset();\r
-#endif\r
+  #ifdef USE_WATCHDOG\r
+    wd_reset();\r
+  #endif\r
   \r
   float pid_input;\r
   float pid_output;\r
@@ -330,6 +334,22 @@ void tp_init()
 \r
 \r
 \r
+void setWatch() \r
+{  \r
+#ifdef WATCHPERIOD\r
+  if(isHeatingHotend0())\r
+  {\r
+    watchmillis = max(1,millis());\r
+    watch_raw[TEMPSENSOR_HOTEND_0] = current_raw[TEMPSENSOR_HOTEND_0];\r
+  }\r
+  else\r
+  {\r
+    watchmillis = 0;\r
+  } \r
+#endif \r
+}\r
+\r
+\r
 // Timer 0 is shared with millies\r
 ISR(TIMER0_COMPB_vect)\r
 {\r
@@ -500,4 +520,5 @@ ISR(TIMER0_COMPB_vect)
   #endif\r
 #endif\r
   }\r
-}\r\r
+}\r
+\r
index a36f997815abad853bb052076d3d62066c3fd331..fcc8edb9ea63c6cf60f933cdaad6924c5493ddd9 100644 (file)
 #define temperature_h \r
 \r
 #include "Marlin.h"\r
+#include "fastio.h"\r
 #ifdef PID_ADD_EXTRUSION_RATE\r
   #include "stepper.h"\r
 #endif\r
-void tp_init();\r
-void manage_heater();\r
-//int temp2analogu(int celsius, const short table[][2], int numtemps);\r
-//float analog2tempu(int raw, const short table[][2], int numtemps);\r
+\r
+void tp_init();  //initialise the heating\r
+void manage_heater(); //it is critical that this is called periodically.\r
+\r
+enum TempSensor {TEMPSENSOR_HOTEND_0=0,TEMPSENSOR_BED=1, TEMPSENSOR_HOTEND_1=2};\r
+\r
+//low leven conversion routines\r
+// do not use this routines and variables outsie of temperature.cpp\r
 int temp2analog(int celsius);\r
 int temp2analogBed(int celsius);\r
 float analog2temp(int raw);\r
 float analog2tempBed(int raw);\r
+extern int target_raw[3];  \r
+extern int current_raw[3];\r
+extern float Kp,Ki,Kd,Kc;\r
+#ifdef PIDTEMP\r
+  float pid_setpoint = 0.0;\r
+#endif\r
+#ifdef WATCHPERIOD\r
+  extern int watch_raw[3] ;\r
+  extern unsigned long watchmillis;\r
+#endif\r
+\r
+\r
+\r
+//high level conversion routines, for use outside of temperature.cpp\r
+//inline so that there is no performance decrease.\r
+//deg=degreeCelsius\r
 \r
+inline float degHotend0(){  return analog2temp(current_raw[TEMPSENSOR_HOTEND_0]);};\r
+inline float degHotend1(){  return analog2temp(current_raw[TEMPSENSOR_HOTEND_1]);};\r
+inline float degBed() {  return analog2tempBed(current_raw[TEMPSENSOR_BED]);};\r
+\r
+inline float degTargetHotend0() {  return analog2temp(target_raw[TEMPSENSOR_HOTEND_0]);};\r
+inline float degTargetHotend1() {  return analog2temp(target_raw[TEMPSENSOR_HOTEND_1]);};\r
+inline float degTargetBed() {   return analog2tempBed(target_raw[TEMPSENSOR_BED]);};\r
+\r
+inline void setTargetHotend0(float celsius) \r
+{  \r
+  target_raw[TEMPSENSOR_HOTEND_0]=temp2analog(celsius);\r
+  #ifdef PIDTEMP\r
+    pid_setpoint = celsius;\r
+  #endif //PIDTEMP\r
+};\r
+inline void setTargetHotend1(float celsius) {  target_raw[TEMPSENSOR_HOTEND_1]=temp2analog(celsius);};\r
+inline void setTargetBed(float celsius)     {  target_raw[TEMPSENSOR_BED     ]=temp2analogBed(celsius);};\r
+\r
+inline bool isHeatingHotend0() {return target_raw[TEMPSENSOR_HOTEND_0] > current_raw[TEMPSENSOR_HOTEND_0];};\r
+inline bool isHeatingHotend1() {return target_raw[TEMPSENSOR_HOTEND_1] > current_raw[TEMPSENSOR_HOTEND_1];};\r
+inline bool isHeatingBed() {return target_raw[TEMPSENSOR_BED] > current_raw[TEMPSENSOR_BED];};\r
+\r
+inline bool isCoolingHotend0() {return target_raw[TEMPSENSOR_HOTEND_0] < current_raw[TEMPSENSOR_HOTEND_0];};\r
+inline bool isCoolingHotend1() {return target_raw[TEMPSENSOR_HOTEND_1] < current_raw[TEMPSENSOR_HOTEND_1];};\r
+inline bool isCoolingBed() {return target_raw[TEMPSENSOR_BED] < current_raw[TEMPSENSOR_BED];};\r
+\r
+inline void disable_heater()\r
+{\r
+   #if TEMP_0_PIN > -1\r
+  target_raw[0]=0;\r
+   #if HEATER_0_PIN > -1  \r
+     WRITE(HEATER_0_PIN,LOW);\r
+   #endif\r
+  #endif\r
+  #if TEMP_1_PIN > -1\r
+  target_raw[1]=0;\r
+  #if HEATER_1_PIN > -1 \r
+    WRITE(HEATER_1_PIN,LOW);\r
+  #endif\r
+  #endif\r
+  #if TEMP_2_PIN > -1\r
+  target_raw[2]=0;\r
+  #if HEATER_2_PIN > -1  \r
+    WRITE(HEATER_2_PIN,LOW);\r
+  #endif\r
+  #endif \r
+}\r
+void setWatch() {  \r
+  if(isHeatingHotend0())\r
+  {\r
+    watchmillis = max(1,millis());\r
+    watch_raw[TEMPSENSOR_HOTEND_0] = current_raw[TEMPSENSOR_HOTEND_0];\r
+  }\r
+  else\r
+  {\r
+    watchmillis = 0;\r
+  } \r
+}\r
 #ifdef HEATER_0_USES_THERMISTOR\r
     #define HEATERSOURCE 1\r
 #endif\r
@@ -41,18 +120,9 @@ float analog2tempBed(int raw);
     #define BEDSOURCE 1\r
 #endif\r
 \r
-//#define temp2analogh( c ) temp2analogu((c),temptable,NUMTEMPS)\r
-//#define analog2temp( c ) analog2tempu((c),temptable,NUMTEMPS\r
 \r
 \r
-extern float Kp;\r
-extern float Ki;\r
-extern float Kd;\r
-extern float Kc;\r
 \r
-enum {TEMPSENSOR_HOTEND_0=0,TEMPSENSOR_BED=1, TEMPSENSOR_HOTEND_1=2};\r
-extern int target_raw[3];\r
-extern int current_raw[3];\r
-extern double pid_setpoint;\r
 \r
-#endif\r\r
+#endif\r
+\r
index 7eefec66824d350efd25be679e5f38809ebc7736..444020c228b8441069c9dfeae47d1744eeb4d4ef 100644 (file)
@@ -12,7 +12,7 @@ LiquidCrystal lcd(LCD_PINS_RS, LCD_PINS_ENABLE, LCD_PINS_D4, LCD_PINS_D5,LCD_PIN
 \r
 unsigned long previous_millis_lcd=0;\r
 \r
-\r
+inline int intround(const float &x){return int(0.5+x);}\r
 \r
 volatile char buttons=0;  //the last checked buttons in a bit array.\r
 int encoderpos=0;\r
@@ -29,13 +29,10 @@ void lcd_status(const char* message)
   strncpy(messagetext,message,LCD_WIDTH);\r
 }\r
 \r
-void clear()\r
+inline void clear()\r
 {\r
-  //lcd.setCursor(0,0);\r
+  \r
   lcd.clear();\r
-  //delay(1);\r
- // lcd.begin(LCD_WIDTH,LCD_HEIGHT);\r
-  //lcd_init();\r
 }\r
 long previous_millis_buttons=0;\r
 \r
@@ -78,47 +75,48 @@ void lcd_init()
 void beep()\r
 {\r
   //return;\r
-#ifdef ULTIPANEL\r
-  pinMode(BEEPER,OUTPUT);\r
-  for(int i=0;i<20;i++){\r
-    WRITE(BEEPER,HIGH);\r
-    delay(5);\r
-    WRITE(BEEPER,LOW);\r
-    delay(5);\r
-  }\r
-#endif\r
+  #ifdef ULTIPANEL\r
+    pinMode(BEEPER,OUTPUT);\r
+    for(int i=0;i<20;i++){\r
+      WRITE(BEEPER,HIGH);\r
+      delay(5);\r
+      WRITE(BEEPER,LOW);\r
+      delay(5);\r
+    }\r
+  #endif\r
 }\r
 \r
 void beepshort()\r
 {\r
   //return;\r
-#ifdef ULTIPANEL\r
-  pinMode(BEEPER,OUTPUT);\r
-  for(int i=0;i<10;i++){\r
-    WRITE(BEEPER,HIGH);\r
-    delay(3);\r
-    WRITE(BEEPER,LOW);\r
-    delay(3);\r
-  }\r
-#endif  \r
+  #ifdef ULTIPANEL\r
+    pinMode(BEEPER,OUTPUT);\r
+    for(int i=0;i<10;i++){\r
+      WRITE(BEEPER,HIGH);\r
+      delay(3);\r
+      WRITE(BEEPER,LOW);\r
+      delay(3);\r
+    }\r
+  #endif  \r
 }\r
+\r
 void lcd_status()\r
 {\r
-#ifdef ULTIPANEL\r
-  static uint8_t oldbuttons=0;\r
-  static long previous_millis_buttons=0;\r
-  static long previous_lcdinit=0;\r
-//  buttons_check(); // Done in temperature interrupt\r
-  //previous_millis_buttons=millis();\r
-  \r
-  if((buttons==oldbuttons) &&  ((millis() - previous_millis_lcd) < LCD_UPDATE_INTERVAL)   )\r
-    return;\r
-  oldbuttons=buttons;\r
-#else\r
+  #ifdef ULTIPANEL\r
+    static uint8_t oldbuttons=0;\r
+    static long previous_millis_buttons=0;\r
+    static long previous_lcdinit=0;\r
+  //  buttons_check(); // Done in temperature interrupt\r
+    //previous_millis_buttons=millis();\r
+    \r
+    if((buttons==oldbuttons) &&  ((millis() - previous_millis_lcd) < LCD_UPDATE_INTERVAL)   )\r
+      return;\r
+    oldbuttons=buttons;\r
+  #else\r
   \r
-  if(((millis() - previous_millis_lcd) < LCD_UPDATE_INTERVAL)   )\r
-    return;\r
-#endif\r
+    if(((millis() - previous_millis_lcd) < LCD_UPDATE_INTERVAL)   )\r
+      return;\r
+  #endif\r
     \r
   previous_millis_lcd=millis();\r
   menu.update();\r
@@ -161,8 +159,7 @@ void buttons_check()
   if((blocking<millis()) &&(READ(BTN_ENC)==0))\r
     newbutton|=EN_C;\r
   buttons=newbutton;\r
-#else\r
-  //read it from the shift register\r
+#else   //read it from the shift register\r
   uint8_t newbutton=0;\r
   WRITE(SHIFT_LD,LOW);\r
   WRITE(SHIFT_LD,HIGH);\r
@@ -238,8 +235,8 @@ extern volatile bool feedmultiplychanged;
 void MainMenu::showStatus()\r
 { \r
 #if LCD_HEIGHT==4\r
-  static int oldcurrentraw=-1;\r
-  static int oldtargetraw=-1;\r
+  static int olddegHotEnd0=-1;\r
+  static int oldtargetHotEnd0=-1;\r
   //force_lcd_update=true;\r
   if(force_lcd_update||feedmultiplychanged)  //initial display of content\r
   {\r
@@ -247,38 +244,41 @@ void MainMenu::showStatus()
     encoderpos=feedmultiply;\r
     clear();\r
     lcd.setCursor(0,0);lcd.print("\002123/567\001 ");\r
-#if defined BED_USES_THERMISTOR || defined BED_USES_AD595 \r
-    lcd.setCursor(10,0);lcd.print("B123/567\001 ");\r
-#endif\r
+    #if defined BED_USES_THERMISTOR || defined BED_USES_AD595 \r
+      lcd.setCursor(10,0);lcd.print("B123/567\001 ");\r
+    #endif\r
   }\r
     \r
-\r
-  if((abs(current_raw[TEMPSENSOR_HOTEND_0]-oldcurrentraw)>3)||force_lcd_update)\r
+  int tHotEnd0=intround(degHotend0());\r
+  if((abs(tHotEnd0-olddegHotEnd0)>1)||force_lcd_update) //>1 because otherwise the lcd is refreshed to often.\r
   {\r
     lcd.setCursor(1,0);\r
-    lcd.print(ftostr3(analog2temp(current_raw[TEMPSENSOR_HOTEND_0])));\r
-    oldcurrentraw=current_raw[TEMPSENSOR_HOTEND_0];\r
+    lcd.print(ftostr3(tHotEnd0));\r
+    olddegHotEnd0=tHotEnd0;\r
   }\r
-  if((target_raw[TEMPSENSOR_HOTEND_0]!=oldtargetraw)||force_lcd_update)\r
+  int ttHotEnd0=intround(degTargetHotend0());\r
+  if((ttHotEnd0!=oldtargetHotEnd0)||force_lcd_update)\r
   {\r
     lcd.setCursor(5,0);\r
-    lcd.print(ftostr3(analog2temp(target_raw[TEMPSENSOR_HOTEND_0])));\r
-    oldtargetraw=target_raw[TEMPSENSOR_HOTEND_0];\r
+    lcd.print(ftostr3(ttHotEnd0));\r
+    oldtargetHotEnd0=ttHotEnd0;\r
   }\r
   #if defined BED_USES_THERMISTOR || defined BED_USES_AD595 \r
-  static int oldcurrentbedraw=-1;\r
-  static int oldtargetbedraw=-1; \r
-  if((current_bed_raw!=oldcurrentbedraw)||force_lcd_update)\r
+  static int oldtBed=-1;\r
+  static int oldtargetBed=-1; \r
+  int tBed=intround(degBed());\r
+  if((tBed!=oldtBed)||force_lcd_update)\r
   {\r
     lcd.setCursor(1,0);\r
-    lcd.print(ftostr3(analog2temp(current_bed_raw)));\r
-    oldcurrentraw=current_raw[TEMPSENSOR_BED];\r
+    lcd.print(ftostr3(tBed));\r
+    olddegHotEnd0=tBed;\r
   }\r
-  if((target_bed_raw!=oldtargebedtraw)||force_lcd_update)\r
+  int targetBed=intround(degTargetBed());\r
+  if((targetBed!=oldtargetBed)||force_lcd_update)\r
   {\r
     lcd.setCursor(5,0);\r
-    lcd.print(ftostr3(analog2temp(target_bed_raw)));\r
-    oldtargetraw=target_bed_raw;\r
+    lcd.print(ftostr3(targetBed));\r
+    oldtargetBed=targetBed;\r
   }\r
   #endif\r
   //starttime=2;\r
@@ -327,8 +327,8 @@ void MainMenu::showStatus()
     messagetext[0]='\0';\r
   }\r
 #else //smaller LCDS----------------------------------\r
-  static int oldcurrentraw=-1;\r
-  static int oldtargetraw=-1;\r
+  static int olddegHotEnd0=-1;\r
+  static int oldtargetHotEnd0=-1;\r
   if(force_lcd_update)  //initial display of content\r
   {\r
     encoderpos=feedmultiply;\r
@@ -338,18 +338,21 @@ void MainMenu::showStatus()
     #endif\r
   }\r
     \r
+  int tHotEnd0=intround(degHotend0());\r
+  int ttHotEnd0=intround(degTargetHotend0());\r
 \r
-  if((abs(current_raw[TEMPSENSOR_HOTEND]-oldcurrentraw)>3)||force_lcd_update)\r
+\r
+  if((abs(tHotEnd0-olddegHotEnd0)>1)||force_lcd_update)\r
   {\r
     lcd.setCursor(1,0);\r
-    lcd.print(ftostr3(analog2temp(current_raw[TEMPSENSOR_HOTEND])));\r
-    oldcurrentraw=current_raw[TEMPSENSOR_HOTEND];\r
+    lcd.print(ftostr3(tHotEnd0));\r
+    olddegHotEnd0=tHotEnd0;\r
   }\r
-  if((target_raw[TEMPSENSOR_HOTEND]!=oldtargetraw)||force_lcd_update)\r
+  if((ttHotEnd0!=oldtargetHotEnd0)||force_lcd_update)\r
   {\r
     lcd.setCursor(5,0);\r
-    lcd.print(ftostr3(analog2temp(target_raw[TEMPSENSOR_HOTEND])));\r
-    oldtargetraw=target_raw[TEMPSENSOR_HOTEND];\r
+    lcd.print(ftostr3(ttHotEnd0));\r
+    oldtargetHotEnd0=ttHotEnd0;\r
   }\r
 \r
   if(messagetext[0]!='\0')\r
@@ -426,7 +429,7 @@ void MainMenu::showPrepare()
         if((activeline==line) && CLICKED)\r
         {\r
           BLOCK\r
-          target_raw[TEMPSENSOR_HOTEND_0] = temp2analog(170);\r
+          setTargetHotend0(170);\r
           beepshort();\r
         }\r
       }break;\r
@@ -531,7 +534,7 @@ void MainMenu::showControl()
         if(force_lcd_update)\r
         {\r
           lcd.setCursor(0,line);lcd.print(" \002Nozzle:");\r
-          lcd.setCursor(13,line);lcd.print(ftostr3(analog2temp(target_raw[TEMPSENSOR_HOTEND_0])));\r
+          lcd.setCursor(13,line);lcd.print(ftostr3(intround(degHotend0())));\r
         }\r
         \r
         if((activeline==line) )\r
@@ -541,11 +544,11 @@ void MainMenu::showControl()
             linechanging=!linechanging;\r
             if(linechanging)\r
             {\r
-               encoderpos=(int)analog2temp(target_raw[TEMPSENSOR_HOTEND_0]);\r
+               encoderpos=intround(degHotend0());\r
             }\r
             else\r
             {\r
-              target_raw[TEMPSENSOR_HOTEND_0] = temp2analog(encoderpos);\r
+              setTargetHotend0(encoderpos);\r
               encoderpos=activeline*lcdslow;\r
               beepshort();\r
             }\r
@@ -1590,4 +1593,5 @@ char *fillto(int8_t n,char *c)
 #else\r
 inline void lcd_status() {};\r
 #endif\r
-\r\r
+\r
+\r