reprap heated bedの温度エラーが発生する

私の環境の3Dプリンタは自作のため、エクストルーダの温度計は熱電対、ヒートベッドはサーミスタを使用しています。ですが、なぜかこの組み合わせだと、Printrun起動時にエラーが発生します。

Error:Heated bed switched off. MAXTEMP triggered !!

最初は半田不良等が原因かと思いましたが、テスタで確認しても
問題なさそうだし、???
ググってると、同じような方がいました。
Marlinでは熱電対、サーミスタを組み合わせて使えないみたいです。なんでやねん。

https://ultimaker.com/en/community/view/11056-thermistor-and-thermocouple-wont-work-together

ということで手探り状態ですが、出力されるエラーメッセージから
Marlin firmwareのソースをgrepしてみました。

$ grep "MAXTEMP triggered" *
language.h:#define MSG_SWITCHED_OFF_MAX                " switched off. MAXTEMP triggered !!"

それで

$ grep MSG_SWITCHED_OFF_MAX *
language.h:#define MSG_SWITCHED_OFF_MAX                " switched off. MAXTEMP triggered !!"
language.h:#define MSG_MAXTEMP_EXTRUDER_OFF            ": Extruder" MSG_SWITCHED_OFF_MAX
language.h:#define MSG_MAXTEMP_BED_OFF                 "Heated bed" MSG_SWITCHED_OFF_MAX

さらに

$ grep -R MSG_MAXTEMP_BED_OFF *
language.h:#define MSG_MAXTEMP_BED_OFF                 "Heated bed" MSG_SWITCHED_OFF_MAX
temperature.cpp:    SERIAL_ERRORLNPGM(MSG_MAXTEMP_BED_OFF);

で、temperature.cppを眺めるとbed_max_temp_error関数で呼ばれていました。
さらにbed_max_temp_error関数はISR関数の以下の箇所でした。

1604     /* No bed MINTEMP error? */   
1605     #if defined(BED_MAXTEMP) && (TEMP_SENSOR_BED != 0)   
1606       if (current_temperature_bed_raw MAXTEST bed_maxttemp_raw) {   
1607           target_temperature_bed = 0;   
1608           bed_max_temp_error();   
1609         }   
1610     #endif   
1611   } // temp_count >= OVERSAMPLENR

SERIAL_ECHOマクロを埋め込み、変数の値を確認したところ、以下のとおりでした。

current_temperature_bed_raw = 15665
bed_maxttemp_raw = 0

なぜか、maxttempが0になっています。これが原因と判明しましたがなぜそうなるのか、私には分かりません。とりあえず、上記箇所をコメントアウトしたところ、エラーは出なくなりました。

またPrintrunで温度計、およびヒータを確認したところ、正常に動作するようになりました。

f:id:mondayboy:20150515011018p:plain

こんな適当でいいのかと思いながら、目を閉じました。
あとはエクストルーダのステッピングモータが動かないのを調べないと。。。
自作3Dプリンタ完成まで、まだ時間がかかりそうです。