|
@@ -10,11 +10,14 @@
|
|
|
#include "cmdqueue.h"
|
|
|
|
|
|
|
|
|
+const char ERRMSG_PAT9125_NOT_RESP[] PROGMEM = "PAT9125 not responding (%d)!\n";
|
|
|
|
|
|
-#define FSENSOR_ERR_MAX 5 //filament sensor max error count
|
|
|
+//#define FSENSOR_ERR_MAX 5 //filament sensor max error count
|
|
|
+#define FSENSOR_ERR_MAX 10 //filament sensor max error count
|
|
|
#define FSENSOR_INT_PIN 63 //filament sensor interrupt pin PK1
|
|
|
#define FSENSOR_INT_PIN_MSK 0x02 //filament sensor interrupt pin mask (bit1)
|
|
|
-#define FSENSOR_CHUNK_LEN 280 //filament sensor chunk length in steps
|
|
|
+//#define FSENSOR_CHUNK_LEN 280 //filament sensor chunk length in steps - 1mm
|
|
|
+#define FSENSOR_CHUNK_LEN 180 //filament sensor chunk length in steps - 0.64mm
|
|
|
|
|
|
extern void stop_and_save_print_to_ram(float z_move, float e_move);
|
|
|
extern void restore_print_from_ram_and_continue(float e_move);
|
|
@@ -115,7 +118,7 @@ void fsensor_autoload_check_start(void)
|
|
|
// puts_P(PSTR("fsensor_autoload_check_start\n"));
|
|
|
if (!pat9125_update_y()) //update sensor
|
|
|
{
|
|
|
- puts_P(PSTR("pat9125 not responding (3).\n"));
|
|
|
+ printf_P(ERRMSG_PAT9125_NOT_RESP, 3);
|
|
|
fsensor_disable();
|
|
|
fsensor_not_responding = true;
|
|
|
fsensor_autoload_enabled = false;
|
|
@@ -144,7 +147,7 @@ bool fsensor_check_autoload(void)
|
|
|
fsensor_autoload_last_millis = millis();
|
|
|
if (!pat9125_update_y())
|
|
|
{
|
|
|
- puts_P(PSTR("pat9125 not responding (2).\n"));
|
|
|
+ printf_P(ERRMSG_PAT9125_NOT_RESP, 2);
|
|
|
fsensor_disable();
|
|
|
fsensor_not_responding = true;
|
|
|
return false; //update sensor
|
|
@@ -173,74 +176,44 @@ bool fsensor_check_autoload(void)
|
|
|
|
|
|
ISR(PCINT2_vect)
|
|
|
{
|
|
|
-// puts("PCINT2\n");
|
|
|
if (!((fsensor_int_pin_old ^ PINK) & FSENSOR_INT_PIN_MSK)) return;
|
|
|
fsensor_int_pin_old = PINK;
|
|
|
static bool _lock = false;
|
|
|
if (_lock) return;
|
|
|
_lock = true;
|
|
|
-// return;
|
|
|
int st_cnt = fsensor_st_cnt;
|
|
|
fsensor_st_cnt = 0;
|
|
|
sei();
|
|
|
-/* *digitalPinToPCMSK(fsensor_int_pin) &= ~bit(digitalPinToPCMSKbit(fsensor_int_pin));
|
|
|
- digitalWrite(fsensor_int_pin, HIGH);
|
|
|
- *digitalPinToPCMSK(fsensor_int_pin) |= bit(digitalPinToPCMSKbit(fsensor_int_pin));*/
|
|
|
+ uint8_t old_err_cnt = fsensor_err_cnt;
|
|
|
if (!pat9125_update_y())
|
|
|
{
|
|
|
-//#ifdef DEBUG_FSENSOR_LOG
|
|
|
- puts_P(PSTR("pat9125 not responding (1).\n"));
|
|
|
-//#endif //DEBUG_FSENSOR_LOG
|
|
|
+ printf_P(ERRMSG_PAT9125_NOT_RESP, 1);
|
|
|
fsensor_disable();
|
|
|
fsensor_not_responding = true;
|
|
|
}
|
|
|
if (st_cnt != 0)
|
|
|
- {
|
|
|
-#ifdef DEBUG_FSENSOR_LOG
|
|
|
- if (fsensor_log)
|
|
|
- {
|
|
|
- MYSERIAL.print("cnt=");
|
|
|
- MYSERIAL.print(st_cnt, DEC);
|
|
|
- MYSERIAL.print(" dy=");
|
|
|
- MYSERIAL.print(pat9125_y, DEC);
|
|
|
- }
|
|
|
-#endif //DEBUG_FSENSOR_LOG
|
|
|
- if (st_cnt != 0)
|
|
|
+ { //movement
|
|
|
+ if (st_cnt > 0) //positive movement
|
|
|
{
|
|
|
- if( (pat9125_y == 0) || ((pat9125_y > 0) && (st_cnt < 0)) || ((pat9125_y < 0) && (st_cnt > 0)))
|
|
|
- { //invalid movement
|
|
|
- if (st_cnt > 0) //only positive movements
|
|
|
- fsensor_err_cnt++;
|
|
|
-#ifdef DEBUG_FSENSOR_LOG
|
|
|
- if (fsensor_log)
|
|
|
- {
|
|
|
- MYSERIAL.print("\tNG ! err=");
|
|
|
- MYSERIAL.println(fsensor_err_cnt, DEC);
|
|
|
- }
|
|
|
-#endif //DEBUG_FSENSOR_LOG
|
|
|
- }
|
|
|
+ if (pat9125_y <= 0)
|
|
|
+ fsensor_err_cnt++;
|
|
|
else
|
|
|
- { //propper movement
|
|
|
- if (fsensor_err_cnt > 0)
|
|
|
+ if (fsensor_err_cnt)
|
|
|
fsensor_err_cnt--;
|
|
|
-// fsensor_err_cnt = 0;
|
|
|
-#ifdef DEBUG_FSENSOR_LOG
|
|
|
- if (fsensor_log)
|
|
|
- {
|
|
|
- MYSERIAL.print("\tOK err=");
|
|
|
- MYSERIAL.println(fsensor_err_cnt, DEC);
|
|
|
- }
|
|
|
-#endif //DEBUG_FSENSOR_LOG
|
|
|
- }
|
|
|
}
|
|
|
- else
|
|
|
- { //no movement
|
|
|
-#ifdef DEBUG_FSENSOR_LOG
|
|
|
- if (fsensor_log)
|
|
|
- MYSERIAL.println("\tOK 0");
|
|
|
-#endif //DEBUG_FSENSOR_LOG
|
|
|
+ else //negative movement
|
|
|
+ {
|
|
|
}
|
|
|
}
|
|
|
+ else
|
|
|
+ { //no movement
|
|
|
+ }
|
|
|
+
|
|
|
+#ifdef DEBUG_FSENSOR_LOG
|
|
|
+ if (fsensor_log)
|
|
|
+ printf_P(_N("FSENSOR cnt=%d dy=%d err=%d %S\n"), st_cnt, pat9125_y, fsensor_err_cnt, (fsensor_err_cnt > old_err_cnt)?_N("NG!"):_N("OK"));
|
|
|
+#endif //DEBUG_FSENSOR_LOG
|
|
|
+
|
|
|
pat9125_y = 0;
|
|
|
_lock = false;
|
|
|
return;
|