1 #ifndef THERMISTORTABLES_H_
2 #define THERMISTORTABLES_H_
6 #define OVERSAMPLENR 16
8 #if (THERMISTORHEATER_0 == 1) || (THERMISTORHEATER_1 == 1) || (THERMISTORHEATER_2 == 1) || (THERMISTORBED == 1) //100k bed thermistor
10 const short temptable_1[][2] PROGMEM = {
11 { 23*OVERSAMPLENR , 300 },
12 { 25*OVERSAMPLENR , 295 },
13 { 27*OVERSAMPLENR , 290 },
14 { 28*OVERSAMPLENR , 285 },
15 { 31*OVERSAMPLENR , 280 },
16 { 33*OVERSAMPLENR , 275 },
17 { 35*OVERSAMPLENR , 270 },
18 { 38*OVERSAMPLENR , 265 },
19 { 41*OVERSAMPLENR , 260 },
20 { 44*OVERSAMPLENR , 255 },
21 { 48*OVERSAMPLENR , 250 },
22 { 52*OVERSAMPLENR , 245 },
23 { 56*OVERSAMPLENR , 240 },
24 { 61*OVERSAMPLENR , 235 },
25 { 66*OVERSAMPLENR , 230 },
26 { 71*OVERSAMPLENR , 225 },
27 { 78*OVERSAMPLENR , 220 },
28 { 84*OVERSAMPLENR , 215 },
29 { 92*OVERSAMPLENR , 210 },
30 { 100*OVERSAMPLENR , 205 },
31 { 109*OVERSAMPLENR , 200 },
32 { 120*OVERSAMPLENR , 195 },
33 { 131*OVERSAMPLENR , 190 },
34 { 143*OVERSAMPLENR , 185 },
35 { 156*OVERSAMPLENR , 180 },
36 { 171*OVERSAMPLENR , 175 },
37 { 187*OVERSAMPLENR , 170 },
38 { 205*OVERSAMPLENR , 165 },
39 { 224*OVERSAMPLENR , 160 },
40 { 245*OVERSAMPLENR , 155 },
41 { 268*OVERSAMPLENR , 150 },
42 { 293*OVERSAMPLENR , 145 },
43 { 320*OVERSAMPLENR , 140 },
44 { 348*OVERSAMPLENR , 135 },
45 { 379*OVERSAMPLENR , 130 },
46 { 411*OVERSAMPLENR , 125 },
47 { 445*OVERSAMPLENR , 120 },
48 { 480*OVERSAMPLENR , 115 },
49 { 516*OVERSAMPLENR , 110 },
50 { 553*OVERSAMPLENR , 105 },
51 { 591*OVERSAMPLENR , 100 },
52 { 628*OVERSAMPLENR , 95 },
53 { 665*OVERSAMPLENR , 90 },
54 { 702*OVERSAMPLENR , 85 },
55 { 737*OVERSAMPLENR , 80 },
56 { 770*OVERSAMPLENR , 75 },
57 { 801*OVERSAMPLENR , 70 },
58 { 830*OVERSAMPLENR , 65 },
59 { 857*OVERSAMPLENR , 60 },
60 { 881*OVERSAMPLENR , 55 },
61 { 903*OVERSAMPLENR , 50 },
62 { 922*OVERSAMPLENR , 45 },
63 { 939*OVERSAMPLENR , 40 },
64 { 954*OVERSAMPLENR , 35 },
65 { 966*OVERSAMPLENR , 30 },
66 { 977*OVERSAMPLENR , 25 },
67 { 985*OVERSAMPLENR , 20 },
68 { 993*OVERSAMPLENR , 15 },
69 { 999*OVERSAMPLENR , 10 },
70 { 1004*OVERSAMPLENR , 5 },
71 { 1008*OVERSAMPLENR , 0 } //safety
74 #if (THERMISTORHEATER_0 == 2) || (THERMISTORHEATER_1 == 2) || (THERMISTORHEATER_2 == 2) || (THERMISTORBED == 2) //200k bed thermistor
75 const short temptable_2[][2] PROGMEM = {
76 //200k ATC Semitec 204GT-2
77 //Verified by linagee. Source: http://shop.arcol.hu/static/datasheets/thermistors.pdf
78 // Calculated using 4.7kohm pullup, voltage divider math, and manufacturer provided temp/resistance
79 {30*OVERSAMPLENR, 300},
80 {34*OVERSAMPLENR, 290},
81 {39*OVERSAMPLENR, 280},
82 {46*OVERSAMPLENR, 270},
83 {53*OVERSAMPLENR, 260},
84 {63*OVERSAMPLENR, 250},
85 {74*OVERSAMPLENR, 240},
86 {87*OVERSAMPLENR, 230},
87 {104*OVERSAMPLENR, 220},
88 {124*OVERSAMPLENR, 210},
89 {148*OVERSAMPLENR, 200},
90 {176*OVERSAMPLENR, 190},
91 {211*OVERSAMPLENR, 180},
92 {252*OVERSAMPLENR, 170},
93 {301*OVERSAMPLENR, 160},
94 {357*OVERSAMPLENR, 150},
95 {420*OVERSAMPLENR, 140},
96 {489*OVERSAMPLENR, 130},
97 {562*OVERSAMPLENR, 120},
98 {636*OVERSAMPLENR, 110},
99 {708*OVERSAMPLENR, 100},
100 {775*OVERSAMPLENR, 90},
101 {835*OVERSAMPLENR, 80},
102 {884*OVERSAMPLENR, 70},
103 {924*OVERSAMPLENR, 60},
104 {955*OVERSAMPLENR, 50},
105 {977*OVERSAMPLENR, 40},
106 {993*OVERSAMPLENR, 30},
107 {1004*OVERSAMPLENR, 20},
108 {1012*OVERSAMPLENR, 10},
109 {1016*OVERSAMPLENR, 0},
113 #if (THERMISTORHEATER_0 == 3) || (THERMISTORHEATER_1 == 3) || (THERMISTORHEATER_2 == 3) || (THERMISTORBED == 3) //mendel-parts
114 const short temptable_3[][2] PROGMEM = {
115 {1*OVERSAMPLENR,864},
116 {21*OVERSAMPLENR,300},
117 {25*OVERSAMPLENR,290},
118 {29*OVERSAMPLENR,280},
119 {33*OVERSAMPLENR,270},
120 {39*OVERSAMPLENR,260},
121 {46*OVERSAMPLENR,250},
122 {54*OVERSAMPLENR,240},
123 {64*OVERSAMPLENR,230},
124 {75*OVERSAMPLENR,220},
125 {90*OVERSAMPLENR,210},
126 {107*OVERSAMPLENR,200},
127 {128*OVERSAMPLENR,190},
128 {154*OVERSAMPLENR,180},
129 {184*OVERSAMPLENR,170},
130 {221*OVERSAMPLENR,160},
131 {265*OVERSAMPLENR,150},
132 {316*OVERSAMPLENR,140},
133 {375*OVERSAMPLENR,130},
134 {441*OVERSAMPLENR,120},
135 {513*OVERSAMPLENR,110},
136 {588*OVERSAMPLENR,100},
137 {734*OVERSAMPLENR,80},
138 {856*OVERSAMPLENR,60},
139 {938*OVERSAMPLENR,40},
140 {986*OVERSAMPLENR,20},
141 {1008*OVERSAMPLENR,0},
142 {1018*OVERSAMPLENR,-20}
146 #if (THERMISTORHEATER_0 == 4) || (THERMISTORHEATER_1 == 4) || (THERMISTORHEATER_2 == 4) || (THERMISTORBED == 4) //10k thermistor
147 const short temptable_4[][2] PROGMEM = {
148 {1*OVERSAMPLENR, 430},
149 {54*OVERSAMPLENR, 137},
150 {107*OVERSAMPLENR, 107},
151 {160*OVERSAMPLENR, 91},
152 {213*OVERSAMPLENR, 80},
153 {266*OVERSAMPLENR, 71},
154 {319*OVERSAMPLENR, 64},
155 {372*OVERSAMPLENR, 57},
156 {425*OVERSAMPLENR, 51},
157 {478*OVERSAMPLENR, 46},
158 {531*OVERSAMPLENR, 41},
159 {584*OVERSAMPLENR, 35},
160 {637*OVERSAMPLENR, 30},
161 {690*OVERSAMPLENR, 25},
162 {743*OVERSAMPLENR, 20},
163 {796*OVERSAMPLENR, 14},
164 {849*OVERSAMPLENR, 7},
165 {902*OVERSAMPLENR, 0},
166 {955*OVERSAMPLENR, -11},
167 {1008*OVERSAMPLENR, -35}
171 #if (THERMISTORHEATER_0 == 5) || (THERMISTORHEATER_1 == 5) || (THERMISTORHEATER_2 == 5) || (THERMISTORBED == 5) //100k ParCan thermistor (104GT-2)
172 const short temptable_5[][2] PROGMEM = {
173 // ATC Semitec 104GT-2 (Used in ParCan)
174 // Verified by linagee. Source: http://shop.arcol.hu/static/datasheets/thermistors.pdf
175 // Calculated using 4.7kohm pullup, voltage divider math, and manufacturer provided temp/resistance
176 {17*OVERSAMPLENR, 300},
177 {20*OVERSAMPLENR, 290},
178 {23*OVERSAMPLENR, 280},
179 {27*OVERSAMPLENR, 270},
180 {31*OVERSAMPLENR, 260},
181 {37*OVERSAMPLENR, 250},
182 {43*OVERSAMPLENR, 240},
183 {51*OVERSAMPLENR, 230},
184 {61*OVERSAMPLENR, 220},
185 {73*OVERSAMPLENR, 210},
186 {87*OVERSAMPLENR, 200},
187 {106*OVERSAMPLENR, 190},
188 {128*OVERSAMPLENR, 180},
189 {155*OVERSAMPLENR, 170},
190 {189*OVERSAMPLENR, 160},
191 {230*OVERSAMPLENR, 150},
192 {278*OVERSAMPLENR, 140},
193 {336*OVERSAMPLENR, 130},
194 {402*OVERSAMPLENR, 120},
195 {476*OVERSAMPLENR, 110},
196 {554*OVERSAMPLENR, 100},
197 {635*OVERSAMPLENR, 90},
198 {713*OVERSAMPLENR, 80},
199 {784*OVERSAMPLENR, 70},
200 {846*OVERSAMPLENR, 60},
201 {897*OVERSAMPLENR, 50},
202 {937*OVERSAMPLENR, 40},
203 {966*OVERSAMPLENR, 30},
204 {986*OVERSAMPLENR, 20},
205 {1000*OVERSAMPLENR, 10},
206 {1010*OVERSAMPLENR, 0}
210 #if (THERMISTORHEATER_0 == 6) || (THERMISTORHEATER_1 == 6) || (THERMISTORHEATER_2 == 6) || (THERMISTORBED == 6) // 100k Epcos thermistor
211 const short temptable_6[][2] PROGMEM = {
212 {28*OVERSAMPLENR, 250},
213 {31*OVERSAMPLENR, 245},
214 {35*OVERSAMPLENR, 240},
215 {39*OVERSAMPLENR, 235},
216 {42*OVERSAMPLENR, 230},
217 {44*OVERSAMPLENR, 225},
218 {49*OVERSAMPLENR, 220},
219 {53*OVERSAMPLENR, 215},
220 {62*OVERSAMPLENR, 210},
221 {73*OVERSAMPLENR, 205},
222 {72*OVERSAMPLENR, 200},
223 {94*OVERSAMPLENR, 190},
224 {102*OVERSAMPLENR, 185},
225 {116*OVERSAMPLENR, 170},
226 {143*OVERSAMPLENR, 160},
227 {183*OVERSAMPLENR, 150},
228 {223*OVERSAMPLENR, 140},
229 {270*OVERSAMPLENR, 130},
230 {318*OVERSAMPLENR, 120},
231 {383*OVERSAMPLENR, 110},
232 {413*OVERSAMPLENR, 105},
233 {439*OVERSAMPLENR, 100},
234 {484*OVERSAMPLENR, 95},
235 {513*OVERSAMPLENR, 90},
236 {607*OVERSAMPLENR, 80},
237 {664*OVERSAMPLENR, 70},
238 {781*OVERSAMPLENR, 60},
239 {810*OVERSAMPLENR, 55},
240 {849*OVERSAMPLENR, 50},
241 {914*OVERSAMPLENR, 45},
242 {914*OVERSAMPLENR, 40},
243 {935*OVERSAMPLENR, 35},
244 {954*OVERSAMPLENR, 30},
245 {970*OVERSAMPLENR, 25},
246 {978*OVERSAMPLENR, 22},
247 {1008*OVERSAMPLENR, 3}
251 #if (THERMISTORHEATER_0 == 7) || (THERMISTORHEATER_1 == 7) || (THERMISTORHEATER_2 == 7) || (THERMISTORBED == 7) // 100k Honeywell 135-104LAG-J01
252 const short temptable_7[][2] PROGMEM = {
253 {46*OVERSAMPLENR, 270},
254 {50*OVERSAMPLENR, 265},
255 {54*OVERSAMPLENR, 260},
256 {58*OVERSAMPLENR, 255},
257 {62*OVERSAMPLENR, 250},
258 {67*OVERSAMPLENR, 245},
259 {72*OVERSAMPLENR, 240},
260 {79*OVERSAMPLENR, 235},
261 {85*OVERSAMPLENR, 230},
262 {91*OVERSAMPLENR, 225},
263 {99*OVERSAMPLENR, 220},
264 {107*OVERSAMPLENR, 215},
265 {116*OVERSAMPLENR, 210},
266 {126*OVERSAMPLENR, 205},
267 {136*OVERSAMPLENR, 200},
268 {149*OVERSAMPLENR, 195},
269 {160*OVERSAMPLENR, 190},
270 {175*OVERSAMPLENR, 185},
271 {191*OVERSAMPLENR, 180},
272 {209*OVERSAMPLENR, 175},
273 {224*OVERSAMPLENR, 170},
274 {246*OVERSAMPLENR, 165},
275 {267*OVERSAMPLENR, 160},
276 {293*OVERSAMPLENR, 155},
277 {316*OVERSAMPLENR, 150},
278 {340*OVERSAMPLENR, 145},
279 {364*OVERSAMPLENR, 140},
280 {396*OVERSAMPLENR, 135},
281 {425*OVERSAMPLENR, 130},
282 {460*OVERSAMPLENR, 125},
283 {489*OVERSAMPLENR, 120},
284 {526*OVERSAMPLENR, 115},
285 {558*OVERSAMPLENR, 110},
286 {591*OVERSAMPLENR, 105},
287 {628*OVERSAMPLENR, 100},
288 {660*OVERSAMPLENR, 95},
289 {696*OVERSAMPLENR, 90},
290 {733*OVERSAMPLENR, 85},
291 {761*OVERSAMPLENR, 80},
292 {794*OVERSAMPLENR, 75},
293 {819*OVERSAMPLENR, 70},
294 {847*OVERSAMPLENR, 65},
295 {870*OVERSAMPLENR, 60},
296 {892*OVERSAMPLENR, 55},
297 {911*OVERSAMPLENR, 50},
298 {929*OVERSAMPLENR, 45},
299 {944*OVERSAMPLENR, 40},
300 {959*OVERSAMPLENR, 35},
301 {971*OVERSAMPLENR, 30},
302 {981*OVERSAMPLENR, 25},
303 {989*OVERSAMPLENR, 20},
304 {994*OVERSAMPLENR, 15},
305 {1001*OVERSAMPLENR, 10},
306 {1005*OVERSAMPLENR, 5}
310 #if (THERMISTORHEATER_0 == 51) || (THERMISTORHEATER_1 == 51) || (THERMISTORHEATER_2 == 51) || (THERMISTORBED == 51)
311 // 100k EPCOS (WITH 1kohm RESISTOR FOR PULLUP, R9 ON SANGUINOLOLU! NOT FOR 4.7kohm PULLUP! THIS IS NOT NORMAL!)
312 // Verified by linagee.
313 // Calculated using 1kohm pullup, voltage divider math, and manufacturer provided temp/resistance
314 // Advantage: Twice the resolution and better linearity from 150C to 200C
315 const short temptable_51[][2] PROGMEM = {
316 {190*OVERSAMPLENR, 250},
317 {203*OVERSAMPLENR, 245},
318 {217*OVERSAMPLENR, 240},
319 {232*OVERSAMPLENR, 235},
320 {248*OVERSAMPLENR, 230},
321 {265*OVERSAMPLENR, 225},
322 {283*OVERSAMPLENR, 220},
323 {302*OVERSAMPLENR, 215},
324 {322*OVERSAMPLENR, 210},
325 {344*OVERSAMPLENR, 205},
326 {366*OVERSAMPLENR, 200},
327 {390*OVERSAMPLENR, 195},
328 {415*OVERSAMPLENR, 190},
329 {440*OVERSAMPLENR, 185},
330 {467*OVERSAMPLENR, 180},
331 {494*OVERSAMPLENR, 175},
332 {522*OVERSAMPLENR, 170},
333 {551*OVERSAMPLENR, 165},
334 {580*OVERSAMPLENR, 160},
335 {609*OVERSAMPLENR, 155},
336 {638*OVERSAMPLENR, 150},
337 {666*OVERSAMPLENR, 145},
338 {695*OVERSAMPLENR, 140},
339 {722*OVERSAMPLENR, 135},
340 {749*OVERSAMPLENR, 130},
341 {775*OVERSAMPLENR, 125},
342 {800*OVERSAMPLENR, 120},
343 {823*OVERSAMPLENR, 115},
344 {845*OVERSAMPLENR, 110},
345 {865*OVERSAMPLENR, 105},
346 {884*OVERSAMPLENR, 100},
347 {901*OVERSAMPLENR, 95},
348 {917*OVERSAMPLENR, 90},
349 {932*OVERSAMPLENR, 85},
350 {944*OVERSAMPLENR, 80},
351 {956*OVERSAMPLENR, 75},
352 {966*OVERSAMPLENR, 70},
353 {975*OVERSAMPLENR, 65},
354 {982*OVERSAMPLENR, 60},
355 {989*OVERSAMPLENR, 55},
356 {995*OVERSAMPLENR, 50},
357 {1000*OVERSAMPLENR, 45},
358 {1004*OVERSAMPLENR, 40},
359 {1007*OVERSAMPLENR, 35},
360 {1010*OVERSAMPLENR, 30},
361 {1013*OVERSAMPLENR, 25},
362 {1015*OVERSAMPLENR, 20},
363 {1017*OVERSAMPLENR, 15},
364 {1018*OVERSAMPLENR, 10},
365 {1019*OVERSAMPLENR, 5},
366 {1020*OVERSAMPLENR, 0},
367 {1021*OVERSAMPLENR, -5}
371 #if (THERMISTORHEATER_0 == 52) || (THERMISTORHEATER_1 == 52) || (THERMISTORHEATER_2 == 52) || (THERMISTORBED == 52)
372 // 200k ATC Semitec 204GT-2 (WITH 1kohm RESISTOR FOR PULLUP, R9 ON SANGUINOLOLU! NOT FOR 4.7kohm PULLUP! THIS IS NOT NORMAL!)
373 // Verified by linagee. Source: http://shop.arcol.hu/static/datasheets/thermistors.pdf
374 // Calculated using 1kohm pullup, voltage divider math, and manufacturer provided temp/resistance
375 // Advantage: More resolution and better linearity from 150C to 200C
376 const short temptable_52[][2] PROGMEM = {
377 {125*OVERSAMPLENR, 300},
378 {142*OVERSAMPLENR, 290},
379 {162*OVERSAMPLENR, 280},
380 {185*OVERSAMPLENR, 270},
381 {211*OVERSAMPLENR, 260},
382 {240*OVERSAMPLENR, 250},
383 {274*OVERSAMPLENR, 240},
384 {312*OVERSAMPLENR, 230},
385 {355*OVERSAMPLENR, 220},
386 {401*OVERSAMPLENR, 210},
387 {452*OVERSAMPLENR, 200},
388 {506*OVERSAMPLENR, 190},
389 {563*OVERSAMPLENR, 180},
390 {620*OVERSAMPLENR, 170},
391 {677*OVERSAMPLENR, 160},
392 {732*OVERSAMPLENR, 150},
393 {783*OVERSAMPLENR, 140},
394 {830*OVERSAMPLENR, 130},
395 {871*OVERSAMPLENR, 120},
396 {906*OVERSAMPLENR, 110},
397 {935*OVERSAMPLENR, 100},
398 {958*OVERSAMPLENR, 90},
399 {976*OVERSAMPLENR, 80},
400 {990*OVERSAMPLENR, 70},
401 {1000*OVERSAMPLENR, 60},
402 {1008*OVERSAMPLENR, 50},
403 {1013*OVERSAMPLENR, 40},
404 {1017*OVERSAMPLENR, 30},
405 {1019*OVERSAMPLENR, 20},
406 {1021*OVERSAMPLENR, 10},
407 {1022*OVERSAMPLENR, 0}
413 #define _TT_NAME(_N) temptable_ ## _N
414 #define TT_NAME(_N) _TT_NAME(_N)
416 #ifdef THERMISTORHEATER_0
417 #define heater_0_temptable TT_NAME(THERMISTORHEATER_0)
418 #define heater_0_temptable_len (sizeof(heater_0_temptable)/sizeof(*heater_0_temptable))
420 #ifdef HEATER_0_USES_THERMISTOR
421 #error No heater 0 thermistor table specified
422 #else // HEATER_0_USES_THERMISTOR
423 #define heater_0_temptable 0
424 #define heater_0_temptable_len 0
425 #endif // HEATER_0_USES_THERMISTOR
428 #ifdef THERMISTORHEATER_1
429 #define heater_1_temptable TT_NAME(THERMISTORHEATER_1)
430 #define heater_1_temptable_len (sizeof(heater_1_temptable)/sizeof(*heater_1_temptable))
432 #ifdef HEATER_1_USES_THERMISTOR
433 #error No heater 1 thermistor table specified
434 #else // HEATER_1_USES_THERMISTOR
435 #define heater_1_temptable 0
436 #define heater_1_temptable_len 0
437 #endif // HEATER_1_USES_THERMISTOR
440 #ifdef THERMISTORHEATER_2
441 #define heater_2_temptable TT_NAME(THERMISTORHEATER_2)
442 #define heater_2_temptable_len (sizeof(heater_2_temptable)/sizeof(*heater_2_temptable))
444 #ifdef HEATER_2_USES_THERMISTOR
445 #error No heater 2 thermistor table specified
446 #else // HEATER_2_USES_THERMISTOR
447 #define heater_2_temptable 0
448 #define heater_2_temptable_len 0
449 #endif // HEATER_2_USES_THERMISTOR
453 #define bedtemptable TT_NAME(THERMISTORBED)
454 #define bedtemptable_len (sizeof(bedtemptable)/sizeof(*bedtemptable))
456 #ifdef BED_USES_THERMISTOR
457 #error No bed thermistor table specified
458 #endif // BED_USES_THERMISTOR
461 #endif //THERMISTORTABLES_H_