Commit graph

184 commits

Author SHA1 Message Date
odewdney 538859669d Removing compiler warnings for progmem 2015-01-11 18:14:21 +00:00
grob6000 bf2c923db5 Make multiple PID parameters a config option
* Adds config parameter `PID_PARAMS_PER_EXTRUDER` - allows single PID
parameters to be used where this would be preferable (e.g. dual
identical extruders)
* When disabled, will use `float Kp, Ki, Kd, Kc;` as before.
Preprocessor macros used to switch between.
* ultralcd.cpp defines extra menus for extra parameters only where
required
* M301 reports `e:xx` only if independent pid parameters enabled
* EEPROM structure still leaves space for 3 extruders worth, when undef
will save single parameter to all extruder positions, but only read the
first
* Switching off saves approx 330 B with no LCD enabled, 2634B with LCD
(RRD) enabled: this is significant.
* LCD modifications should be tested.
2015-01-11 13:50:17 +11:00
grob6000 37c7e8300f Independent PID parameters for each extruder
* Variables Kp, Ki, Kd, Kc now arrays of size EXTRUDERS
* M301 gains (optional, default=0) E parameter to define which
extruder's settings to modify. Tested, works with Repetier Host's EEPROM
config window, albeit only reads/updates settings for E0.
* All Kp, Ki, Kd, Kc parameters saved in EEPROM (version now v14), up to
3 extruders supported (same as Marlin in general)
2015-01-10 16:35:12 +11:00
Dino Del Favero 038fccd7a1 I have added some code in the "temperature.cpp" for have the possibility of control the time of the states with the heater drived by relays, with this feature now it is possible use PID function in conjunction with relay to control the temperature. I have made some tests and the temperature stay always in the range of +-1°C from the setted temp.
There is the possibility of turn on this features adding "#define SLOW_PWM_HEATERS" in Configuration.h
2015-01-06 18:32:17 +01:00
Philippe L 30248214c7 temp runaway: proper cast to prevent any overflow. 2015-01-04 14:23:31 +01:00
Alexander Hirzel ae12ad0d6c Fix typo, PID_BED_POWER -> MAX_BED_POWER 2015-01-02 01:38:03 -05:00
alexborro 80b17ab573 Merge pull request #1285 from drf5n/PID_CI_v2
temperature.cpp: Fix typo of MAX_BED_PID to MAX_BED_POWER.
2015-01-01 22:56:21 -02:00
David Forrest 625860f086 temperature.cpp: Fix typo of PID_MAX to MAX_BED_POWER for the bed. 2015-01-01 19:24:42 -05:00
David Forrest 6583bb781d temperature.cpp: Fix typo of MAX_BED_PID to MAX_BED_POWER. 2015-01-01 19:11:42 -05:00
Bo Herrmannsen 0d957872a0 Merge pull request #1234 from gregrebholz/issue_1069
Fixes #1069.  Added "auto fan" checks to PID_autotune.
2014-12-28 10:12:08 +01:00
David Forrest 984177c40c temperature.cpp:Add PID Conditional integration on heated bed. 2014-12-27 15:26:09 -05:00
David Forrest c9b8435749 heater.c: Limit PID I term with conditional integration. 2014-12-27 15:26:09 -05:00
Greg Rebholz 7ecb7cbd46 Added "auto fan" checks to PID_autotune 2014-12-23 23:50:00 -05:00
Denis Chertykov b086394178 Fix syntax errors in #ifdef. 2014-12-20 19:33:43 +03:00
Scott Lahteine f83d0f2a68 Defines for electronics boards
Added boards.h which contains defines for all the board numbers, plus
some shorthand macros for less typing.
2014-12-18 13:59:31 -08:00
Erik van der Zalm 058e446531 Merge pull request #1037 from filipmu/Filament-Sensor
Support for a filament diameter sensor
2014-10-11 22:56:01 +02:00
Filip Mulier 62db9848d3 Improvements and bug fixes in sensor delay buffer for filament sensor code
Improvement to avoid reinitializing delay buffer with every print. Fixed
issues in buffer indexing and memory out of bounds due to floating point
imprecision.  Simplified the code by avoiding conversion to standard
diameter and 1cu mm extrusion, which caused complications in determining
mm extruded.
2014-08-16 06:50:13 -05:00
Filip Mulier 85649a4549 Real-time filament diameter measurement and control
This feature allows the printer to read the filament diameter
automatically and adjust the printer in real time.  Added code to read
an analog voltage that represents a filament diameter measurement.  This
measurement is delayed in a ring buffer to compensate for sensors that
are a distance away from the extruder.  The measurement is used to
adjust the volumetric_multiplier for the extruder.  Some additional g
codes (M404, M405, M406, M407) are used to set parameters and turn
on/off the control. g code M221 is updated.  Pins for RAMPS1.4, RAMBO,
and Printrboard are identified for analog input.  The configuration file
is updated with relevant user parameters.
2014-08-06 19:30:57 -05:00
Grogyan 82606354dd Update temperature.cpp
Enables both SD card and MAX6675 to talk with each other
Fixes also issue #750
2014-07-05 17:17:17 +12:00
alexborro 43c298a7a9 Add "Thermal Runaway Protection" feature
This is a feature to protect your printer from burn up in flames if it
has a thermistor coming off place (this happened to a friend of mine
recently and motivated me writing this feature).

