thermistortables.h 41 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273
  1. #ifndef THERMISTORTABLES_H_
  2. #define THERMISTORTABLES_H_
  3. #include "Marlin.h"
  4. #define OVERSAMPLENR 16
  5. #if (THERMISTORHEATER_0 == 1) || (THERMISTORHEATER_1 == 1) || (THERMISTORHEATER_2 == 1) || (THERMISTORBED == 1) //100k bed thermistor
  6. const short temptable_1[][2] PROGMEM = {
  7. { 23*OVERSAMPLENR , 300 },
  8. { 25*OVERSAMPLENR , 295 },
  9. { 27*OVERSAMPLENR , 290 },
  10. { 28*OVERSAMPLENR , 285 },
  11. { 31*OVERSAMPLENR , 280 },
  12. { 33*OVERSAMPLENR , 275 },
  13. { 35*OVERSAMPLENR , 270 },
  14. { 38*OVERSAMPLENR , 265 },
  15. { 41*OVERSAMPLENR , 260 },
  16. { 44*OVERSAMPLENR , 255 },
  17. { 48*OVERSAMPLENR , 250 },
  18. { 52*OVERSAMPLENR , 245 },
  19. { 56*OVERSAMPLENR , 240 },
  20. { 61*OVERSAMPLENR , 235 },
  21. { 66*OVERSAMPLENR , 230 },
  22. { 71*OVERSAMPLENR , 225 },
  23. { 78*OVERSAMPLENR , 220 },
  24. { 84*OVERSAMPLENR , 215 },
  25. { 92*OVERSAMPLENR , 210 },
  26. { 100*OVERSAMPLENR , 205 },
  27. { 109*OVERSAMPLENR , 200 },
  28. { 120*OVERSAMPLENR , 195 },
  29. { 131*OVERSAMPLENR , 190 },
  30. { 143*OVERSAMPLENR , 185 },
  31. { 156*OVERSAMPLENR , 180 },
  32. { 171*OVERSAMPLENR , 175 },
  33. { 187*OVERSAMPLENR , 170 },
  34. { 205*OVERSAMPLENR , 165 },
  35. { 224*OVERSAMPLENR , 160 },
  36. { 245*OVERSAMPLENR , 155 },
  37. { 268*OVERSAMPLENR , 150 },
  38. { 293*OVERSAMPLENR , 145 },
  39. { 320*OVERSAMPLENR , 140 },
  40. { 348*OVERSAMPLENR , 135 },
  41. { 379*OVERSAMPLENR , 130 },
  42. { 411*OVERSAMPLENR , 125 },
  43. { 445*OVERSAMPLENR , 120 },
  44. { 480*OVERSAMPLENR , 115 },
  45. { 516*OVERSAMPLENR , 110 },
  46. { 553*OVERSAMPLENR , 105 },
  47. { 591*OVERSAMPLENR , 100 },
  48. { 628*OVERSAMPLENR , 95 },
  49. { 665*OVERSAMPLENR , 90 },
  50. { 702*OVERSAMPLENR , 85 },
  51. { 737*OVERSAMPLENR , 80 },
  52. { 770*OVERSAMPLENR , 75 },
  53. { 801*OVERSAMPLENR , 70 },
  54. { 830*OVERSAMPLENR , 65 },
  55. { 857*OVERSAMPLENR , 60 },
  56. { 881*OVERSAMPLENR , 55 },
  57. { 903*OVERSAMPLENR , 50 },
  58. { 922*OVERSAMPLENR , 45 },
  59. { 939*OVERSAMPLENR , 40 },
  60. { 954*OVERSAMPLENR , 35 },
  61. { 966*OVERSAMPLENR , 30 },
  62. { 977*OVERSAMPLENR , 25 },
  63. { 985*OVERSAMPLENR , 20 },
  64. { 993*OVERSAMPLENR , 15 },
  65. { 999*OVERSAMPLENR , 10 },
  66. { 1004*OVERSAMPLENR , 5 },
  67. { 1008*OVERSAMPLENR , 0 } //safety
  68. };
  69. #endif
  70. #if (THERMISTORHEATER_0 == 2) || (THERMISTORHEATER_1 == 2) || (THERMISTORHEATER_2 == 2) || (THERMISTORBED == 2) //200k bed thermistor
  71. const short temptable_2[][2] PROGMEM = {
  72. //200k ATC Semitec 204GT-2
  73. //Verified by linagee. Source: http://shop.arcol.hu/static/datasheets/thermistors.pdf
  74. // Calculated using 4.7kohm pullup, voltage divider math, and manufacturer provided temp/resistance
  75. {1*OVERSAMPLENR, 848},
  76. {30*OVERSAMPLENR, 300}, //top rating 300C
  77. {34*OVERSAMPLENR, 290},
  78. {39*OVERSAMPLENR, 280},
  79. {46*OVERSAMPLENR, 270},
  80. {53*OVERSAMPLENR, 260},
  81. {63*OVERSAMPLENR, 250},
  82. {74*OVERSAMPLENR, 240},
  83. {87*OVERSAMPLENR, 230},
  84. {104*OVERSAMPLENR, 220},
  85. {124*OVERSAMPLENR, 210},
  86. {148*OVERSAMPLENR, 200},
  87. {176*OVERSAMPLENR, 190},
  88. {211*OVERSAMPLENR, 180},
  89. {252*OVERSAMPLENR, 170},
  90. {301*OVERSAMPLENR, 160},
  91. {357*OVERSAMPLENR, 150},
  92. {420*OVERSAMPLENR, 140},
  93. {489*OVERSAMPLENR, 130},
  94. {562*OVERSAMPLENR, 120},
  95. {636*OVERSAMPLENR, 110},
  96. {708*OVERSAMPLENR, 100},
  97. {775*OVERSAMPLENR, 90},
  98. {835*OVERSAMPLENR, 80},
  99. {884*OVERSAMPLENR, 70},
  100. {924*OVERSAMPLENR, 60},
  101. {955*OVERSAMPLENR, 50},
  102. {977*OVERSAMPLENR, 40},
  103. {993*OVERSAMPLENR, 30},
  104. {1004*OVERSAMPLENR, 20},
  105. {1012*OVERSAMPLENR, 10},
  106. {1016*OVERSAMPLENR, 0},
  107. };
  108. #endif
  109. #if (THERMISTORHEATER_0 == 3) || (THERMISTORHEATER_1 == 3) || (THERMISTORHEATER_2 == 3) || (THERMISTORBED == 3) //mendel-parts
  110. const short temptable_3[][2] PROGMEM = {
  111. {1*OVERSAMPLENR,864},
  112. {21*OVERSAMPLENR,300},
  113. {25*OVERSAMPLENR,290},
  114. {29*OVERSAMPLENR,280},
  115. {33*OVERSAMPLENR,270},
  116. {39*OVERSAMPLENR,260},
  117. {46*OVERSAMPLENR,250},
  118. {54*OVERSAMPLENR,240},
  119. {64*OVERSAMPLENR,230},
  120. {75*OVERSAMPLENR,220},
  121. {90*OVERSAMPLENR,210},
  122. {107*OVERSAMPLENR,200},
  123. {128*OVERSAMPLENR,190},
  124. {154*OVERSAMPLENR,180},
  125. {184*OVERSAMPLENR,170},
  126. {221*OVERSAMPLENR,160},
  127. {265*OVERSAMPLENR,150},
  128. {316*OVERSAMPLENR,140},
  129. {375*OVERSAMPLENR,130},
  130. {441*OVERSAMPLENR,120},
  131. {513*OVERSAMPLENR,110},
  132. {588*OVERSAMPLENR,100},
  133. {734*OVERSAMPLENR,80},
  134. {856*OVERSAMPLENR,60},
  135. {938*OVERSAMPLENR,40},
  136. {986*OVERSAMPLENR,20},
  137. {1008*OVERSAMPLENR,0},
  138. {1018*OVERSAMPLENR,-20}
  139. };
  140. #endif
  141. #if (THERMISTORHEATER_0 == 4) || (THERMISTORHEATER_1 == 4) || (THERMISTORHEATER_2 == 4) || (THERMISTORBED == 4) //10k thermistor
  142. const short temptable_4[][2] PROGMEM = {
  143. {1*OVERSAMPLENR, 430},
  144. {54*OVERSAMPLENR, 137},
  145. {107*OVERSAMPLENR, 107},
  146. {160*OVERSAMPLENR, 91},
  147. {213*OVERSAMPLENR, 80},
  148. {266*OVERSAMPLENR, 71},
  149. {319*OVERSAMPLENR, 64},
  150. {372*OVERSAMPLENR, 57},
  151. {425*OVERSAMPLENR, 51},
  152. {478*OVERSAMPLENR, 46},
  153. {531*OVERSAMPLENR, 41},
  154. {584*OVERSAMPLENR, 35},
  155. {637*OVERSAMPLENR, 30},
  156. {690*OVERSAMPLENR, 25},
  157. {743*OVERSAMPLENR, 20},
  158. {796*OVERSAMPLENR, 14},
  159. {849*OVERSAMPLENR, 7},
  160. {902*OVERSAMPLENR, 0},
  161. {955*OVERSAMPLENR, -11},
  162. {1008*OVERSAMPLENR, -35}
  163. };
  164. #endif
  165. #if (THERMISTORHEATER_0 == 5) || (THERMISTORHEATER_1 == 5) || (THERMISTORHEATER_2 == 5) || (THERMISTORBED == 5) //100k ParCan thermistor (104GT-2)
  166. const short temptable_5[][2] PROGMEM = {
  167. // ATC Semitec 104GT-2 (Used in ParCan)
  168. // Verified by linagee. Source: http://shop.arcol.hu/static/datasheets/thermistors.pdf
  169. // Calculated using 4.7kohm pullup, voltage divider math, and manufacturer provided temp/resistance
  170. {1*OVERSAMPLENR, 713},
  171. {17*OVERSAMPLENR, 300}, //top rating 300C
  172. {20*OVERSAMPLENR, 290},
  173. {23*OVERSAMPLENR, 280},
  174. {27*OVERSAMPLENR, 270},
  175. {31*OVERSAMPLENR, 260},
  176. {37*OVERSAMPLENR, 250},
  177. {43*OVERSAMPLENR, 240},
  178. {51*OVERSAMPLENR, 230},
  179. {61*OVERSAMPLENR, 220},
  180. {73*OVERSAMPLENR, 210},
  181. {87*OVERSAMPLENR, 200},
  182. {106*OVERSAMPLENR, 190},
  183. {128*OVERSAMPLENR, 180},
  184. {155*OVERSAMPLENR, 170},
  185. {189*OVERSAMPLENR, 160},
  186. {230*OVERSAMPLENR, 150},
  187. {278*OVERSAMPLENR, 140},
  188. {336*OVERSAMPLENR, 130},
  189. {402*OVERSAMPLENR, 120},
  190. {476*OVERSAMPLENR, 110},
  191. {554*OVERSAMPLENR, 100},
  192. {635*OVERSAMPLENR, 90},
  193. {713*OVERSAMPLENR, 80},
  194. {784*OVERSAMPLENR, 70},
  195. {846*OVERSAMPLENR, 60},
  196. {897*OVERSAMPLENR, 50},
  197. {937*OVERSAMPLENR, 40},
  198. {966*OVERSAMPLENR, 30},
  199. {986*OVERSAMPLENR, 20},
  200. {1000*OVERSAMPLENR, 10},
  201. {1010*OVERSAMPLENR, 0}
  202. };
  203. #endif
  204. #if (THERMISTORHEATER_0 == 6) || (THERMISTORHEATER_1 == 6) || (THERMISTORHEATER_2 == 6) || (THERMISTORBED == 6) // 100k Epcos thermistor
  205. const short temptable_6[][2] PROGMEM = {
  206. {1*OVERSAMPLENR, 350},
  207. {28*OVERSAMPLENR, 250}, //top rating 250C
  208. {31*OVERSAMPLENR, 245},
  209. {35*OVERSAMPLENR, 240},
  210. {39*OVERSAMPLENR, 235},
  211. {42*OVERSAMPLENR, 230},
  212. {44*OVERSAMPLENR, 225},
  213. {49*OVERSAMPLENR, 220},
  214. {53*OVERSAMPLENR, 215},
  215. {62*OVERSAMPLENR, 210},
  216. {71*OVERSAMPLENR, 205}, //fitted graphically
  217. {78*OVERSAMPLENR, 200}, //fitted graphically
  218. {94*OVERSAMPLENR, 190},
  219. {102*OVERSAMPLENR, 185},
  220. {116*OVERSAMPLENR, 170},
  221. {143*OVERSAMPLENR, 160},
  222. {183*OVERSAMPLENR, 150},
  223. {223*OVERSAMPLENR, 140},
  224. {270*OVERSAMPLENR, 130},
  225. {318*OVERSAMPLENR, 120},
  226. {383*OVERSAMPLENR, 110},
  227. {413*OVERSAMPLENR, 105},
  228. {439*OVERSAMPLENR, 100},
  229. {484*OVERSAMPLENR, 95},
  230. {513*OVERSAMPLENR, 90},
  231. {607*OVERSAMPLENR, 80},
  232. {664*OVERSAMPLENR, 70},
  233. {781*OVERSAMPLENR, 60},
  234. {810*OVERSAMPLENR, 55},
  235. {849*OVERSAMPLENR, 50},
  236. {914*OVERSAMPLENR, 45},
  237. {914*OVERSAMPLENR, 40},
  238. {935*OVERSAMPLENR, 35},
  239. {954*OVERSAMPLENR, 30},
  240. {970*OVERSAMPLENR, 25},
  241. {978*OVERSAMPLENR, 22},
  242. {1008*OVERSAMPLENR, 3},
  243. {1023*OVERSAMPLENR, 0} //to allow internal 0 degrees C
  244. };
  245. #endif
  246. #if (THERMISTORHEATER_0 == 7) || (THERMISTORHEATER_1 == 7) || (THERMISTORHEATER_2 == 7) || (THERMISTORBED == 7) // 100k Honeywell 135-104LAG-J01
  247. const short temptable_7[][2] PROGMEM = {
  248. {1*OVERSAMPLENR, 941},
  249. {19*OVERSAMPLENR, 362},
  250. {37*OVERSAMPLENR, 299}, //top rating 300C
  251. {55*OVERSAMPLENR, 266},
  252. {73*OVERSAMPLENR, 245},
  253. {91*OVERSAMPLENR, 229},
  254. {109*OVERSAMPLENR, 216},
  255. {127*OVERSAMPLENR, 206},
  256. {145*OVERSAMPLENR, 197},
  257. {163*OVERSAMPLENR, 190},
  258. {181*OVERSAMPLENR, 183},
  259. {199*OVERSAMPLENR, 177},
  260. {217*OVERSAMPLENR, 171},
  261. {235*OVERSAMPLENR, 166},
  262. {253*OVERSAMPLENR, 162},
  263. {271*OVERSAMPLENR, 157},
  264. {289*OVERSAMPLENR, 153},
  265. {307*OVERSAMPLENR, 149},
  266. {325*OVERSAMPLENR, 146},
  267. {343*OVERSAMPLENR, 142},
  268. {361*OVERSAMPLENR, 139},
  269. {379*OVERSAMPLENR, 135},
  270. {397*OVERSAMPLENR, 132},
  271. {415*OVERSAMPLENR, 129},
  272. {433*OVERSAMPLENR, 126},
  273. {451*OVERSAMPLENR, 123},
  274. {469*OVERSAMPLENR, 121},
  275. {487*OVERSAMPLENR, 118},
  276. {505*OVERSAMPLENR, 115},
  277. {523*OVERSAMPLENR, 112},
  278. {541*OVERSAMPLENR, 110},
  279. {559*OVERSAMPLENR, 107},
  280. {577*OVERSAMPLENR, 105},
  281. {595*OVERSAMPLENR, 102},
  282. {613*OVERSAMPLENR, 99},
  283. {631*OVERSAMPLENR, 97},
  284. {649*OVERSAMPLENR, 94},
  285. {667*OVERSAMPLENR, 92},
  286. {685*OVERSAMPLENR, 89},
  287. {703*OVERSAMPLENR, 86},
  288. {721*OVERSAMPLENR, 84},
  289. {739*OVERSAMPLENR, 81},
  290. {757*OVERSAMPLENR, 78},
  291. {775*OVERSAMPLENR, 75},
  292. {793*OVERSAMPLENR, 72},
  293. {811*OVERSAMPLENR, 69},
  294. {829*OVERSAMPLENR, 66},
  295. {847*OVERSAMPLENR, 62},
  296. {865*OVERSAMPLENR, 59},
  297. {883*OVERSAMPLENR, 55},
  298. {901*OVERSAMPLENR, 51},
  299. {919*OVERSAMPLENR, 46},
  300. {937*OVERSAMPLENR, 41},
  301. {955*OVERSAMPLENR, 35},
  302. {973*OVERSAMPLENR, 27},
  303. {991*OVERSAMPLENR, 17},
  304. {1009*OVERSAMPLENR, 1},
  305. {1023*OVERSAMPLENR, 0} //to allow internal 0 degrees C
  306. };
  307. #endif
  308. #if (THERMISTORHEATER_0 == 71) || (THERMISTORHEATER_1 == 71) || (THERMISTORHEATER_2 == 71) || (THERMISTORBED == 71) // 100k Honeywell 135-104LAF-J01
  309. // R0 = 100000 Ohm
  310. // T0 = 25 °C
  311. // Beta = 3974
  312. // R1 = 0 Ohm
  313. // R2 = 4700 Ohm
  314. const short temptable_71[][2] PROGMEM = {
  315. {35*OVERSAMPLENR, 300},
  316. {51*OVERSAMPLENR, 270},
  317. {54*OVERSAMPLENR, 265},
  318. {58*OVERSAMPLENR, 260},
  319. {59*OVERSAMPLENR, 258},
  320. {61*OVERSAMPLENR, 256},
  321. {63*OVERSAMPLENR, 254},
  322. {64*OVERSAMPLENR, 252},
  323. {66*OVERSAMPLENR, 250},
  324. {67*OVERSAMPLENR, 249},
  325. {68*OVERSAMPLENR, 248},
  326. {69*OVERSAMPLENR, 247},
  327. {70*OVERSAMPLENR, 246},
  328. {71*OVERSAMPLENR, 245},
  329. {72*OVERSAMPLENR, 244},
  330. {73*OVERSAMPLENR, 243},
  331. {74*OVERSAMPLENR, 242},
  332. {75*OVERSAMPLENR, 241},
  333. {76*OVERSAMPLENR, 240},
  334. {77*OVERSAMPLENR, 239},
  335. {78*OVERSAMPLENR, 238},
  336. {79*OVERSAMPLENR, 237},
  337. {80*OVERSAMPLENR, 236},
  338. {81*OVERSAMPLENR, 235},
  339. {82*OVERSAMPLENR, 234},
  340. {84*OVERSAMPLENR, 233},
  341. {85*OVERSAMPLENR, 232},
  342. {86*OVERSAMPLENR, 231},
  343. {87*OVERSAMPLENR, 230},
  344. {89*OVERSAMPLENR, 229},
  345. {90*OVERSAMPLENR, 228},
  346. {91*OVERSAMPLENR, 227},
  347. {92*OVERSAMPLENR, 226},
  348. {94*OVERSAMPLENR, 225},
  349. {95*OVERSAMPLENR, 224},
  350. {97*OVERSAMPLENR, 223},
  351. {98*OVERSAMPLENR, 222},
  352. {99*OVERSAMPLENR, 221},
  353. {101*OVERSAMPLENR, 220},
  354. {102*OVERSAMPLENR, 219},
  355. {104*OVERSAMPLENR, 218},
  356. {106*OVERSAMPLENR, 217},
  357. {107*OVERSAMPLENR, 216},
  358. {109*OVERSAMPLENR, 215},
  359. {110*OVERSAMPLENR, 214},
  360. {112*OVERSAMPLENR, 213},
  361. {114*OVERSAMPLENR, 212},
  362. {115*OVERSAMPLENR, 211},
  363. {117*OVERSAMPLENR, 210},
  364. {119*OVERSAMPLENR, 209},
  365. {121*OVERSAMPLENR, 208},
  366. {123*OVERSAMPLENR, 207},
  367. {125*OVERSAMPLENR, 206},
  368. {126*OVERSAMPLENR, 205},
  369. {128*OVERSAMPLENR, 204},
  370. {130*OVERSAMPLENR, 203},
  371. {132*OVERSAMPLENR, 202},
  372. {134*OVERSAMPLENR, 201},
  373. {136*OVERSAMPLENR, 200},
  374. {139*OVERSAMPLENR, 199},
  375. {141*OVERSAMPLENR, 198},
  376. {143*OVERSAMPLENR, 197},
  377. {145*OVERSAMPLENR, 196},
  378. {147*OVERSAMPLENR, 195},
  379. {150*OVERSAMPLENR, 194},
  380. {152*OVERSAMPLENR, 193},
  381. {154*OVERSAMPLENR, 192},
  382. {157*OVERSAMPLENR, 191},
  383. {159*OVERSAMPLENR, 190},
  384. {162*OVERSAMPLENR, 189},
  385. {164*OVERSAMPLENR, 188},
  386. {167*OVERSAMPLENR, 187},
  387. {170*OVERSAMPLENR, 186},
  388. {172*OVERSAMPLENR, 185},
  389. {175*OVERSAMPLENR, 184},
  390. {178*OVERSAMPLENR, 183},
  391. {181*OVERSAMPLENR, 182},
  392. {184*OVERSAMPLENR, 181},
  393. {187*OVERSAMPLENR, 180},
  394. {190*OVERSAMPLENR, 179},
  395. {193*OVERSAMPLENR, 178},
  396. {196*OVERSAMPLENR, 177},
  397. {199*OVERSAMPLENR, 176},
  398. {202*OVERSAMPLENR, 175},
  399. {205*OVERSAMPLENR, 174},
  400. {208*OVERSAMPLENR, 173},
  401. {212*OVERSAMPLENR, 172},
  402. {215*OVERSAMPLENR, 171},
  403. {219*OVERSAMPLENR, 170},
  404. {237*OVERSAMPLENR, 165},
  405. {256*OVERSAMPLENR, 160},
  406. {300*OVERSAMPLENR, 150},
  407. {351*OVERSAMPLENR, 140},
  408. {470*OVERSAMPLENR, 120},
  409. {504*OVERSAMPLENR, 115},
  410. {538*OVERSAMPLENR, 110},
  411. {552*OVERSAMPLENR, 108},
  412. {566*OVERSAMPLENR, 106},
  413. {580*OVERSAMPLENR, 104},
  414. {594*OVERSAMPLENR, 102},
  415. {608*OVERSAMPLENR, 100},
  416. {622*OVERSAMPLENR, 98},
  417. {636*OVERSAMPLENR, 96},
  418. {650*OVERSAMPLENR, 94},
  419. {664*OVERSAMPLENR, 92},
  420. {678*OVERSAMPLENR, 90},
  421. {712*OVERSAMPLENR, 85},
  422. {745*OVERSAMPLENR, 80},
  423. {758*OVERSAMPLENR, 78},
  424. {770*OVERSAMPLENR, 76},
  425. {783*OVERSAMPLENR, 74},
  426. {795*OVERSAMPLENR, 72},
  427. {806*OVERSAMPLENR, 70},
  428. {818*OVERSAMPLENR, 68},
  429. {829*OVERSAMPLENR, 66},
  430. {840*OVERSAMPLENR, 64},
  431. {850*OVERSAMPLENR, 62},
  432. {860*OVERSAMPLENR, 60},
  433. {870*OVERSAMPLENR, 58},
  434. {879*OVERSAMPLENR, 56},
  435. {888*OVERSAMPLENR, 54},
  436. {897*OVERSAMPLENR, 52},
  437. {905*OVERSAMPLENR, 50},
  438. {924*OVERSAMPLENR, 45},
  439. {940*OVERSAMPLENR, 40},
  440. {955*OVERSAMPLENR, 35},
  441. {967*OVERSAMPLENR, 30},
  442. {970*OVERSAMPLENR, 29},
  443. {972*OVERSAMPLENR, 28},
  444. {974*OVERSAMPLENR, 27},
  445. {976*OVERSAMPLENR, 26},
  446. {978*OVERSAMPLENR, 25},
  447. {980*OVERSAMPLENR, 24},
  448. {982*OVERSAMPLENR, 23},
  449. {984*OVERSAMPLENR, 22},
  450. {985*OVERSAMPLENR, 21},
  451. {987*OVERSAMPLENR, 20},
  452. {995*OVERSAMPLENR, 15},
  453. {1001*OVERSAMPLENR, 10},
  454. {1006*OVERSAMPLENR, 5},
  455. {1010*OVERSAMPLENR, 0},
  456. };
  457. #endif
  458. #if (THERMISTORHEATER_0 == 8) || (THERMISTORHEATER_1 == 8) || (THERMISTORHEATER_2 == 8) || (THERMISTORBED == 8)
  459. // 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
  460. const short temptable_8[][2] PROGMEM = {
  461. {1*OVERSAMPLENR, 704},
  462. {54*OVERSAMPLENR, 216},
  463. {107*OVERSAMPLENR, 175},
  464. {160*OVERSAMPLENR, 152},
  465. {213*OVERSAMPLENR, 137},
  466. {266*OVERSAMPLENR, 125},
  467. {319*OVERSAMPLENR, 115},
  468. {372*OVERSAMPLENR, 106},
  469. {425*OVERSAMPLENR, 99},
  470. {478*OVERSAMPLENR, 91},
  471. {531*OVERSAMPLENR, 85},
  472. {584*OVERSAMPLENR, 78},
  473. {637*OVERSAMPLENR, 71},
  474. {690*OVERSAMPLENR, 65},
  475. {743*OVERSAMPLENR, 58},
  476. {796*OVERSAMPLENR, 50},
  477. {849*OVERSAMPLENR, 42},
  478. {902*OVERSAMPLENR, 31},
  479. {955*OVERSAMPLENR, 17},
  480. {1008*OVERSAMPLENR, 0}
  481. };
  482. #endif
  483. #if (THERMISTORHEATER_0 == 9) || (THERMISTORHEATER_1 == 9) || (THERMISTORHEATER_2 == 9) || (THERMISTORBED == 9)
  484. // 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
  485. const short temptable_9[][2] PROGMEM = {
  486. {1*OVERSAMPLENR, 936},
  487. {36*OVERSAMPLENR, 300},
  488. {71*OVERSAMPLENR, 246},
  489. {106*OVERSAMPLENR, 218},
  490. {141*OVERSAMPLENR, 199},
  491. {176*OVERSAMPLENR, 185},
  492. {211*OVERSAMPLENR, 173},
  493. {246*OVERSAMPLENR, 163},
  494. {281*OVERSAMPLENR, 155},
  495. {316*OVERSAMPLENR, 147},
  496. {351*OVERSAMPLENR, 140},
  497. {386*OVERSAMPLENR, 134},
  498. {421*OVERSAMPLENR, 128},
  499. {456*OVERSAMPLENR, 122},
  500. {491*OVERSAMPLENR, 117},
  501. {526*OVERSAMPLENR, 112},
  502. {561*OVERSAMPLENR, 107},
  503. {596*OVERSAMPLENR, 102},
  504. {631*OVERSAMPLENR, 97},
  505. {666*OVERSAMPLENR, 92},
  506. {701*OVERSAMPLENR, 87},
  507. {736*OVERSAMPLENR, 81},
  508. {771*OVERSAMPLENR, 76},
  509. {806*OVERSAMPLENR, 70},
  510. {841*OVERSAMPLENR, 63},
  511. {876*OVERSAMPLENR, 56},
  512. {911*OVERSAMPLENR, 48},
  513. {946*OVERSAMPLENR, 38},
  514. {981*OVERSAMPLENR, 23},
  515. {1005*OVERSAMPLENR, 5},
  516. {1016*OVERSAMPLENR, 0}
  517. };
  518. #endif
  519. #if (THERMISTORHEATER_0 == 10) || (THERMISTORHEATER_1 == 10) || (THERMISTORHEATER_2 == 10) || (THERMISTORBED == 10)
  520. // 100k RS thermistor 198-961 (4.7k pullup)
  521. const short temptable_10[][2] PROGMEM = {
  522. {1*OVERSAMPLENR, 929},
  523. {36*OVERSAMPLENR, 299},
  524. {71*OVERSAMPLENR, 246},
  525. {106*OVERSAMPLENR, 217},
  526. {141*OVERSAMPLENR, 198},
  527. {176*OVERSAMPLENR, 184},
  528. {211*OVERSAMPLENR, 173},
  529. {246*OVERSAMPLENR, 163},
  530. {281*OVERSAMPLENR, 154},
  531. {316*OVERSAMPLENR, 147},
  532. {351*OVERSAMPLENR, 140},
  533. {386*OVERSAMPLENR, 134},
  534. {421*OVERSAMPLENR, 128},
  535. {456*OVERSAMPLENR, 122},
  536. {491*OVERSAMPLENR, 117},
  537. {526*OVERSAMPLENR, 112},
  538. {561*OVERSAMPLENR, 107},
  539. {596*OVERSAMPLENR, 102},
  540. {631*OVERSAMPLENR, 97},
  541. {666*OVERSAMPLENR, 91},
  542. {701*OVERSAMPLENR, 86},
  543. {736*OVERSAMPLENR, 81},
  544. {771*OVERSAMPLENR, 76},
  545. {806*OVERSAMPLENR, 70},
  546. {841*OVERSAMPLENR, 63},
  547. {876*OVERSAMPLENR, 56},
  548. {911*OVERSAMPLENR, 48},
  549. {946*OVERSAMPLENR, 38},
  550. {981*OVERSAMPLENR, 23},
  551. {1005*OVERSAMPLENR, 5},
  552. {1016*OVERSAMPLENR, 0}
  553. };
  554. #endif
  555. #if (THERMISTORHEATER_0 == 11) || (THERMISTORHEATER_1 == 11) || (THERMISTORHEATER_2 == 11) || (THERMISTORBED == 11)
  556. // QU-BD silicone bed QWG-104F-3950 thermistor
  557. const short temptable_11[][2] PROGMEM = {
  558. {1*OVERSAMPLENR, 938},
  559. {31*OVERSAMPLENR, 314},
  560. {41*OVERSAMPLENR, 290},
  561. {51*OVERSAMPLENR, 272},
  562. {61*OVERSAMPLENR, 258},
  563. {71*OVERSAMPLENR, 247},
  564. {81*OVERSAMPLENR, 237},
  565. {91*OVERSAMPLENR, 229},
  566. {101*OVERSAMPLENR, 221},
  567. {111*OVERSAMPLENR, 215},
  568. {121*OVERSAMPLENR, 209},
  569. {131*OVERSAMPLENR, 204},
  570. {141*OVERSAMPLENR, 199},
  571. {151*OVERSAMPLENR, 195},
  572. {161*OVERSAMPLENR, 190},
  573. {171*OVERSAMPLENR, 187},
  574. {181*OVERSAMPLENR, 183},
  575. {191*OVERSAMPLENR, 179},
  576. {201*OVERSAMPLENR, 176},
  577. {221*OVERSAMPLENR, 170},
  578. {241*OVERSAMPLENR, 165},
  579. {261*OVERSAMPLENR, 160},
  580. {281*OVERSAMPLENR, 155},
  581. {301*OVERSAMPLENR, 150},
  582. {331*OVERSAMPLENR, 144},
  583. {361*OVERSAMPLENR, 139},
  584. {391*OVERSAMPLENR, 133},
  585. {421*OVERSAMPLENR, 128},
  586. {451*OVERSAMPLENR, 123},
  587. {491*OVERSAMPLENR, 117},
  588. {531*OVERSAMPLENR, 111},
  589. {571*OVERSAMPLENR, 105},
  590. {611*OVERSAMPLENR, 100},
  591. {641*OVERSAMPLENR, 95},
  592. {681*OVERSAMPLENR, 90},
  593. {711*OVERSAMPLENR, 85},
  594. {751*OVERSAMPLENR, 79},
  595. {791*OVERSAMPLENR, 72},
  596. {811*OVERSAMPLENR, 69},
  597. {831*OVERSAMPLENR, 65},
  598. {871*OVERSAMPLENR, 57},
  599. {881*OVERSAMPLENR, 55},
  600. {901*OVERSAMPLENR, 51},
  601. {921*OVERSAMPLENR, 45},
  602. {941*OVERSAMPLENR, 39},
  603. {971*OVERSAMPLENR, 28},
  604. {981*OVERSAMPLENR, 23},
  605. {991*OVERSAMPLENR, 17},
  606. {1001*OVERSAMPLENR, 9},
  607. {1021*OVERSAMPLENR, -27}
  608. };
  609. #endif
  610. #if (THERMISTORHEATER_0 == 13) || (THERMISTORHEATER_1 == 13) || (THERMISTORHEATER_2 == 13) || (THERMISTORBED == 13)
  611. // Hisens thermistor B25/50 =3950 +/-1%
  612. const short temptable_13[][2] PROGMEM = {
  613. { 22.5*OVERSAMPLENR, 300 },
  614. { 24.125*OVERSAMPLENR, 295 },
  615. { 25.875*OVERSAMPLENR, 290 },
  616. { 27.8125*OVERSAMPLENR, 285 },
  617. { 29.9375*OVERSAMPLENR, 280 },
  618. { 32.25*OVERSAMPLENR, 275 },
  619. { 34.8125*OVERSAMPLENR, 270 },
  620. { 37.625*OVERSAMPLENR, 265 },
  621. { 40.6875*OVERSAMPLENR, 260 },
  622. { 44.0625*OVERSAMPLENR, 255 },
  623. { 47.75*OVERSAMPLENR, 250 },
  624. { 51.8125*OVERSAMPLENR, 245 },
  625. { 56.3125*OVERSAMPLENR, 240 },
  626. { 61.25*OVERSAMPLENR, 235 },
  627. { 66.75*OVERSAMPLENR, 230 },
  628. { 72.8125*OVERSAMPLENR, 225 },
  629. { 79.5*OVERSAMPLENR, 220 },
  630. { 87*OVERSAMPLENR, 215 },
  631. { 95.3125*OVERSAMPLENR, 210 },
  632. { 104.1875*OVERSAMPLENR, 205 },
  633. { 112.75*OVERSAMPLENR, 200 },
  634. { 123.125*OVERSAMPLENR, 195 },
  635. { 135.75*OVERSAMPLENR, 190 },
  636. { 148.3125*OVERSAMPLENR, 185 },
  637. { 163.8125*OVERSAMPLENR, 180 },
  638. { 179*OVERSAMPLENR, 175 },
  639. { 211.125*OVERSAMPLENR, 170 },
  640. { 216.125*OVERSAMPLENR, 165 },
  641. { 236.5625*OVERSAMPLENR, 160 },
  642. { 258.5*OVERSAMPLENR, 155 },
  643. { 279.875*OVERSAMPLENR, 150 },
  644. { 305.375*OVERSAMPLENR, 145 },
  645. { 333.25*OVERSAMPLENR, 140 },
  646. { 362.5625*OVERSAMPLENR, 135 },
  647. { 393.6875*OVERSAMPLENR, 130 },
  648. { 425*OVERSAMPLENR, 125 },
  649. { 460.625*OVERSAMPLENR, 120 },
  650. { 495.1875*OVERSAMPLENR, 115 },
  651. { 530.875*OVERSAMPLENR, 110 },
  652. { 567.25*OVERSAMPLENR, 105 },
  653. { 601.625*OVERSAMPLENR, 100 },
  654. { 637.875*OVERSAMPLENR, 95 },
  655. { 674.5625*OVERSAMPLENR, 90 },
  656. { 710*OVERSAMPLENR, 85 },
  657. { 744.125*OVERSAMPLENR, 80 },
  658. { 775.9375*OVERSAMPLENR, 75 },
  659. { 806.875*OVERSAMPLENR, 70 },
  660. { 835.1875*OVERSAMPLENR, 65 },
  661. { 861.125*OVERSAMPLENR, 60 },
  662. { 884.375*OVERSAMPLENR, 55 },
  663. { 904.5625*OVERSAMPLENR, 50 },
  664. { 923.8125*OVERSAMPLENR, 45 },
  665. { 940.375*OVERSAMPLENR, 40 },
  666. { 954.625*OVERSAMPLENR, 35 },
  667. { 966.875*OVERSAMPLENR, 30 },
  668. { 977.0625*OVERSAMPLENR, 25 },
  669. { 986*OVERSAMPLENR, 20 },
  670. { 993.375*OVERSAMPLENR, 15 },
  671. { 999.5*OVERSAMPLENR, 10 },
  672. { 1004.5*OVERSAMPLENR, 5 },
  673. { 1008.5*OVERSAMPLENR, 0 }
  674. };
  675. #endif
  676. #if (THERMISTORHEATER_0 == 20) || (THERMISTORHEATER_1 == 20) || (THERMISTORHEATER_2 == 20) || (THERMISTORBED == 20) // PT100 with INA826 amp on Ultimaker v2.0 electronics
  677. /* The PT100 in the Ultimaker v2.0 electronics has a high sample value for a high temperature.
  678. This does not match the normal thermistor behaviour so we need to set the following defines */
  679. #if (THERMISTORHEATER_0 == 20)
  680. # define HEATER_0_RAW_HI_TEMP 16383
  681. # define HEATER_0_RAW_LO_TEMP 0
  682. #endif
  683. #if (THERMISTORHEATER_1 == 20)
  684. # define HEATER_1_RAW_HI_TEMP 16383
  685. # define HEATER_1_RAW_LO_TEMP 0
  686. #endif
  687. #if (THERMISTORHEATER_2 == 20)
  688. # define HEATER_2_RAW_HI_TEMP 16383
  689. # define HEATER_2_RAW_LO_TEMP 0
  690. #endif
  691. #if (THERMISTORBED == 20)
  692. # define HEATER_BED_RAW_HI_TEMP 16383
  693. # define HEATER_BED_RAW_LO_TEMP 0
  694. #endif
  695. const short temptable_20[][2] PROGMEM = {
  696. { 0*OVERSAMPLENR , 0 },
  697. { 227*OVERSAMPLENR , 1 },
  698. { 236*OVERSAMPLENR , 10 },
  699. { 245*OVERSAMPLENR , 20 },
  700. { 253*OVERSAMPLENR , 30 },
  701. { 262*OVERSAMPLENR , 40 },
  702. { 270*OVERSAMPLENR , 50 },
  703. { 279*OVERSAMPLENR , 60 },
  704. { 287*OVERSAMPLENR , 70 },
  705. { 295*OVERSAMPLENR , 80 },
  706. { 304*OVERSAMPLENR , 90 },
  707. { 312*OVERSAMPLENR , 100 },
  708. { 320*OVERSAMPLENR , 110 },
  709. { 329*OVERSAMPLENR , 120 },
  710. { 337*OVERSAMPLENR , 130 },
  711. { 345*OVERSAMPLENR , 140 },
  712. { 353*OVERSAMPLENR , 150 },
  713. { 361*OVERSAMPLENR , 160 },
  714. { 369*OVERSAMPLENR , 170 },
  715. { 377*OVERSAMPLENR , 180 },
  716. { 385*OVERSAMPLENR , 190 },
  717. { 393*OVERSAMPLENR , 200 },
  718. { 401*OVERSAMPLENR , 210 },
  719. { 409*OVERSAMPLENR , 220 },
  720. { 417*OVERSAMPLENR , 230 },
  721. { 424*OVERSAMPLENR , 240 },
  722. { 432*OVERSAMPLENR , 250 },
  723. { 440*OVERSAMPLENR , 260 },
  724. { 447*OVERSAMPLENR , 270 },
  725. { 455*OVERSAMPLENR , 280 },
  726. { 463*OVERSAMPLENR , 290 },
  727. { 470*OVERSAMPLENR , 300 },
  728. { 478*OVERSAMPLENR , 310 },
  729. { 485*OVERSAMPLENR , 320 },
  730. { 493*OVERSAMPLENR , 330 },
  731. { 500*OVERSAMPLENR , 340 },
  732. { 507*OVERSAMPLENR , 350 },
  733. { 515*OVERSAMPLENR , 360 },
  734. { 522*OVERSAMPLENR , 370 },
  735. { 529*OVERSAMPLENR , 380 },
  736. { 537*OVERSAMPLENR , 390 },
  737. { 544*OVERSAMPLENR , 400 },
  738. { 614*OVERSAMPLENR , 500 },
  739. { 681*OVERSAMPLENR , 600 },
  740. { 744*OVERSAMPLENR , 700 },
  741. { 805*OVERSAMPLENR , 800 },
  742. { 862*OVERSAMPLENR , 900 },
  743. { 917*OVERSAMPLENR , 1000 },
  744. { 968*OVERSAMPLENR , 1100 }
  745. };
  746. #endif
  747. #if (THERMISTORHEATER_0 == 51) || (THERMISTORHEATER_1 == 51) || (THERMISTORHEATER_2 == 51) || (THERMISTORBED == 51)
  748. // 100k EPCOS (WITH 1kohm RESISTOR FOR PULLUP, R9 ON SANGUINOLOLU! NOT FOR 4.7kohm PULLUP! THIS IS NOT NORMAL!)
  749. // Verified by linagee.
  750. // Calculated using 1kohm pullup, voltage divider math, and manufacturer provided temp/resistance
  751. // Advantage: Twice the resolution and better linearity from 150C to 200C
  752. const short temptable_51[][2] PROGMEM = {
  753. {1*OVERSAMPLENR, 350},
  754. {190*OVERSAMPLENR, 250}, //top rating 250C
  755. {203*OVERSAMPLENR, 245},
  756. {217*OVERSAMPLENR, 240},
  757. {232*OVERSAMPLENR, 235},
  758. {248*OVERSAMPLENR, 230},
  759. {265*OVERSAMPLENR, 225},
  760. {283*OVERSAMPLENR, 220},
  761. {302*OVERSAMPLENR, 215},
  762. {322*OVERSAMPLENR, 210},
  763. {344*OVERSAMPLENR, 205},
  764. {366*OVERSAMPLENR, 200},
  765. {390*OVERSAMPLENR, 195},
  766. {415*OVERSAMPLENR, 190},
  767. {440*OVERSAMPLENR, 185},
  768. {467*OVERSAMPLENR, 180},
  769. {494*OVERSAMPLENR, 175},
  770. {522*OVERSAMPLENR, 170},
  771. {551*OVERSAMPLENR, 165},
  772. {580*OVERSAMPLENR, 160},
  773. {609*OVERSAMPLENR, 155},
  774. {638*OVERSAMPLENR, 150},
  775. {666*OVERSAMPLENR, 145},
  776. {695*OVERSAMPLENR, 140},
  777. {722*OVERSAMPLENR, 135},
  778. {749*OVERSAMPLENR, 130},
  779. {775*OVERSAMPLENR, 125},
  780. {800*OVERSAMPLENR, 120},
  781. {823*OVERSAMPLENR, 115},
  782. {845*OVERSAMPLENR, 110},
  783. {865*OVERSAMPLENR, 105},
  784. {884*OVERSAMPLENR, 100},
  785. {901*OVERSAMPLENR, 95},
  786. {917*OVERSAMPLENR, 90},
  787. {932*OVERSAMPLENR, 85},
  788. {944*OVERSAMPLENR, 80},
  789. {956*OVERSAMPLENR, 75},
  790. {966*OVERSAMPLENR, 70},
  791. {975*OVERSAMPLENR, 65},
  792. {982*OVERSAMPLENR, 60},
  793. {989*OVERSAMPLENR, 55},
  794. {995*OVERSAMPLENR, 50},
  795. {1000*OVERSAMPLENR, 45},
  796. {1004*OVERSAMPLENR, 40},
  797. {1007*OVERSAMPLENR, 35},
  798. {1010*OVERSAMPLENR, 30},
  799. {1013*OVERSAMPLENR, 25},
  800. {1015*OVERSAMPLENR, 20},
  801. {1017*OVERSAMPLENR, 15},
  802. {1018*OVERSAMPLENR, 10},
  803. {1019*OVERSAMPLENR, 5},
  804. {1020*OVERSAMPLENR, 0},
  805. {1021*OVERSAMPLENR, -5}
  806. };
  807. #endif
  808. #if (THERMISTORHEATER_0 == 52) || (THERMISTORHEATER_1 == 52) || (THERMISTORHEATER_2 == 52) || (THERMISTORBED == 52)
  809. // 200k ATC Semitec 204GT-2 (WITH 1kohm RESISTOR FOR PULLUP, R9 ON SANGUINOLOLU! NOT FOR 4.7kohm PULLUP! THIS IS NOT NORMAL!)
  810. // Verified by linagee. Source: http://shop.arcol.hu/static/datasheets/thermistors.pdf
  811. // Calculated using 1kohm pullup, voltage divider math, and manufacturer provided temp/resistance
  812. // Advantage: More resolution and better linearity from 150C to 200C
  813. const short temptable_52[][2] PROGMEM = {
  814. {1*OVERSAMPLENR, 500},
  815. {125*OVERSAMPLENR, 300}, //top rating 300C
  816. {142*OVERSAMPLENR, 290},
  817. {162*OVERSAMPLENR, 280},
  818. {185*OVERSAMPLENR, 270},
  819. {211*OVERSAMPLENR, 260},
  820. {240*OVERSAMPLENR, 250},
  821. {274*OVERSAMPLENR, 240},
  822. {312*OVERSAMPLENR, 230},
  823. {355*OVERSAMPLENR, 220},
  824. {401*OVERSAMPLENR, 210},
  825. {452*OVERSAMPLENR, 200},
  826. {506*OVERSAMPLENR, 190},
  827. {563*OVERSAMPLENR, 180},
  828. {620*OVERSAMPLENR, 170},
  829. {677*OVERSAMPLENR, 160},
  830. {732*OVERSAMPLENR, 150},
  831. {783*OVERSAMPLENR, 140},
  832. {830*OVERSAMPLENR, 130},
  833. {871*OVERSAMPLENR, 120},
  834. {906*OVERSAMPLENR, 110},
  835. {935*OVERSAMPLENR, 100},
  836. {958*OVERSAMPLENR, 90},
  837. {976*OVERSAMPLENR, 80},
  838. {990*OVERSAMPLENR, 70},
  839. {1000*OVERSAMPLENR, 60},
  840. {1008*OVERSAMPLENR, 50},
  841. {1013*OVERSAMPLENR, 40},
  842. {1017*OVERSAMPLENR, 30},
  843. {1019*OVERSAMPLENR, 20},
  844. {1021*OVERSAMPLENR, 10},
  845. {1022*OVERSAMPLENR, 0}
  846. };
  847. #endif
  848. #if (THERMISTORHEATER_0 == 55) || (THERMISTORHEATER_1 == 55) || (THERMISTORHEATER_2 == 55) || (THERMISTORBED == 55)
  849. // 100k ATC Semitec 104GT-2 (Used on ParCan) (WITH 1kohm RESISTOR FOR PULLUP, R9 ON SANGUINOLOLU! NOT FOR 4.7kohm PULLUP! THIS IS NOT NORMAL!)
  850. // Verified by linagee. Source: http://shop.arcol.hu/static/datasheets/thermistors.pdf
  851. // Calculated using 1kohm pullup, voltage divider math, and manufacturer provided temp/resistance
  852. // Advantage: More resolution and better linearity from 150C to 200C
  853. const short temptable_55[][2] PROGMEM = {
  854. {1*OVERSAMPLENR, 500},
  855. {76*OVERSAMPLENR, 300},
  856. {87*OVERSAMPLENR, 290},
  857. {100*OVERSAMPLENR, 280},
  858. {114*OVERSAMPLENR, 270},
  859. {131*OVERSAMPLENR, 260},
  860. {152*OVERSAMPLENR, 250},
  861. {175*OVERSAMPLENR, 240},
  862. {202*OVERSAMPLENR, 230},
  863. {234*OVERSAMPLENR, 220},
  864. {271*OVERSAMPLENR, 210},
  865. {312*OVERSAMPLENR, 200},
  866. {359*OVERSAMPLENR, 190},
  867. {411*OVERSAMPLENR, 180},
  868. {467*OVERSAMPLENR, 170},
  869. {527*OVERSAMPLENR, 160},
  870. {590*OVERSAMPLENR, 150},
  871. {652*OVERSAMPLENR, 140},
  872. {713*OVERSAMPLENR, 130},
  873. {770*OVERSAMPLENR, 120},
  874. {822*OVERSAMPLENR, 110},
  875. {867*OVERSAMPLENR, 100},
  876. {905*OVERSAMPLENR, 90},
  877. {936*OVERSAMPLENR, 80},
  878. {961*OVERSAMPLENR, 70},
  879. {979*OVERSAMPLENR, 60},
  880. {993*OVERSAMPLENR, 50},
  881. {1003*OVERSAMPLENR, 40},
  882. {1010*OVERSAMPLENR, 30},
  883. {1015*OVERSAMPLENR, 20},
  884. {1018*OVERSAMPLENR, 10},
  885. {1020*OVERSAMPLENR, 0}
  886. };
  887. #endif
  888. #if (THERMISTORHEATER_0 == 60) || (THERMISTORHEATER_1 == 60) || (THERMISTORHEATER_2 == 60) || (THERMISTORBED == 60) // Maker's Tool Works Kapton Bed Thermister
  889. // ./createTemperatureLookup.py --r0=100000 --t0=25 --r1=0 --r2=4700 --beta=3950
  890. // r0: 100000
  891. // t0: 25
  892. // r1: 0 (parallel with rTherm)
  893. // r2: 4700 (series with rTherm)
  894. // beta: 3950
  895. // min adc: 1 at 0.0048828125 V
  896. // max adc: 1023 at 4.9951171875 V
  897. const short temptable_60[][2] PROGMEM = {
  898. {51*OVERSAMPLENR, 272},
  899. {61*OVERSAMPLENR, 258},
  900. {71*OVERSAMPLENR, 247},
  901. {81*OVERSAMPLENR, 237},
  902. {91*OVERSAMPLENR, 229},
  903. {101*OVERSAMPLENR, 221},
  904. {131*OVERSAMPLENR, 204},
  905. {161*OVERSAMPLENR, 190},
  906. {191*OVERSAMPLENR, 179},
  907. {231*OVERSAMPLENR, 167},
  908. {271*OVERSAMPLENR, 157},
  909. {311*OVERSAMPLENR, 148},
  910. {351*OVERSAMPLENR, 140},
  911. {381*OVERSAMPLENR, 135},
  912. {411*OVERSAMPLENR, 130},
  913. {441*OVERSAMPLENR, 125},
  914. {451*OVERSAMPLENR, 123},
  915. {461*OVERSAMPLENR, 122},
  916. {471*OVERSAMPLENR, 120},
  917. {481*OVERSAMPLENR, 119},
  918. {491*OVERSAMPLENR, 117},
  919. {501*OVERSAMPLENR, 116},
  920. {511*OVERSAMPLENR, 114},
  921. {521*OVERSAMPLENR, 113},
  922. {531*OVERSAMPLENR, 111},
  923. {541*OVERSAMPLENR, 110},
  924. {551*OVERSAMPLENR, 108},
  925. {561*OVERSAMPLENR, 107},
  926. {571*OVERSAMPLENR, 105},
  927. {581*OVERSAMPLENR, 104},
  928. {591*OVERSAMPLENR, 102},
  929. {601*OVERSAMPLENR, 101},
  930. {611*OVERSAMPLENR, 100},
  931. {621*OVERSAMPLENR, 98},
  932. {631*OVERSAMPLENR, 97},
  933. {641*OVERSAMPLENR, 95},
  934. {651*OVERSAMPLENR, 94},
  935. {661*OVERSAMPLENR, 92},
  936. {671*OVERSAMPLENR, 91},
  937. {681*OVERSAMPLENR, 90},
  938. {691*OVERSAMPLENR, 88},
  939. {701*OVERSAMPLENR, 87},
  940. {711*OVERSAMPLENR, 85},
  941. {721*OVERSAMPLENR, 84},
  942. {731*OVERSAMPLENR, 82},
  943. {741*OVERSAMPLENR, 81},
  944. {751*OVERSAMPLENR, 79},
  945. {761*OVERSAMPLENR, 77},
  946. {771*OVERSAMPLENR, 76},
  947. {781*OVERSAMPLENR, 74},
  948. {791*OVERSAMPLENR, 72},
  949. {801*OVERSAMPLENR, 71},
  950. {811*OVERSAMPLENR, 69},
  951. {821*OVERSAMPLENR, 67},
  952. {831*OVERSAMPLENR, 65},
  953. {841*OVERSAMPLENR, 63},
  954. {851*OVERSAMPLENR, 62},
  955. {861*OVERSAMPLENR, 60},
  956. {871*OVERSAMPLENR, 57},
  957. {881*OVERSAMPLENR, 55},
  958. {891*OVERSAMPLENR, 53},
  959. {901*OVERSAMPLENR, 51},
  960. {911*OVERSAMPLENR, 48},
  961. {921*OVERSAMPLENR, 45},
  962. {931*OVERSAMPLENR, 42},
  963. {941*OVERSAMPLENR, 39},
  964. {951*OVERSAMPLENR, 36},
  965. {961*OVERSAMPLENR, 32},
  966. {981*OVERSAMPLENR, 23},
  967. {991*OVERSAMPLENR, 17},
  968. {1001*OVERSAMPLENR, 9},
  969. {1008*OVERSAMPLENR, 0},
  970. };
  971. #endif
  972. #if (THERMISTORBED == 12)
  973. //100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
  974. const short temptable_12[][2] PROGMEM = {
  975. {35*OVERSAMPLENR, 180}, //top rating 180C
  976. {211*OVERSAMPLENR, 140},
  977. {233*OVERSAMPLENR, 135},
  978. {261*OVERSAMPLENR, 130},
  979. {290*OVERSAMPLENR, 125},
  980. {328*OVERSAMPLENR, 120},
  981. {362*OVERSAMPLENR, 115},
  982. {406*OVERSAMPLENR, 110},
  983. {446*OVERSAMPLENR, 105},
  984. {496*OVERSAMPLENR, 100},
  985. {539*OVERSAMPLENR, 95},
  986. {585*OVERSAMPLENR, 90},
  987. {629*OVERSAMPLENR, 85},
  988. {675*OVERSAMPLENR, 80},
  989. {718*OVERSAMPLENR, 75},
  990. {758*OVERSAMPLENR, 70},
  991. {793*OVERSAMPLENR, 65},
  992. {822*OVERSAMPLENR, 60},
  993. {841*OVERSAMPLENR, 55},
  994. {875*OVERSAMPLENR, 50},
  995. {899*OVERSAMPLENR, 45},
  996. {926*OVERSAMPLENR, 40},
  997. {946*OVERSAMPLENR, 35},
  998. {962*OVERSAMPLENR, 30},
  999. {977*OVERSAMPLENR, 25},
  1000. {987*OVERSAMPLENR, 20},
  1001. {995*OVERSAMPLENR, 15},
  1002. {1001*OVERSAMPLENR, 10},
  1003. {1010*OVERSAMPLENR, 0},
  1004. {1023*OVERSAMPLENR, -40},
  1005. };
  1006. #endif
  1007. // Pt1000 and Pt100 handling
  1008. //
  1009. // Rt=R0*(1+a*T+b*T*T) [for T>0]
  1010. // a=3.9083E-3, b=-5.775E-7
  1011. #define PtA 3.9083E-3
  1012. #define PtB -5.775E-7
  1013. #define PtRt(T,R0) ((R0)*(1.0+(PtA)*(T)+(PtB)*(T)*(T)))
  1014. #define PtAdVal(T,R0,Rup) (short)(1024/(Rup/PtRt(T,R0)+1))
  1015. #define PtLine(T,R0,Rup) { PtAdVal(T,R0,Rup)*OVERSAMPLENR, T },
  1016. #if (THERMISTORHEATER_0 == 110) || (THERMISTORHEATER_1 == 110) || (THERMISTORHEATER_2 == 110) || (THERMISTORBED == 110) // Pt100 with 1k0 pullup
  1017. const short temptable_110[][2] PROGMEM = {
  1018. // only few values are needed as the curve is very flat
  1019. PtLine(0,100,1000)
  1020. PtLine(50,100,1000)
  1021. PtLine(100,100,1000)
  1022. PtLine(150,100,1000)
  1023. PtLine(200,100,1000)
  1024. PtLine(250,100,1000)
  1025. PtLine(300,100,1000)
  1026. };
  1027. #endif
  1028. #if (THERMISTORHEATER_0 == 147) || (THERMISTORHEATER_1 == 147) || (THERMISTORHEATER_2 == 147) || (THERMISTORBED == 147) // Pt100 with 4k7 pullup
  1029. const short temptable_147[][2] PROGMEM = {
  1030. // only few values are needed as the curve is very flat
  1031. PtLine(0,100,4700)
  1032. PtLine(50,100,4700)
  1033. PtLine(100,100,4700)
  1034. PtLine(150,100,4700)
  1035. PtLine(200,100,4700)
  1036. PtLine(250,100,4700)
  1037. PtLine(300,100,4700)
  1038. PtLine(350,100,4700)
  1039. PtLine(400,100,4700)
  1040. PtLine(450,100,4700)
  1041. PtLine(500,100,4700)
  1042. PtLine(550,100,4700)
  1043. PtLine(600,100,4700)
  1044. PtLine(650,100,4700)
  1045. PtLine(700,100,4700)
  1046. PtLine(750,100,4700)
  1047. PtLine(800,100,4700)
  1048. PtLine(850,100,4700)
  1049. PtLine(900,100,4700)
  1050. PtLine(950,100,4700)
  1051. PtLine(1000,100,4700)
  1052. PtLine(1050,100,4700)
  1053. PtLine(1100,100,4700)
  1054. };
  1055. #endif
  1056. #if (THERMISTORHEATER_0 == 148) || (THERMISTORHEATER_1 == 148) || (THERMISTORHEATER_2 == 148) || (THERMISTORBED == 148) // Pt100 with 4k7 MiniRambo pullup, no Amp.
  1057. const short temptable_148[][2] PROGMEM = {
  1058. // More raw data values avaliable via http://www.micropik.com/PDF/pt100.pdf
  1059. // This information is taken from http://shop.prusa3d.com/forum/improvements-f14/mini-rambo-1-3-and-e3d-with-pt100-t700-s40.html#p20938
  1060. {0,0}, // first two entries are bogus, just to get the heater running
  1061. {286,50},
  1062. {469,100},
  1063. {531,150},
  1064. {590,200},
  1065. {649,250},
  1066. {708,300},
  1067. {763,350},
  1068. {819,400},
  1069. {872,450},
  1070. };
  1071. #endif
  1072. #if (THERMISTORHEATER_0 == 247) || (THERMISTORHEATER_1 == 247) || (THERMISTORHEATER_2 == 247) || (THERMISTORBED == 247) // Pt100 with 4k7 MiniRambo pullup & PT100 Amplifier
  1073. const short temptable_247[][2] PROGMEM = {
  1074. // Calculated from Bob-the-Kuhn's PT100 calculator listed in https://github.com/MarlinFirmware/Marlin/issues/5543
  1075. // and the table provided by E3D at http://wiki.e3d-online.com/wiki/E3D_PT100_Amplifier_Documentation#Output_Characteristics.
  1076. { 0 * OVERSAMPLENR, 0 },
  1077. { 244 * OVERSAMPLENR, 1 },
  1078. { 252 * OVERSAMPLENR, 10 },
  1079. { 262 * OVERSAMPLENR, 20 },
  1080. { 270 * OVERSAMPLENR, 30 },
  1081. { 278 * OVERSAMPLENR, 40 },
  1082. { 286 * OVERSAMPLENR, 50 },
  1083. { 294 * OVERSAMPLENR, 60 },
  1084. { 302 * OVERSAMPLENR, 70 },
  1085. { 310 * OVERSAMPLENR, 80 },
  1086. { 318 * OVERSAMPLENR, 90 },
  1087. { 326 * OVERSAMPLENR, 100 },
  1088. { 334 * OVERSAMPLENR, 110 },
  1089. { 344 * OVERSAMPLENR, 120 },
  1090. { 352 * OVERSAMPLENR, 130 },
  1091. { 358 * OVERSAMPLENR, 140 },
  1092. { 366 * OVERSAMPLENR, 150 },
  1093. { 374 * OVERSAMPLENR, 160 },
  1094. { 382 * OVERSAMPLENR, 170 },
  1095. { 390 * OVERSAMPLENR, 180 },
  1096. { 398 * OVERSAMPLENR, 190 },
  1097. { 406 * OVERSAMPLENR, 200 },
  1098. { 414 * OVERSAMPLENR, 210 },
  1099. { 422 * OVERSAMPLENR, 220 },
  1100. { 430 * OVERSAMPLENR, 230 },
  1101. { 436 * OVERSAMPLENR, 240 },
  1102. { 444 * OVERSAMPLENR, 250 },
  1103. { 452 * OVERSAMPLENR, 260 },
  1104. { 458 * OVERSAMPLENR, 270 },
  1105. { 466 * OVERSAMPLENR, 280 },
  1106. { 474 * OVERSAMPLENR, 290 },
  1107. { 480 * OVERSAMPLENR, 300 },
  1108. { 488 * OVERSAMPLENR, 310 },
  1109. { 496 * OVERSAMPLENR, 320 },
  1110. { 504 * OVERSAMPLENR, 330 },
  1111. { 510 * OVERSAMPLENR, 340 },
  1112. { 518 * OVERSAMPLENR, 350 },
  1113. { 524 * OVERSAMPLENR, 360 },
  1114. { 532 * OVERSAMPLENR, 370 },
  1115. { 538 * OVERSAMPLENR, 380 },
  1116. { 546 * OVERSAMPLENR, 390 },
  1117. { 554 * OVERSAMPLENR, 400 },
  1118. { 622 * OVERSAMPLENR, 500 },
  1119. { 688 * OVERSAMPLENR, 600 },
  1120. { 749 * OVERSAMPLENR, 700 },
  1121. { 809 * OVERSAMPLENR, 800 },
  1122. { 865 * OVERSAMPLENR, 900 },
  1123. { 919 * OVERSAMPLENR, 1000 },
  1124. { 969 * OVERSAMPLENR, 1100 },
  1125. };
  1126. #endif
  1127. #if (THERMISTORHEATER_0 == 1010) || (THERMISTORHEATER_1 == 1010) || (THERMISTORHEATER_2 == 1010) || (THERMISTORBED == 1010) // Pt1000 with 1k0 pullup
  1128. const short temptable_1010[][2] PROGMEM = {
  1129. PtLine(0,1000,1000)
  1130. PtLine(25,1000,1000)
  1131. PtLine(50,1000,1000)
  1132. PtLine(75,1000,1000)
  1133. PtLine(100,1000,1000)
  1134. PtLine(125,1000,1000)
  1135. PtLine(150,1000,1000)
  1136. PtLine(175,1000,1000)
  1137. PtLine(200,1000,1000)
  1138. PtLine(225,1000,1000)
  1139. PtLine(250,1000,1000)
  1140. PtLine(275,1000,1000)
  1141. PtLine(300,1000,1000)
  1142. };
  1143. #endif
  1144. #if (THERMISTORHEATER_0 == 1047) || (THERMISTORHEATER_1 == 1047) || (THERMISTORHEATER_2 == 1047) || (THERMISTORBED == 1047) // Pt1000 with 4k7 pullup
  1145. const short temptable_1047[][2] PROGMEM = {
  1146. // only few values are needed as the curve is very flat
  1147. PtLine(0,1000,4700)
  1148. PtLine(50,1000,4700)
  1149. PtLine(100,1000,4700)
  1150. PtLine(150,1000,4700)
  1151. PtLine(200,1000,4700)
  1152. PtLine(250,1000,4700)
  1153. PtLine(300,1000,4700)
  1154. };
  1155. #endif
  1156. #define _TT_NAME(_N) temptable_ ## _N
  1157. #define TT_NAME(_N) _TT_NAME(_N)
  1158. #ifdef THERMISTORHEATER_0
  1159. # define HEATER_0_TEMPTABLE TT_NAME(THERMISTORHEATER_0)
  1160. # define HEATER_0_TEMPTABLE_LEN (sizeof(HEATER_0_TEMPTABLE)/sizeof(*HEATER_0_TEMPTABLE))
  1161. #else
  1162. # ifdef HEATER_0_USES_THERMISTOR
  1163. # error No heater 0 thermistor table specified
  1164. # else // HEATER_0_USES_THERMISTOR
  1165. # define HEATER_0_TEMPTABLE NULL
  1166. # define HEATER_0_TEMPTABLE_LEN 0
  1167. # endif // HEATER_0_USES_THERMISTOR
  1168. #endif
  1169. //Set the high and low raw values for the heater, this indicates which raw value is a high or low temperature
  1170. #ifndef HEATER_0_RAW_HI_TEMP
  1171. # ifdef HEATER_0_USES_THERMISTOR //In case of a thermistor the highest temperature results in the lowest ADC value
  1172. # define HEATER_0_RAW_HI_TEMP 0
  1173. # define HEATER_0_RAW_LO_TEMP 16383
  1174. # else //In case of an thermocouple the highest temperature results in the highest ADC value
  1175. # define HEATER_0_RAW_HI_TEMP 16383
  1176. # define HEATER_0_RAW_LO_TEMP 0
  1177. # endif
  1178. #endif
  1179. #ifdef THERMISTORHEATER_1
  1180. # define HEATER_1_TEMPTABLE TT_NAME(THERMISTORHEATER_1)
  1181. # define HEATER_1_TEMPTABLE_LEN (sizeof(HEATER_1_TEMPTABLE)/sizeof(*HEATER_1_TEMPTABLE))
  1182. #else
  1183. # ifdef HEATER_1_USES_THERMISTOR
  1184. # error No heater 1 thermistor table specified
  1185. # else // HEATER_1_USES_THERMISTOR
  1186. # define HEATER_1_TEMPTABLE NULL
  1187. # define HEATER_1_TEMPTABLE_LEN 0
  1188. # endif // HEATER_1_USES_THERMISTOR
  1189. #endif
  1190. //Set the high and low raw values for the heater, this indicates which raw value is a high or low temperature
  1191. #ifndef HEATER_1_RAW_HI_TEMP
  1192. # ifdef HEATER_1_USES_THERMISTOR //In case of a thermistor the highest temperature results in the lowest ADC value
  1193. # define HEATER_1_RAW_HI_TEMP 0
  1194. # define HEATER_1_RAW_LO_TEMP 16383
  1195. # else //In case of an thermocouple the highest temperature results in the highest ADC value
  1196. # define HEATER_1_RAW_HI_TEMP 16383
  1197. # define HEATER_1_RAW_LO_TEMP 0
  1198. # endif
  1199. #endif
  1200. #ifdef THERMISTORHEATER_2
  1201. # define HEATER_2_TEMPTABLE TT_NAME(THERMISTORHEATER_2)
  1202. # define HEATER_2_TEMPTABLE_LEN (sizeof(HEATER_2_TEMPTABLE)/sizeof(*HEATER_2_TEMPTABLE))
  1203. #else
  1204. # ifdef HEATER_2_USES_THERMISTOR
  1205. # error No heater 2 thermistor table specified
  1206. # else // HEATER_2_USES_THERMISTOR
  1207. # define HEATER_2_TEMPTABLE NULL
  1208. # define HEATER_2_TEMPTABLE_LEN 0
  1209. # endif // HEATER_2_USES_THERMISTOR
  1210. #endif
  1211. //Set the high and low raw values for the heater, this indicates which raw value is a high or low temperature
  1212. #ifndef HEATER_2_RAW_HI_TEMP
  1213. # ifdef HEATER_2_USES_THERMISTOR //In case of a thermistor the highest temperature results in the lowest ADC value
  1214. # define HEATER_2_RAW_HI_TEMP 0
  1215. # define HEATER_2_RAW_LO_TEMP 16383
  1216. # else //In case of an thermocouple the highest temperature results in the highest ADC value
  1217. # define HEATER_2_RAW_HI_TEMP 16383
  1218. # define HEATER_2_RAW_LO_TEMP 0
  1219. # endif
  1220. #endif
  1221. #ifdef THERMISTORBED
  1222. # define BEDTEMPTABLE TT_NAME(THERMISTORBED)
  1223. # define BEDTEMPTABLE_LEN (sizeof(BEDTEMPTABLE)/sizeof(*BEDTEMPTABLE))
  1224. #else
  1225. # ifdef BED_USES_THERMISTOR
  1226. # error No bed thermistor table specified
  1227. # endif // BED_USES_THERMISTOR
  1228. #endif
  1229. //Set the high and low raw values for the heater, this indicates which raw value is a high or low temperature
  1230. #ifndef HEATER_BED_RAW_HI_TEMP
  1231. # ifdef BED_USES_THERMISTOR //In case of a thermistor the highest temperature results in the lowest ADC value
  1232. # define HEATER_BED_RAW_HI_TEMP 0
  1233. # define HEATER_BED_RAW_LO_TEMP 16383
  1234. # else //In case of an thermocouple the highest temperature results in the highest ADC value
  1235. # define HEATER_BED_RAW_HI_TEMP 16383
  1236. # define HEATER_BED_RAW_LO_TEMP 0
  1237. # endif
  1238. #endif
  1239. #endif //THERMISTORTABLES_H_