Repetier-Firmware
0.91
|
00001 /* 00002 This file is part of Repetier-Firmware. 00003 00004 Repetier-Firmware is free software: you can redistribute it and/or modify 00005 it under the terms of the GNU General Public License as published by 00006 the Free Software Foundation, either version 3 of the License, or 00007 (at your option) any later version. 00008 00009 Repetier-Firmware is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 GNU General Public License for more details. 00013 00014 You should have received a copy of the GNU General Public License 00015 along with Repetier-Firmware. If not, see <http://www.gnu.org/licenses/>. 00016 00017 */ 00018 00019 #ifndef _EEPROM_H 00020 #define _EEPROM_H 00021 00022 // Id to distinguish version changes 00023 #define EEPROM_PROTOCOL_VERSION 6 00024 00029 #define EPR_MAGIC_BYTE 0 00030 #define EPR_ACCELERATION_TYPE 1 00031 #define EPR_XAXIS_STEPS_PER_MM 3 00032 #define EPR_YAXIS_STEPS_PER_MM 7 00033 #define EPR_ZAXIS_STEPS_PER_MM 11 00034 #define EPR_X_MAX_FEEDRATE 15 00035 #define EPR_Y_MAX_FEEDRATE 19 00036 #define EPR_Z_MAX_FEEDRATE 23 00037 #define EPR_X_HOMING_FEEDRATE 27 00038 #define EPR_Y_HOMING_FEEDRATE 31 00039 #define EPR_Z_HOMING_FEEDRATE 35 00040 #define EPR_MAX_JERK 39 00041 //#define EPR_OPS_MIN_DISTANCE 43 00042 #define EPR_MAX_ZJERK 47 00043 #define EPR_X_MAX_ACCEL 51 00044 #define EPR_Y_MAX_ACCEL 55 00045 #define EPR_Z_MAX_ACCEL 59 00046 #define EPR_X_MAX_TRAVEL_ACCEL 63 00047 #define EPR_Y_MAX_TRAVEL_ACCEL 67 00048 #define EPR_Z_MAX_TRAVEL_ACCEL 71 00049 #define EPR_BAUDRATE 75 00050 #define EPR_MAX_INACTIVE_TIME 79 00051 #define EPR_STEPPER_INACTIVE_TIME 83 00052 //#define EPR_OPS_RETRACT_DISTANCE 87 00053 //#define EPR_OPS_RETRACT_BACKLASH 91 00054 #define EPR_EXTRUDER_SPEED 95 00055 //#define EPR_OPS_MOVE_AFTER 99 00056 //#define EPR_OPS_MODE 103 00057 #define EPR_INTEGRITY_BYTE 104 // Here the xored sum over eeprom is stored 00058 #define EPR_VERSION 105 // Version id for updates in EEPROM storage 00059 #define EPR_BED_HEAT_MANAGER 106 00060 #define EPR_BED_DRIVE_MAX 107 00061 #define EPR_BED_PID_PGAIN 108 00062 #define EPR_BED_PID_IGAIN 112 00063 #define EPR_BED_PID_DGAIN 116 00064 #define EPR_BED_PID_MAX 120 00065 #define EPR_BED_DRIVE_MIN 124 00066 #define EPR_PRINTING_TIME 125 // Time in seconds printing 00067 #define EPR_PRINTING_DISTANCE 129 // Filament length printed 00068 #define EPR_X_HOME_OFFSET 133 00069 #define EPR_Y_HOME_OFFSET 137 00070 #define EPR_Z_HOME_OFFSET 141 00071 #define EPR_X_LENGTH 145 00072 #define EPR_Y_LENGTH 149 00073 #define EPR_Z_LENGTH 153 00074 #define EPR_BACKLASH_X 157 00075 #define EPR_BACKLASH_Y 161 00076 #define EPR_BACKLASH_Z 165 00077 00078 #define EPR_Z_PROBE_X_OFFSET 800 00079 #define EPR_Z_PROBE_Y_OFFSET 804 00080 #define EPR_Z_PROBE_HEIGHT 808 00081 #define EPR_Z_PROBE_SPEED 812 00082 #define EPR_Z_PROBE_X1 816 00083 #define EPR_Z_PROBE_Y1 820 00084 #define EPR_Z_PROBE_X2 824 00085 #define EPR_Z_PROBE_Y2 828 00086 #define EPR_Z_PROBE_X3 832 00087 #define EPR_Z_PROBE_Y3 836 00088 #define EPR_Z_PROBE_XY_SPEED 840 00089 #define EPR_AUTOLEVEL_MATRIX 844 00090 #define EPR_AUTOLEVEL_ACTIVE 880 00091 #define EPR_DELTA_DIAGONAL_ROD_LENGTH 881 00092 #define EPR_DELTA_HORIZONTAL_RADIUS 885 00093 #define EPR_DELTA_SEGMENTS_PER_SECOND_PRINT 889 00094 #define EPR_DELTA_SEGMENTS_PER_SECOND_MOVE 891 00095 #define EPR_DELTA_TOWERX_OFFSET_STEPS 893 00096 #define EPR_DELTA_TOWERY_OFFSET_STEPS 895 00097 #define EPR_DELTA_TOWERZ_OFFSET_STEPS 897 00098 #define EPR_DELTA_ALPHA_A 901 00099 #define EPR_DELTA_ALPHA_B 905 00100 #define EPR_DELTA_ALPHA_C 909 00101 #define EPR_DELTA_RADIUS_CORR_A 913 00102 #define EPR_DELTA_RADIUS_CORR_B 917 00103 #define EPR_DELTA_RADIUS_CORR_C 921 00104 00105 #define EEPROM_EXTRUDER_OFFSET 200 00106 // bytes per extruder needed, leave some space for future development 00107 #define EEPROM_EXTRUDER_LENGTH 100 00108 // Extruder positions relative to extruder start 00109 #define EPR_EXTRUDER_STEPS_PER_MM 0 00110 #define EPR_EXTRUDER_MAX_FEEDRATE 4 00111 // Feedrate from halted extruder in mm/s 00112 #define EPR_EXTRUDER_MAX_START_FEEDRATE 8 00113 // Acceleration in mm/s^2 00114 #define EPR_EXTRUDER_MAX_ACCELERATION 12 00115 #define EPR_EXTRUDER_HEAT_MANAGER 16 00116 #define EPR_EXTRUDER_DRIVE_MAX 17 00117 #define EPR_EXTRUDER_PID_PGAIN 18 00118 #define EPR_EXTRUDER_PID_IGAIN 22 00119 #define EPR_EXTRUDER_PID_DGAIN 26 00120 #define EPR_EXTRUDER_PID_MAX 30 00121 #define EPR_EXTRUDER_X_OFFSET 31 00122 #define EPR_EXTRUDER_Y_OFFSET 35 00123 #define EPR_EXTRUDER_WATCH_PERIOD 39 00124 #define EPR_EXTRUDER_ADVANCE_K 41 00125 #define EPR_EXTRUDER_DRIVE_MIN 45 00126 #define EPR_EXTRUDER_ADVANCE_L 46 00127 #define EPR_EXTRUDER_WAIT_RETRACT_TEMP 50 00128 #define EPR_EXTRUDER_WAIT_RETRACT_UNITS 52 00129 #define EPR_EXTRUDER_COOLER_SPEED 54 00130 00131 class EEPROM 00132 { 00133 #if EEPROM_MODE!=0 00134 static uint8_t computeChecksum(); 00135 static void writeExtruderPrefix(uint pos); 00136 static void writeFloat(uint pos,PGM_P text,uint8_t digits=3); 00137 static void writeLong(uint pos,PGM_P text); 00138 static void writeInt(uint pos,PGM_P text); 00139 static void writeByte(uint pos,PGM_P text); 00140 #endif 00141 public: 00142 00143 static void init(); 00144 static void initBaudrate(); 00145 static void storeDataIntoEEPROM(uint8_t corrupted=0); 00146 static void readDataFromEEPROM(); 00147 static void restoreEEPROMSettingsFromConfiguration(); 00148 static void writeSettings(); 00149 static void update(GCode *com); 00150 static void updatePrinterUsage(); 00151 00152 static inline float zProbeSpeed() { 00153 #if EEPROM_MODE!=0 00154 return HAL::eprGetFloat(EPR_Z_PROBE_SPEED); 00155 #else 00156 return Z_PROBE_SPEED; 00157 #endif 00158 } 00159 static inline float zProbeXYSpeed() { 00160 #if EEPROM_MODE!=0 00161 return HAL::eprGetFloat(EPR_Z_PROBE_XY_SPEED); 00162 #else 00163 return Z_PROBE_XY_SPEED; 00164 #endif 00165 } 00166 static inline float zProbeXOffset() { 00167 #if EEPROM_MODE!=0 00168 return HAL::eprGetFloat(EPR_Z_PROBE_X_OFFSET); 00169 #else 00170 return Z_PROBE_X_OFFSET; 00171 #endif 00172 } 00173 static inline float zProbeYOffset() { 00174 #if EEPROM_MODE!=0 00175 return HAL::eprGetFloat(EPR_Z_PROBE_Y_OFFSET); 00176 #else 00177 return Z_PROBE_Y_OFFSET; 00178 #endif 00179 } 00180 static inline float zProbeHeight() { 00181 #if EEPROM_MODE!=0 00182 return HAL::eprGetFloat(EPR_Z_PROBE_HEIGHT); 00183 #else 00184 return Z_PROBE_HEIGHT; 00185 #endif 00186 } 00187 static inline float zProbeX1() { 00188 #if EEPROM_MODE!=0 00189 return HAL::eprGetFloat(EPR_Z_PROBE_X1); 00190 #else 00191 return Z_PROBE_X1; 00192 #endif 00193 } 00194 static inline float zProbeY1() { 00195 #if EEPROM_MODE!=0 00196 return HAL::eprGetFloat(EPR_Z_PROBE_Y1); 00197 #else 00198 return Z_PROBE_Y1; 00199 #endif 00200 } 00201 static inline float zProbeX2() { 00202 #if EEPROM_MODE!=0 00203 return HAL::eprGetFloat(EPR_Z_PROBE_X2); 00204 #else 00205 return Z_PROBE_X2; 00206 #endif 00207 } 00208 static inline float zProbeY2() { 00209 #if EEPROM_MODE!=0 00210 return HAL::eprGetFloat(EPR_Z_PROBE_Y2); 00211 #else 00212 return Z_PROBE_Y2; 00213 #endif 00214 } 00215 static inline float zProbeX3() { 00216 #if EEPROM_MODE!=0 00217 return HAL::eprGetFloat(EPR_Z_PROBE_X3); 00218 #else 00219 return Z_PROBE_X3; 00220 #endif 00221 } 00222 static inline float zProbeY3() { 00223 #if EEPROM_MODE!=0 00224 return HAL::eprGetFloat(EPR_Z_PROBE_Y3); 00225 #else 00226 return Z_PROBE_Y3; 00227 #endif 00228 } 00229 #if NONLINEAR_SYSTEM 00230 static inline int16_t deltaSegmentsPerSecondMove() { 00231 #if EEPROM_MODE!=0 00232 return HAL::eprGetInt16(EPR_DELTA_SEGMENTS_PER_SECOND_MOVE); 00233 #else 00234 return DELTA_SEGMENTS_PER_SECOND_MOVE; 00235 #endif 00236 } 00237 static inline float deltaDiagonalRodLength() { 00238 #if EEPROM_MODE!=0 00239 return HAL::eprGetFloat(EPR_DELTA_DIAGONAL_ROD_LENGTH); 00240 #else 00241 return DELTA_DIAGONAL_ROD; 00242 #endif 00243 } 00244 static inline int16_t deltaSegmentsPerSecondPrint() { 00245 #if EEPROM_MODE!=0 00246 return HAL::eprGetInt16(EPR_DELTA_SEGMENTS_PER_SECOND_PRINT); 00247 #else 00248 return DELTA_SEGMENTS_PER_SECOND_PRINT; 00249 #endif 00250 } 00251 #endif 00252 #if DRIVE_SYSTEM==3 00253 static inline float deltaHorizontalRadius() { 00254 #if EEPROM_MODE!=0 00255 return HAL::eprGetFloat(EPR_DELTA_HORIZONTAL_RADIUS); 00256 #else 00257 return DELTA_RADIUS; 00258 #endif 00259 } 00260 static inline int16_t deltaTowerXOffsetSteps() { 00261 #if EEPROM_MODE!=0 00262 return HAL::eprGetInt16(EPR_DELTA_TOWERX_OFFSET_STEPS); 00263 #else 00264 return DELTA_X_ENDSTOP_OFFSET_STEPS; 00265 #endif 00266 } 00267 static inline int16_t deltaTowerYOffsetSteps() { 00268 #if EEPROM_MODE!=0 00269 return HAL::eprGetInt16(EPR_DELTA_TOWERY_OFFSET_STEPS); 00270 #else 00271 return DELTA_Y_ENDSTOP_OFFSET_STEPS; 00272 #endif 00273 } 00274 static inline int16_t deltaTowerZOffsetSteps() { 00275 #if EEPROM_MODE!=0 00276 return HAL::eprGetInt16(EPR_DELTA_TOWERZ_OFFSET_STEPS); 00277 #else 00278 return DELTA_Z_ENDSTOP_OFFSET_STEPS; 00279 #endif 00280 } 00281 static inline void setDeltaTowerXOffsetSteps(int16_t steps) { 00282 #if EEPROM_MODE!=0 00283 HAL::eprSetInt16(EPR_DELTA_TOWERX_OFFSET_STEPS,steps); 00284 uint8_t newcheck = computeChecksum(); 00285 if(newcheck!=HAL::eprGetByte(EPR_INTEGRITY_BYTE)) 00286 HAL::eprSetByte(EPR_INTEGRITY_BYTE,newcheck); 00287 #endif 00288 } 00289 static inline void setDeltaTowerYOffsetSteps(int16_t steps) { 00290 #if EEPROM_MODE!=0 00291 HAL::eprSetInt16(EPR_DELTA_TOWERY_OFFSET_STEPS,steps); 00292 uint8_t newcheck = computeChecksum(); 00293 if(newcheck!=HAL::eprGetByte(EPR_INTEGRITY_BYTE)) 00294 HAL::eprSetByte(EPR_INTEGRITY_BYTE,newcheck); 00295 #endif 00296 } 00297 static inline void setDeltaTowerZOffsetSteps(int16_t steps) { 00298 #if EEPROM_MODE!=0 00299 HAL::eprSetInt16(EPR_DELTA_TOWERZ_OFFSET_STEPS,steps); 00300 uint8_t newcheck = computeChecksum(); 00301 if(newcheck!=HAL::eprGetByte(EPR_INTEGRITY_BYTE)) 00302 HAL::eprSetByte(EPR_INTEGRITY_BYTE,newcheck); 00303 #endif 00304 } 00305 static inline float deltaAlphaA() { 00306 #if EEPROM_MODE!=0 00307 return HAL::eprGetFloat(EPR_DELTA_ALPHA_A); 00308 #else 00309 return DELTA_ALPHA_A; 00310 #endif 00311 } 00312 static inline float deltaAlphaB() { 00313 #if EEPROM_MODE!=0 00314 return HAL::eprGetFloat(EPR_DELTA_ALPHA_B); 00315 #else 00316 return DELTA_ALPHA_B; 00317 #endif 00318 } 00319 static inline float deltaAlphaC() { 00320 #if EEPROM_MODE!=0 00321 return HAL::eprGetFloat(EPR_DELTA_ALPHA_C); 00322 #else 00323 return DELTA_ALPHA_C; 00324 #endif 00325 } 00326 static inline float deltaRadiusCorrectionA() { 00327 #if EEPROM_MODE!=0 00328 return HAL::eprGetFloat(EPR_DELTA_RADIUS_CORR_A); 00329 #else 00330 return DELTA_RADIUS_CORRECTION_A; 00331 #endif 00332 } 00333 static inline float deltaRadiusCorrectionB() { 00334 #if EEPROM_MODE!=0 00335 return HAL::eprGetFloat(EPR_DELTA_RADIUS_CORR_B); 00336 #else 00337 return DELTA_RADIUS_CORRECTION_B; 00338 #endif 00339 } 00340 static inline float deltaRadiusCorrectionC() { 00341 #if EEPROM_MODE!=0 00342 return HAL::eprGetFloat(EPR_DELTA_RADIUS_CORR_C); 00343 #else 00344 return DELTA_RADIUS_CORRECTION_C; 00345 #endif 00346 } 00347 #endif 00348 static void initalizeUncached(); 00349 }; 00350 #endif