The issue: If a thermistor come off, it will read a lower temperature
than actual. The system will turn the heater on forever, burning up the
filament and anything
else around.

After the temperature reaches the target for the first time, this
feature will start measuring for how long the current temperature stays
below the target minus _HYSTERESIS (set_temperature -
THERMAL_RUNAWAY_PROTECTION_HYSTERESIS).

If it stays longer than _PERIOD, it means the thermistor temperature
cannot catch up with the target, so something *may be* wrong. Then, to
be on the safe side, the system will he halt.

Bear in mind the count down will just start AFTER the first time the
thermistor temperature is over the target, so you will have no problem
if your extruder heater takes 2 minutes to hit the target on heating.
2014-06-30 15:22:49 -03:00
Erik van der Zalm cfb98ef682 More coverity fixes 2014-05-15 22:09:50 +02:00
Erik van der Zalm 9db9842aea Fixed error found by the free coverity tool (https://scan.coverity.com/)
===================================================
Hi,

Please find the latest report on new defect(s) introduced to ErikZalm/Marlin found with Coverity Scan.

Defect(s) Reported-by: Coverity Scan
Showing 15 of 15 defect(s)

** CID 59629:  Unchecked return value  (CHECKED_RETURN)
/Marlin_main.cpp: 2154 in process_commands()()

** CID 59630:  Operands don't affect result  (CONSTANT_EXPRESSION_RESULT)
/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Tone.cpp: 319 in tone(unsigned char, unsigned int, unsigned long)()

** CID 59631:  Missing break in switch  (MISSING_BREAK)
/Marlin_main.cpp: 1187 in process_commands()()

** CID 59632:  Missing break in switch  (MISSING_BREAK)
/Marlin_main.cpp: 1193 in process_commands()()

** CID 59633:  Out-of-bounds write  (OVERRUN)
/temperature.cpp: 914 in disable_heater()()

** CID 59634:  Out-of-bounds write  (OVERRUN)
/temperature.cpp: 913 in disable_heater()()

** CID 59635:  Out-of-bounds read  (OVERRUN)
/temperature.cpp: 626 in analog2temp(int, unsigned char)()

** CID 59636:  Out-of-bounds read  (OVERRUN)
/temperature.cpp: 620 in analog2temp(int, unsigned char)()

** CID 59637:  Out-of-bounds write  (OVERRUN)
/temperature.cpp: 202 in PID_autotune(float, int, int)()

** CID 59638:  Out-of-bounds read  (OVERRUN)
/temperature.cpp: 214 in PID_autotune(float, int, int)()

** CID 59639:  Out-of-bounds write  (OVERRUN)
/Marlin_main.cpp: 2278 in process_commands()()

** CID 59640:  Out-of-bounds read  (OVERRUN)
/Marlin_main.cpp: 1802 in process_commands()()

** CID 59641:  Uninitialized scalar field  (UNINIT_CTOR)
/Applications/Arduino.app/Contents/Resources/Java/libraries/LiquidCrystal/LiquidCrystal.cpp: 51 in LiquidCrystal::LiquidCrystal(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)()

** CID 59642:  Uninitialized scalar field  (UNINIT_CTOR)
/Applications/Arduino.app/Contents/Resources/Java/libraries/LiquidCrystal/LiquidCrystal.cpp: 45 in LiquidCrystal::LiquidCrystal(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)()

** CID 59643:  Uninitialized scalar field  (UNINIT_CTOR)
/Applications/Arduino.app/Contents/Resources/Java/libraries/LiquidCrystal/LiquidCrystal.cpp: 32 in LiquidCrystal::LiquidCrystal(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)()

________________________________________________________________________________________________________
*** CID 59629:  Unchecked return value  (CHECKED_RETURN)
/Marlin_main.cpp: 2154 in process_commands()()
2148                 }
2149               #endif
2150             }
2151           }
2152           break;
2153         case 85: // M85
   CID 59629:  Unchecked return value  (CHECKED_RETURN)
   Calling "code_seen" without checking return value (as is done elsewhere 66 out of 67 times).
2154           code_seen('S');
2155           max_inactive_time = code_value() * 1000;
2156           break;
2157         case 92: // M92
2158           for(int8_t i=0; i < NUM_AXIS; i++)
2159           {

________________________________________________________________________________________________________
*** CID 59630:  Operands don't affect result  (CONSTANT_EXPRESSION_RESULT)
/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Tone.cpp: 319 in tone(unsigned char, unsigned int, unsigned long)()
313         else
314         {
315           // two choices for the 16 bit timers: ck/1 or ck/64
316           ocr = F_CPU / frequency / 2 - 1;
317
318           prescalarbits = 0b001;
   CID 59630:  Operands don't affect result  (CONSTANT_EXPRESSION_RESULT)
   "ocr > 65535U" is always false regardless of the values of its operands. This occurs as the logical operand of if.
319           if (ocr > 0xffff)
320           {
321             ocr = F_CPU / frequency / 2 / 64 - 1;
322             prescalarbits = 0b011;
323           }
324

________________________________________________________________________________________________________
*** CID 59631:  Missing break in switch  (MISSING_BREAK)
/Marlin_main.cpp: 1187 in process_commands()()
1181         case 2: // G2  - CW ARC
1182           if(Stopped == false) {
1183             get_arc_coordinates();
1184             prepare_arc_move(true);
1185             return;
1186           }
   CID 59631:  Missing break in switch  (MISSING_BREAK)
   The above case falls through to this one.
1187         case 3: // G3  - CCW ARC
1188           if(Stopped == false) {
1189             get_arc_coordinates();
1190             prepare_arc_move(false);
1191             return;
1192           }

________________________________________________________________________________________________________
*** CID 59632:  Missing break in switch  (MISSING_BREAK)
/Marlin_main.cpp: 1193 in process_commands()()
1187         case 3: // G3  - CCW ARC
1188           if(Stopped == false) {
1189             get_arc_coordinates();
1190             prepare_arc_move(false);
1191             return;
1192           }
   CID 59632:  Missing break in switch  (MISSING_BREAK)
   The above case falls through to this one.
1193         case 4: // G4 dwell
1194           LCD_MESSAGEPGM(MSG_DWELL);
1195           codenum = 0;
1196           if(code_seen('P')) codenum = code_value(); // milliseconds to wait
1197           if(code_seen('S')) codenum = code_value() * 1000; // seconds to wait
1198

________________________________________________________________________________________________________
*** CID 59633:  Out-of-bounds write  (OVERRUN)
/temperature.cpp: 914 in disable_heater()()
908          WRITE(HEATER_0_PIN,LOW);
909        #endif
910       #endif
911
912       #if defined(TEMP_1_PIN) && TEMP_1_PIN > -1
913         target_temperature[1]=0;
   CID 59633:  Out-of-bounds write  (OVERRUN)
   Overrunning array "soft_pwm" of 1 bytes at byte offset 1 using index "1".
914         soft_pwm[1]=0;
915         #if defined(HEATER_1_PIN) && HEATER_1_PIN > -1
916           WRITE(HEATER_1_PIN,LOW);
917         #endif
918       #endif
919

________________________________________________________________________________________________________
*** CID 59634:  Out-of-bounds write  (OVERRUN)
/temperature.cpp: 913 in disable_heater()()
907        #if defined(HEATER_0_PIN) && HEATER_0_PIN > -1
908          WRITE(HEATER_0_PIN,LOW);
909        #endif
910       #endif
911
912       #if defined(TEMP_1_PIN) && TEMP_1_PIN > -1
   CID 59634:  Out-of-bounds write  (OVERRUN)
   Overrunning array "target_temperature" of 1 2-byte elements at element index 1 (byte offset 2) using index "1".
913         target_temperature[1]=0;
914         soft_pwm[1]=0;
915         #if defined(HEATER_1_PIN) && HEATER_1_PIN > -1
916           WRITE(HEATER_1_PIN,LOW);
917         #endif
918       #endif

________________________________________________________________________________________________________
*** CID 59635:  Out-of-bounds read  (OVERRUN)
/temperature.cpp: 626 in analog2temp(int, unsigned char)()
620       if(heater_ttbl_map[e] != NULL)
621       {
622         float celsius = 0;
623         uint8_t i;
624         short (*tt)[][2] = (short (*)[][2])(heater_ttbl_map[e]);
625
   CID 59635:  Out-of-bounds read  (OVERRUN)
   Overrunning array "heater_ttbllen_map" of 1 bytes at byte offset 1 using index "e" (which evaluates to 1).
626         for (i=1; i<heater_ttbllen_map[e]; i++)
627         {
628           if (PGM_RD_W((*tt)[i][0]) > raw)
629           {
630             celsius = PGM_RD_W((*tt)[i-1][1]) +
631               (raw - PGM_RD_W((*tt)[i-1][0])) *

________________________________________________________________________________________________________
*** CID 59636:  Out-of-bounds read  (OVERRUN)
/temperature.cpp: 620 in analog2temp(int, unsigned char)()
614         if (e == 0)
615         {
616           return 0.25 * raw;
617         }
618       #endif
619
   CID 59636:  Out-of-bounds read  (OVERRUN)
   Overrunning array "heater_ttbl_map" of 1 2-byte elements at element index 1 (byte offset 2) using index "e" (which evaluates to 1).
620       if(heater_ttbl_map[e] != NULL)
621       {
622         float celsius = 0;
623         uint8_t i;
624         short (*tt)[][2] = (short (*)[][2])(heater_ttbl_map[e]);
625

________________________________________________________________________________________________________
*** CID 59637:  Out-of-bounds write  (OVERRUN)
/temperature.cpp: 202 in PID_autotune(float, int, int)()
196       {
197          soft_pwm_bed = (MAX_BED_POWER)/2;
198          bias = d = (MAX_BED_POWER)/2;
199        }
200        else
201        {
   CID 59637:  Out-of-bounds write  (OVERRUN)
   Overrunning array "soft_pwm" of 1 bytes at byte offset 1 using index "extruder" (which evaluates to 1).
202          soft_pwm[extruder] = (PID_MAX)/2;
203          bias = d = (PID_MAX)/2;
204       }
205
206
207

________________________________________________________________________________________________________
*** CID 59638:  Out-of-bounds read  (OVERRUN)
/temperature.cpp: 214 in PID_autotune(float, int, int)()
208
209      for(;;) {
210
211         if(temp_meas_ready == true) { // temp sample ready
212           updateTemperaturesFromRawValues();
213
   CID 59638:  Out-of-bounds read  (OVERRUN)
   Overrunning array "current_temperature" of 1 4-byte elements at element index 1 (byte offset 4) using index "extruder" (which evaluates to 1).
214           input = (extruder<0)?current_temperature_bed:current_temperature[extruder];
215
216           max=max(max,input);
217           min=min(min,input);
218           if(heating == true && input > temp) {
219             if(millis() - t2 > 5000) {

________________________________________________________________________________________________________
*** CID 59639:  Out-of-bounds write  (OVERRUN)
/Marlin_main.cpp: 2278 in process_commands()()
2272               tmp_extruder = code_value();
2273               if(tmp_extruder >= EXTRUDERS) {
2274                 SERIAL_ECHO_START;
2275                 SERIAL_ECHO(MSG_M200_INVALID_EXTRUDER);
2276               }
2277             }
   CID 59639:  Out-of-bounds write  (OVERRUN)
   Overrunning array "volumetric_multiplier" of 1 4-byte elements at element index 1 (byte offset 4) using index "tmp_extruder" (which evaluates to 1).
2278             volumetric_multiplier[tmp_extruder] = 1 / area;
2279           }
2280           break;
2281         case 201: // M201
2282           for(int8_t i=0; i < NUM_AXIS; i++)
2283           {

________________________________________________________________________________________________________
*** CID 59640:  Out-of-bounds read  (OVERRUN)
/Marlin_main.cpp: 1802 in process_commands()()
1796             int pin_status = code_value();
1797             int pin_number = LED_PIN;
1798             if (code_seen('P') && pin_status >= 0 && pin_status <= 255)
1799               pin_number = code_value();
1800             for(int8_t i = 0; i < (int8_t)sizeof(sensitive_pins); i++)
1801             {
   CID 59640:  Out-of-bounds read  (OVERRUN)
   Overrunning array "sensitive_pins" of 28 2-byte elements at element index 55 (byte offset 110) using index "i" (which evaluates to 55).
1802               if (sensitive_pins[i] == pin_number)
1803               {
1804                 pin_number = -1;
1805                 break;
1806               }
1807             }

________________________________________________________________________________________________________
*** CID 59641:  Uninitialized scalar field  (UNINIT_CTOR)
/Applications/Arduino.app/Contents/Resources/Java/libraries/LiquidCrystal/LiquidCrystal.cpp: 51 in LiquidCrystal::LiquidCrystal(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)()
45     }
46
47     LiquidCrystal::LiquidCrystal(uint8_t rs,  uint8_t enable,
48     			     uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
49     {
50       init(1, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0);
   CID 59641:  Uninitialized scalar field  (UNINIT_CTOR)
   Non-static class member "_initialized" is not initialized in this constructor nor in any functions that it calls.
51     }
52
53     void LiquidCrystal::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
54     			 uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
55     			 uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
56     {

________________________________________________________________________________________________________
*** CID 59642:  Uninitialized scalar field  (UNINIT_CTOR)
/Applications/Arduino.app/Contents/Resources/Java/libraries/LiquidCrystal/LiquidCrystal.cpp: 45 in LiquidCrystal::LiquidCrystal(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)()
39     }
40
41     LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
42     			     uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
43     {
44       init(1, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0);
   CID 59642:  Uninitialized scalar field  (UNINIT_CTOR)
   Non-static class member "_initialized" is not initialized in this constructor nor in any functions that it calls.
45     }
46
47     LiquidCrystal::LiquidCrystal(uint8_t rs,  uint8_t enable,
48     			     uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3)
49     {
50       init(1, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0);

________________________________________________________________________________________________________
*** CID 59643:  Uninitialized scalar field  (UNINIT_CTOR)
/Applications/Arduino.app/Contents/Resources/Java/libraries/LiquidCrystal/LiquidCrystal.cpp: 32 in LiquidCrystal::LiquidCrystal(unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char, unsigned char)()
26
27     LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
28     			     uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
29     			     uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
30     {
31       init(0, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7);
   CID 59643:  Uninitialized scalar field  (UNINIT_CTOR)
   Non-static class member "_initialized" is not initialized in this constructor nor in any functions that it calls.
32     }
33
34     LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable,
35     			     uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
36     			     uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7)
37     {

________________________________________________________________________________________________________
To view the defects in Coverity Scan visit, http://scan.coverity.com/projects/2224?tab=overview
2014-05-14 21:59:48 +02:00
Cameron Lai 6460709d92 Fix bug in PID Autotune report 2014-04-25 16:05:05 +08:00
David Forrest 8c4377dd63 temperature.cpp: Fix PID_DEBUG compile error. 2014-02-26 00:44:22 -05:00
ErikZalm e8291ed728 Merge pull request #802 from Makers-Tool-Works/Marlin_v1
Clarify which PID values to enter
2014-02-24 22:31:13 +01:00
RoyOnWheels aee63afccd Clarify which PID values to enter
Users can be confused as to which values to enter after a PID tune. Updating the message to help clarity it.
New message: "PID Autotune finished! Put the last Kp, Ki and Kd constants from above into Configuration.h"

Old message: "PID Autotune finished! Put the Kp, Ki and Kd constants into Configuration.h"
2014-02-23 14:36:50 -08:00
Christian Axelsson c00383f286 Fixed typo. 2014-02-18 18:50:12 +01:00
ErikZalm 0d81ae77bc Merge pull request #727 from drf5n/oversampling
temperature.cpp: Actually use OVERSAMPLENR in the oversampling calculation.
2014-01-31 07:09:10 -08:00
David Forrest 476c7193d8 temperature.cpp: Use OVERSAMPLENR in oversampling calculation. 2014-01-21 16:49:03 -05:00
daid df194f75e1 Added PT100 support for Ultiboard2 2014-01-06 11:20:03 +01:00
Alex Borro 5c44f6c434 Bed Heater monitoring in Controller Fan
In some cases the Bed Heater FET heats up more then stepper drivers, so
this change add the bed monitoring to the controller fan. As soon as the
bed heater is turned on, the controller fan will run as well.
2013-11-27 23:23:06 -02:00
Alex Borro 35905ea4f9 Allow heaters to stay full On when PWM=127
In previous version, even with PWM = 127, the system turns the FET off
and then on in the next cycle. This bevavior may increase the FET heat
dissipation.
It was fixed keeping the FET always On when PWM=127.
2013-11-27 18:13:38 -02:00
Erik van der Zalm 69af392554 Added HEATERS_PARALLEL (Request from reifsnyderb)
This allows a hot end with two heaters and a FET for each heater. This is useful if the FET is not capable of heating two heaters.
2013-11-17 13:29:02 +01:00
bkubicek d147a057ac Add the socalled "Babystepping" feature.
It is a realtime control over the head position via the LCD menu system that works _while_ printing.
Using it, one can e.g. tune the z-position in realtime, while printing the first layer.
Also, lost steps can be manually added/removed, but thats not the prime feature.
Stuff is placed into the Tune->Babystep *

It is not possible to have realtime control via gcode sending due to the buffering, so I did not include a gcode yet. However, it could be added, but it movements will not be realtime then.

Historically, a very similar thing was implemented for the "Kaamermaker" project, while Joris was babysitting his offspring, hence the name.

say goodby to fuddling around with the z-axis.
2013-10-06 21:14:51 +02:00
ErikZalm 07e7de3600 Merge pull request #569 from hg42/convert-PROTOCOL-macros-from-statements-to-expressions
convert PROTOCOL macros from statements to (multiple, comma separated) expressions
2013-08-02 13:13:29 -07:00
hg42@gmx.net 3700f688f5 convert PROTOCOL macros from statements to (multiple, comma separated) expressions 2013-08-01 14:56:39 +02:00
daid a504c88346 Fix a bug where the PID controllers D action kicks in hard as soon as the PID controller starts. 2013-08-01 14:12:30 +02:00
Erik van der Zalm bd96d22bfb Merge branch 'Marlin_v1' into thinkyhead
Conflicts:
	Marlin/Configuration.h
	Marlin/Configuration_adv.h
	Marlin/Marlin.h
	Marlin/Marlin_main.cpp
	Marlin/Servo.cpp
	Marlin/language.h
	Marlin/pins.h
	Marlin/planner.cpp
	Marlin/ultralcd_implementation_hitachi_HD44780.h
	README.md
2013-06-09 22:26:47 +02:00
Erik van der Zalm c8dcc7c208 Allow increasing the software PWM frequency. 2013-06-09 12:52:49 +02:00
Scott Lahteine 5dabc95409 Apply all changes from latest Marlin_V1
Diffed and merged, preserving my updates
2013-06-06 15:49:25 -07:00
Erik van der Zalm 5090c56651 More redundant temp sensor changes. (After testing and debugging by reifsnderb) 2013-05-29 19:29:30 +02:00
Erik van der Zalm 9be61cdc02 Added redundant temp sensor 2013-05-26 17:57:49 +02:00
Robert F-C 40eb07bad4 Revert and extend previous change pin check change
Reviert previous change of #if BLAH_PIN > 0 to #if defined(BLAH_PIN) &&
BLAH_PIN > -1. Unfortunately some times pin 0 is used. For my sins I've
gone through and replaced all unsafe checks of #if BLAH_PIN > -1 with
the safe version.
2013-05-22 21:33:23 +10:00
Robert F-C 0d4a9444c4 Merge remote-tracking branch 'upstream/Marlin_v1' into Marlin_v1 2013-05-19 08:50:58 +10:00
MaikStohn 95dff34b73 fixed wrong compare for min temp check of heater 1 and heater 2 2013-05-16 01:17:38 +02:00
MaikStohn 4cc6f9f6de fixed wrong pin initialization when using temperature 2 pin input 2013-05-16 01:17:08 +02:00
MaikStohn 61a48cc662 Add support for RUMBA thermocouple add on 2013-05-16 01:16:33 +02:00
Scott Lahteine a200521eab Added CUSTOM_MENDEL_NAME option to Configuration.h and language.h
Also cosmetic comment changes and spelling corrections in printed
messages
2013-05-02 09:22:58 -07:00
Robert F-C d5ad7a0814 Rework change to incorporate CONTROLLERFAN
Also refactor extruder auto fan logic to simplify further and now only
check every 2.5 seconds
2013-04-30 01:08:29 +10:00
Robert F-C c3cdaceab3 Merge remote-tracking branch 'upstream/Marlin_v1' into Marlin_v1 2013-04-29 22:13:55 +10:00
Simon Oliver 93f0463b21 Allow Edit menu to call fn after edit; Fix PID Ki and Kd display in menus; Actually use changed PID and Max Accel values
Add new 'callback' edit-menu types that call a function after the edit is done. Use this to display and edit Ki and Kd correctly (removing the scaling first and reapplying it after). Also use it to reset maximum stepwise acceleration rates, after updating mm/s^2 rates via menus. (Previously, changes did nothing to affect planner unless saved back to EEPROM, and the machine reset).

Add calls to updatePID() so that PID loop uses updated values whether set by gcode (it already did this), or by restoring defaults, or loading from EEPROM (it didn't do those last two). Similarly, update the maximum step/s^2 accel rates when the mm/s^2 values are changed - whether by menu edits, restore defaults, or EEPROM read.

Refactor the acceleration rate update logic, and the PID scaling logic, into new functions that can be called from wherever, including the callbacks.

Add menu items to allow the z jerk and e jerk to be viewed/edited in the Control->Motion menu, as per xy jerk.

Conflicts:
	Marlin/language.h
2013-04-12 13:31:30 +02:00
whosawhatsis fd5b7e0cec Separate PID_MAX from BANG_MAX
This allows PID_FUNCTIONAL_RANGE to use a maximum duty cycle higher
than PID_MAX. This is useful for powerful heaters to heat quickly in
bang-bang mode, but use a lower duty cycle that is easier to stabilize
in PID mode.
2013-03-22 18:16:26 -07:00
Robert F-C f1263d3f88 Further reduce code by using precompiler logic 2013-03-02 16:12:11 +11:00
Robert F-C 372e12f83f Implement automatic extruder/cold-end fan control based on temperature
This change allows fan outputs to automatically turn on/off when the
associated nozzle temperature of an extruder is above/below a threshold
temperature.
Multiple extruders can be assigned to the same pin in which case the fan
will turn on when any selected extruder is above the threshold.
It also makes the M42 command compatible with the M106/M107 command.
The majority of the logic in this change will be evaluated by the
compiler at build time (i.e, low code space requirements).
2013-03-01 21:57:23 +11:00
daid303 38ee395ac7 Replace the 1ms delay for 2 nops to get a 100ns delay. #259 2012-12-17 11:12:11 +01:00
oni303 ab09fa4bbf fixed pwm generation at pin D12 and D13 when one of them is used as FAN_PIN on Sanguino, added soft pwm entry for FAN_PIN in temperature.cpp 2012-12-16 01:36:57 +01:00
daid303 08356361ac Fixing a problem with heated beds not working without PID and BED_LIMIT_SWITCHING 2012-12-13 10:25:29 +01:00
daid303 f30b46b2a8 One more fix for #338, I really should get a heated bed to test with. 2012-12-12 23:06:17 +01:00
daid303 65c3f1ffcd Most likely fixing #338 2012-12-12 21:56:17 +01:00
daid303 55ba90ac19 Add PID functional range setting. With high powered heaters the current functional range of 10 degrees causes high overshoots as the PID needs to kick in before the temperature hits 10 degrees below target. 2012-12-12 09:08:37 +01:00
daid303 5ff5cee8ce Fix the sensitive pin definitions, there where analogue numbers in the digital pin list. Also made M42 without a P function on the LED_PIN (which was otherwise a useless pin definition) 2012-12-11 14:53:53 +01:00
daid303 3fb07d9b8d Add MINTEMP/MAXTEMP error to LCD, and fix temperature bug with more then 1 extruder. 2012-12-10 10:48:46 +01:00
daid303 82c8724b33 Fix compile with PID_DEBUG 2012-12-09 23:50:12 +01:00
daid303 52158dffcc Big temperature code update. No longer converts back and forwards between temperature and raw sample value. Reducing complexity, removing code. Also named some variables better. While keeping the safety intact and functionality the same. 2012-12-09 23:00:06 +01:00
daid303 587154c01b Fix the WATCHPERIOD implementation. It did not work correctly in a multi extruder setup, it did not work after 32 seconds after startup (int16 used as millies timestamp). And it did not work if you gave an M104 or M109 when the target was already around the target setpoint. So on average, it did not work at all. The new implementation should be robust in detecting a failure to heat up. 2012-12-06 10:36:07 +01:00
daid303 529748894c Minor changes in the temperature code for some cleanup. 2012-12-05 19:54:01 +01:00
daid303 6a9bee27cc Changed the naming of some LCD functions, so the names match better what the function does. Also moved around some prototypes for general cleanup. 2012-12-03 12:52:00 +01:00
daid303 94ea26ff46 Some minor changes on code style. And a bugfix where the counters for positioning in the stepper where wrong depending on compiler settings. (Caused strange values to reported back with M114 and endstop triggers). Also fixed compiling with FWRETRACT enabled. 2012-12-03 12:13:20 +01:00
daid303 72586eb30a Solved few warnings. 2012-11-12 09:29:12 +01:00
daid303 06b58a9c4f First cleanup. Moved all code to cpp files, so there are no dependencies on pde files. And no more odd requirement to cat files together. (Still need to fix the Makefile). Also cleaned up some defines and made defines upper case as by C coding conventions. 2012-11-06 12:06:41 +01:00
Mark Finn d197f8504b clean up and changes from testing 2012-09-17 19:18:50 -05:00
Mark Finn eb06a886c4 missed 2012-09-17 14:23:49 -05:00
Mark Finn 04631d2250 cleanup for pull 2012-09-17 14:17:24 -05:00
Mark Finn 9698f4ea64 bed pid
Conflicts:

	Marlin/Configuration.h
2012-09-12 21:18:59 -05:00
ZetaPhoenix e8c92e0a95 Missing #else in temperature.cpp prevented reading bed temp when TEMP_BED_PIN <7. Thanks to Leland Wallace for helping me track this down via "Sesame Street" coding (what is not like the other) 2012-09-09 16:06:02 -07:00
Dabble63 6b45e9f167 Add Duty Cycling to the Heater Bed 2012-08-11 09:17:47 +03:00
Erik van der Zalm e31bef31ad Limit PID autotune PWM to PID_MAX 2012-05-16 19:32:23 +02:00
Erik van der Zalm 1874cb71a6 Added option to increase the FAN PWM frequency. 2012-05-02 19:26:14 +02:00
Logan Bowers 3eacb4c16d Wrap the call to turn off the bed heater in a #if to prevent a compile error on boards that do not have a bed heater 2012-04-25 19:22:38 -07:00
Bernhard 33bb044d7c fixed catsting to (int)e in serial error messages.
see https://github.com/ErikZalm/Marlin/issues/148
2012-04-22 20:04:39 +02:00
Erik van der Zalm 67cf105bc6 Fixed AUTOTEMP (M109 S215 B260 F1 starts autotemp)
Changed SLOWDOWN. IF this does not work ok OLD_SLOWDOWN is the old algo.
2012-04-15 19:17:33 +02:00
Erik van der Zalm 8aee9d51b6 Disabled disable_heater in PID_autotune. 2012-04-12 21:12:31 +02:00
Daid 414408b2d0 Fix for wrong systax in #ifdef. 2012-04-12 14:01:30 +02:00
Erik van der Zalm cf7c8c458f Fixed MAX6675 2012-04-10 21:57:57 +02:00
Erik van der Zalm 63aec3c56e Replaced Kill by Stop. If the printer is stopped. Fix the error and use M999 to restart.
Moved the PID_dT in the Ki and Kd calculation from the configuration.h to temperature.cpp
2012-03-25 14:36:51 +02:00
Erik van der Zalm 33f5697888 PPID tune exports more constants. 2012-03-11 22:18:25 +01:00
Erik van der Zalm 15ad923310 Removed !!!. Stupid arduino bootloader can't handle this. 2012-03-09 17:42:32 +01:00
Erik van der Zalm c077316b2b Added PID autotune. (experimental)
M303 Starts autotune. Wait till the Kp Ki and Kd constants are printed.
Put these values in Configuration.h
2012-03-08 21:43:21 +01:00
haxar 79a466ca26 make analog2tempBed return a precise celsius reading for BED_USES_THERMISTOR, complementing changes to analog2temp in d15f01e 2012-03-02 17:15:21 -08:00
Erik van der Zalm b48d67ce10 Fixed homing 2012-02-27 18:31:40 +01:00
Phil Hord 740f0c7690 Add explicit #define for bogus temp override
The code to ignore the "bad thermistor reading failsafe"
suicide function depends on the existing of the PS_ON pin
feature.  But in some boards this shouldn't be the case
Fix this by adding an explicit definition to make our
intentions more clear and separable.
2012-02-26 20:26:16 -05:00
Erik van der Zalm 4fbda5c3f5 Merge remote-tracking branch 'daid/Marlin_v1' into Test 2012-02-26 16:10:59 +01:00
Daid 73344e69c1 Added temperature offset/gain settings for AD595. 2012-02-16 11:05:08 +01:00
Christian Thalhammer d309565b56 Merge remote-tracking branch 'upstream/Marlin_v1' into Marlin_v1
Conflicts:
	Marlin/Configuration.h
2012-02-13 13:07:55 +01:00
Erik van der Zalm 11518a987f merged with triffid fork 2012-02-12 13:58:36 +01:00
Christian Thalhammer 14702089ee -disable TEMP Min MAX Kill while using PS_ON Pin
ON GEN7 there is no temperature reading when power is off.. so Marlin
would kill itself. There seems to be an update from "Traumflug" on GEN7
using standby VCC for thermistors.
2012-02-06 12:28:33 +01:00
Erik van der Zalm 9f139d6e0e Added MAX6675 support. (Thanks to gregfrost)
Needs some work to remove the blocking in read max6675.
2012-02-05 13:05:07 +01:00
Michael Moon 8d0916af13 allow Marlin to actually compile with Makefile pulled from Sprinter and a few other modifications 2012-01-24 13:18:54 +11:00
Bernhard 3c1a4aac2b header file simplification 2011-12-22 12:38:50 +01:00
Bernhard 415aadf704 lcd panel bed support
advance and ultipanel not any more in default config
2011-12-22 11:45:52 +01:00